diff options
author | 2019-09-05 07:23:03 +0200 | |
---|---|---|
committer | 2019-09-05 07:23:03 +0200 | |
commit | ced3ffc22570048711fefba638782a31d0e06035 (patch) | |
tree | c3c3f29be40ec348f15205a3dd920088edb52ace /examples/tour/renderer/image.rs | |
parent | 3440ba3cb44bfc9a2b67708b683958a97d8c5e23 (diff) | |
download | iced-ced3ffc22570048711fefba638782a31d0e06035.tar.gz iced-ced3ffc22570048711fefba638782a31d0e06035.tar.bz2 iced-ced3ffc22570048711fefba638782a31d0e06035.zip |
Move `ggez` example to `tour`
Diffstat (limited to 'examples/tour/renderer/image.rs')
-rw-r--r-- | examples/tour/renderer/image.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/tour/renderer/image.rs b/examples/tour/renderer/image.rs new file mode 100644 index 00000000..c3ead5c9 --- /dev/null +++ b/examples/tour/renderer/image.rs @@ -0,0 +1,51 @@ +use super::Renderer; + +use ggez::{graphics, nalgebra}; +use iced::image; + +impl image::Renderer<graphics::Image> for Renderer<'_> { + fn node( + &self, + style: iced::Style, + image: &graphics::Image, + width: Option<u16>, + height: Option<u16>, + _source: Option<iced::Rectangle<u16>>, + ) -> iced::Node { + let aspect_ratio = image.width() as f32 / image.height() as f32; + + let style = match (width, height) { + (Some(width), Some(height)) => style.width(width).height(height), + (Some(width), None) => style + .width(width) + .height((width as f32 / aspect_ratio).round() as u16), + (None, Some(height)) => style + .height(height) + .width((height as f32 * aspect_ratio).round() as u16), + (None, None) => style.width(image.width()).height(image.height()), + }; + + iced::Node::new(style) + } + + fn draw( + &mut self, + image: &graphics::Image, + bounds: iced::Rectangle, + _source: Option<iced::Rectangle<u16>>, + ) { + // 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, + graphics::DrawParam::new() + .dest(nalgebra::Point2::new(bounds.x, bounds.y)) + .scale(nalgebra::Vector2::new( + bounds.width / image.width() as f32, + bounds.height / image.height() as f32, + )), + ) + .expect("Draw image"); + } +} |