diff options
Diffstat (limited to '')
-rw-r--r-- | examples/tour/src/iced_ggez.rs | 6 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/main.rs (renamed from examples/tour/main.rs) | 28 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer.rs (renamed from examples/tour/renderer.rs) | 20 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/button.rs (renamed from examples/tour/renderer/button.rs) | 0 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/checkbox.rs (renamed from examples/tour/renderer/checkbox.rs) | 0 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/debugger.rs (renamed from examples/tour/renderer/debugger.rs) | 10 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/image.rs (renamed from examples/tour/renderer/image.rs) | 45 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/radio.rs (renamed from examples/tour/renderer/radio.rs) | 0 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/slider.rs (renamed from examples/tour/renderer/slider.rs) | 0 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/renderer/text.rs (renamed from examples/tour/renderer/text.rs) | 10 | ||||
-rw-r--r-- | examples/tour/src/iced_ggez/widget.rs (renamed from examples/tour/widget.rs) | 6 | ||||
-rw-r--r-- | examples/tour/src/lib.rs | 11 | ||||
-rw-r--r-- | examples/tour/src/tour.rs (renamed from web/examples/tour/src/tour.rs) | 2 | ||||
-rw-r--r-- | examples/tour/src/web.rs (renamed from web/examples/tour/src/lib.rs) | 4 | ||||
-rw-r--r-- | examples/tour/src/widget.rs | 5 |
15 files changed, 105 insertions, 42 deletions
diff --git a/examples/tour/src/iced_ggez.rs b/examples/tour/src/iced_ggez.rs new file mode 100644 index 00000000..4a9c0ef4 --- /dev/null +++ b/examples/tour/src/iced_ggez.rs @@ -0,0 +1,6 @@ +mod renderer; +mod widget; + +pub use renderer::Cache as ImageCache; +pub use renderer::Renderer; +pub use widget::*; diff --git a/examples/tour/main.rs b/examples/tour/src/iced_ggez/main.rs index 571bc2e2..a8cf09e5 100644 --- a/examples/tour/main.rs +++ b/examples/tour/src/iced_ggez/main.rs @@ -1,10 +1,4 @@ -mod renderer; -mod tour; -mod widget; - -use renderer::Renderer; -use tour::Tour; -use widget::Column; +use iced_tour::{iced_ggez, Tour}; use ggez; use ggez::event; @@ -26,10 +20,7 @@ pub fn main() -> ggez::GameResult { filesystem::mount( context, - std::path::Path::new(&format!( - "{}/examples/resources", - env!("CARGO_MANIFEST_DIR") - )), + std::path::Path::new(env!("CARGO_MANIFEST_DIR")), true, ); @@ -41,6 +32,7 @@ pub fn main() -> ggez::GameResult { struct Game { spritesheet: graphics::Image, font: graphics::Font, + images: iced_ggez::ImageCache, tour: Tour, events: Vec<iced::Event>, @@ -52,9 +44,12 @@ impl Game { graphics::set_default_filter(context, graphics::FilterMode::Nearest); Ok(Game { - spritesheet: graphics::Image::new(context, "/ui.png").unwrap(), - font: graphics::Font::new(context, "/Roboto-Regular.ttf").unwrap(), - tour: Tour::new(context), + spritesheet: graphics::Image::new(context, "/resources/ui.png") + .unwrap(), + font: graphics::Font::new(context, "/resources/Roboto-Regular.ttf") + .unwrap(), + images: iced_ggez::ImageCache::new(), + tour: Tour::new(), events: Vec::new(), cache: Some(iced::Cache::default()), @@ -136,7 +131,7 @@ impl event::EventHandler for Game { let (messages, cursor) = { let view = self.tour.view(); - let content = Column::new() + let content = iced_ggez::Column::new() .width(screen.w as u16) .height(screen.h as u16) .padding(20) @@ -144,8 +139,9 @@ impl event::EventHandler for Game { .justify_content(iced::Justify::Center) .push(view); - let renderer = &mut Renderer::new( + let renderer = &mut iced_ggez::Renderer::new( context, + &mut self.images, self.spritesheet.clone(), self.font, ); diff --git a/examples/tour/renderer.rs b/examples/tour/src/iced_ggez/renderer.rs index 8746dd96..e3181eaa 100644 --- a/examples/tour/renderer.rs +++ b/examples/tour/src/iced_ggez/renderer.rs @@ -11,8 +11,11 @@ use ggez::graphics::{ }; use ggez::Context; +pub use image::Cache; + pub struct Renderer<'a> { pub context: &'a mut Context, + pub images: &'a mut image::Cache, pub sprites: SpriteBatch, pub spritesheet: Image, pub font: Font, @@ -20,14 +23,16 @@ pub struct Renderer<'a> { debug_mesh: Option<MeshBuilder>, } -impl Renderer<'_> { +impl<'a> Renderer<'a> { pub fn new( - context: &mut Context, + context: &'a mut Context, + images: &'a mut image::Cache, spritesheet: Image, font: Font, - ) -> Renderer { + ) -> Renderer<'a> { Renderer { context, + images, sprites: SpriteBatch::new(spritesheet.clone()), spritesheet, font, @@ -61,3 +66,12 @@ impl Renderer<'_> { } } } + +pub fn into_color(color: iced::Color) -> graphics::Color { + graphics::Color { + r: color.r, + g: color.g, + b: color.b, + a: color.a, + } +} diff --git a/examples/tour/renderer/button.rs b/examples/tour/src/iced_ggez/renderer/button.rs index 486e07ed..486e07ed 100644 --- a/examples/tour/renderer/button.rs +++ b/examples/tour/src/iced_ggez/renderer/button.rs diff --git a/examples/tour/renderer/checkbox.rs b/examples/tour/src/iced_ggez/renderer/checkbox.rs index 20a91be5..20a91be5 100644 --- a/examples/tour/renderer/checkbox.rs +++ b/examples/tour/src/iced_ggez/renderer/checkbox.rs diff --git a/examples/tour/renderer/debugger.rs b/examples/tour/src/iced_ggez/renderer/debugger.rs index 98124795..c6727881 100644 --- a/examples/tour/renderer/debugger.rs +++ b/examples/tour/src/iced_ggez/renderer/debugger.rs @@ -1,10 +1,10 @@ -use super::Renderer; -use ggez::graphics::{Color, DrawMode, MeshBuilder, Rect}; +use super::{into_color, Renderer}; +use ggez::graphics::{DrawMode, MeshBuilder, Rect}; impl iced::renderer::Debugger for Renderer<'_> { - type Color = Color; + type Color = iced::Color; - fn explain(&mut self, layout: &iced::Layout<'_>, color: Color) { + fn explain(&mut self, layout: &iced::Layout<'_>, color: iced::Color) { let bounds = layout.bounds(); let mut debug_mesh = @@ -18,7 +18,7 @@ impl iced::renderer::Debugger for Renderer<'_> { w: bounds.width, h: bounds.height, }, - color, + into_color(color), ); self.debug_mesh = Some(debug_mesh); diff --git a/examples/tour/renderer/image.rs b/examples/tour/src/iced_ggez/renderer/image.rs index c3ead5c9..17c6a56e 100644 --- a/examples/tour/renderer/image.rs +++ b/examples/tour/src/iced_ggez/renderer/image.rs @@ -3,15 +3,48 @@ use super::Renderer; use ggez::{graphics, nalgebra}; use iced::image; -impl image::Renderer<graphics::Image> for Renderer<'_> { +pub struct Cache { + images: std::collections::HashMap<String, graphics::Image>, +} + +impl Cache { + pub fn new() -> Self { + Self { + images: std::collections::HashMap::new(), + } + } + + fn get<'a>( + &mut self, + name: &'a str, + context: &mut ggez::Context, + ) -> graphics::Image { + if let Some(image) = self.images.get(name) { + return image.clone(); + } + + let mut image = graphics::Image::new(context, &format!("/{}", name)) + .expect("Load ferris image"); + + image.set_filter(graphics::FilterMode::Linear); + + self.images.insert(name.to_string(), image.clone()); + + image + } +} + +impl<'a> image::Renderer<&'a str> for Renderer<'_> { fn node( - &self, + &mut self, style: iced::Style, - image: &graphics::Image, + name: &&'a str, width: Option<u16>, height: Option<u16>, _source: Option<iced::Rectangle<u16>>, ) -> iced::Node { + let image = self.images.get(name, self.context); + let aspect_ratio = image.width() as f32 / image.height() as f32; let style = match (width, height) { @@ -30,15 +63,17 @@ impl image::Renderer<graphics::Image> for Renderer<'_> { fn draw( &mut self, - image: &graphics::Image, + name: &&'a str, bounds: iced::Rectangle, _source: Option<iced::Rectangle<u16>>, ) { + let image = self.images.get(name, self.context); + // We should probably use batches to draw images efficiently and keep // draw side-effect free, but this is good enough for the example. graphics::draw( self.context, - image, + &image, graphics::DrawParam::new() .dest(nalgebra::Point2::new(bounds.x, bounds.y)) .scale(nalgebra::Vector2::new( diff --git a/examples/tour/renderer/radio.rs b/examples/tour/src/iced_ggez/renderer/radio.rs index 0f7815d6..0f7815d6 100644 --- a/examples/tour/renderer/radio.rs +++ b/examples/tour/src/iced_ggez/renderer/radio.rs diff --git a/examples/tour/renderer/slider.rs b/examples/tour/src/iced_ggez/renderer/slider.rs index 146cee18..146cee18 100644 --- a/examples/tour/renderer/slider.rs +++ b/examples/tour/src/iced_ggez/renderer/slider.rs diff --git a/examples/tour/renderer/text.rs b/examples/tour/src/iced_ggez/renderer/text.rs index ecf1481e..b5010639 100644 --- a/examples/tour/renderer/text.rs +++ b/examples/tour/src/iced_ggez/renderer/text.rs @@ -1,11 +1,11 @@ -use super::Renderer; -use ggez::graphics::{self, mint, Align, Color, Scale, Text, TextFragment}; +use super::{into_color, Renderer}; +use ggez::graphics::{self, mint, Align, Scale, Text, TextFragment}; use iced::text; use std::cell::RefCell; use std::f32; -impl text::Renderer<Color> for Renderer<'_> { +impl text::Renderer<iced::Color> for Renderer<'_> { fn node( &self, style: iced::Style, @@ -80,7 +80,7 @@ impl text::Renderer<Color> for Renderer<'_> { bounds: iced::Rectangle, content: &str, size: Option<u16>, - color: Option<Color>, + color: Option<iced::Color>, horizontal_alignment: text::HorizontalAlignment, _vertical_alignment: text::VerticalAlignment, ) { @@ -112,7 +112,7 @@ impl text::Renderer<Color> for Renderer<'_> { x: bounds.x, y: bounds.y, }, - color.or(Some(graphics::BLACK)), + color.or(Some(iced::Color::BLACK)).map(into_color), ); } } diff --git a/examples/tour/widget.rs b/examples/tour/src/iced_ggez/widget.rs index 9a141c83..a365daca 100644 --- a/examples/tour/widget.rs +++ b/examples/tour/src/iced_ggez/widget.rs @@ -1,13 +1,11 @@ use super::Renderer; -use ggez::graphics::{self, Color}; - -pub use iced::{button, slider, Button, Slider}; +pub use iced::{button, slider, text, Align, Button, Color, Slider}; pub type Text = iced::Text<Color>; pub type Checkbox<Message> = iced::Checkbox<Color, Message>; pub type Radio<Message> = iced::Radio<Color, Message>; -pub type Image = iced::Image<graphics::Image>; +pub type Image<'a> = iced::Image<&'a str>; pub type Column<'a, Message> = iced::Column<'a, Message, Renderer<'a>>; pub type Row<'a, Message> = iced::Row<'a, Message, Renderer<'a>>; diff --git a/examples/tour/src/lib.rs b/examples/tour/src/lib.rs new file mode 100644 index 00000000..eb41fcd9 --- /dev/null +++ b/examples/tour/src/lib.rs @@ -0,0 +1,11 @@ +pub mod tour; + +pub use tour::{Message, Tour}; + +mod widget; + +#[cfg(target_arch = "wasm32")] +mod web; + +#[cfg(not(target_arch = "wasm32"))] +pub mod iced_ggez; diff --git a/web/examples/tour/src/tour.rs b/examples/tour/src/tour.rs index 9a60e092..4bd7c8a3 100644 --- a/web/examples/tour/src/tour.rs +++ b/examples/tour/src/tour.rs @@ -1,4 +1,4 @@ -use iced_web::{ +use crate::widget::{ button, slider, text::HorizontalAlignment, Align, Button, Checkbox, Color, Column, Element, Image, Radio, Row, Slider, Text, }; diff --git a/web/examples/tour/src/lib.rs b/examples/tour/src/web.rs index dbf04df8..a0a3060f 100644 --- a/web/examples/tour/src/lib.rs +++ b/examples/tour/src/web.rs @@ -2,9 +2,7 @@ use futures::Future; use iced_web::UserInterface; use wasm_bindgen::prelude::*; -mod tour; - -use tour::Tour; +use crate::tour::{self, Tour}; #[wasm_bindgen(start)] pub fn run() { diff --git a/examples/tour/src/widget.rs b/examples/tour/src/widget.rs new file mode 100644 index 00000000..9c2c4d5b --- /dev/null +++ b/examples/tour/src/widget.rs @@ -0,0 +1,5 @@ +#[cfg(target_arch = "wasm32")] +pub use iced_web::*; + +#[cfg(not(target_arch = "wasm32"))] +pub use crate::iced_ggez::*; |