diff options
author | 2020-12-18 10:15:30 +0100 | |
---|---|---|
committer | 2020-12-18 10:15:30 +0100 | |
commit | 0b73e5fbfa509ff29a14905ec8e0217a2cf3d0ee (patch) | |
tree | 848d2f61f0c1ab1d7032ed74469f123311eccef6 /graphics | |
parent | 07b570036aad3f42578876e1a299a0577e6761ae (diff) | |
parent | c7bb43411381a1bffe70ea8e684cd9e4a27739e0 (diff) | |
download | iced-0b73e5fbfa509ff29a14905ec8e0217a2cf3d0ee.tar.gz iced-0b73e5fbfa509ff29a14905ec8e0217a2cf3d0ee.tar.bz2 iced-0b73e5fbfa509ff29a14905ec8e0217a2cf3d0ee.zip |
Merge remote-tracking branch 'tarkah/image-pane' into image-pane
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/src/widget/image.rs | 5 | ||||
-rw-r--r-- | graphics/src/widget/image/viewer.rs | 51 |
2 files changed, 55 insertions, 1 deletions
diff --git a/graphics/src/widget/image.rs b/graphics/src/widget/image.rs index 30f446e8..bdf03de3 100644 --- a/graphics/src/widget/image.rs +++ b/graphics/src/widget/image.rs @@ -1,11 +1,14 @@ //! Display images in your user interface. +pub mod viewer; + use crate::backend::{self, Backend}; + use crate::{Primitive, Renderer}; use iced_native::image; use iced_native::mouse; use iced_native::Layout; -pub use iced_native::image::{Handle, Image}; +pub use iced_native::image::{Handle, Image, Viewer}; impl<B> image::Renderer for Renderer<B> where diff --git a/graphics/src/widget/image/viewer.rs b/graphics/src/widget/image/viewer.rs new file mode 100644 index 00000000..b6217ff7 --- /dev/null +++ b/graphics/src/widget/image/viewer.rs @@ -0,0 +1,51 @@ +//! Zoom and pan on an image. +use crate::backend::{self, Backend}; +use crate::{Primitive, Renderer}; + +use iced_native::{ + image::{self, viewer}, + mouse, Rectangle, Vector, +}; + +impl<B> viewer::Renderer for Renderer<B> +where + B: Backend + backend::Image, +{ + fn draw( + &mut self, + state: &viewer::State, + bounds: Rectangle, + image_bounds: Rectangle, + translation: Vector, + handle: image::Handle, + is_mouse_over: bool, + ) -> Self::Output { + ( + { + Primitive::Clip { + bounds, + content: Box::new(Primitive::Translate { + translation, + content: Box::new(Primitive::Image { + handle, + bounds: image_bounds, + }), + }), + offset: Vector::new(0, 0), + } + }, + { + if state.is_cursor_clicked() { + mouse::Interaction::Grabbing + } else if is_mouse_over + && (image_bounds.width > bounds.width + || image_bounds.height > bounds.height) + { + mouse::Interaction::Grab + } else { + mouse::Interaction::Idle + } + }, + ) + } +} |