diff options
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/renderer/widget.rs | 2 | ||||
| -rw-r--r-- | wgpu/src/renderer/widget/image_pane.rs | 36 | ||||
| -rw-r--r-- | wgpu/src/widget.rs | 8 | ||||
| -rw-r--r-- | wgpu/src/widget/image_pane.rs | 6 | 
4 files changed, 52 insertions, 0 deletions
| diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs index 37421fbe..6e1b7fe9 100644 --- a/wgpu/src/renderer/widget.rs +++ b/wgpu/src/renderer/widget.rs @@ -17,3 +17,5 @@ mod svg;  #[cfg(feature = "image")]  mod image; +#[cfg(feature = "image")] +mod image_pane; diff --git a/wgpu/src/renderer/widget/image_pane.rs b/wgpu/src/renderer/widget/image_pane.rs new file mode 100644 index 00000000..8b032250 --- /dev/null +++ b/wgpu/src/renderer/widget/image_pane.rs @@ -0,0 +1,36 @@ +use crate::{Primitive, Renderer}; +use iced_native::{image, image_pane, MouseCursor, Rectangle, Vector}; + +impl image_pane::Renderer for Renderer { +    fn draw( +        &mut self, +        state: &image_pane::State, +        bounds: Rectangle, +        image_bounds: Rectangle, +        offset: (u32, u32), +        handle: image::Handle, +        is_mouse_over: bool, +    ) -> Self::Output { +        ( +            { +                Primitive::Clip { +                    bounds, +                    offset: Vector::new(offset.0, offset.1), +                    content: Box::new(Primitive::Image { +                        handle, +                        bounds: image_bounds, +                    }), +                } +            }, +            { +                if state.is_cursor_clicked() { +                    MouseCursor::Grabbing +                } else if is_mouse_over { +                    MouseCursor::Grab +                } else { +                    MouseCursor::OutOfBounds +                } +            }, +        ) +    } +} diff --git a/wgpu/src/widget.rs b/wgpu/src/widget.rs index 32ccad17..a62a610d 100644 --- a/wgpu/src/widget.rs +++ b/wgpu/src/widget.rs @@ -47,3 +47,11 @@ pub mod canvas;  #[cfg(feature = "canvas")]  #[doc(no_inline)]  pub use canvas::Canvas; + +#[cfg(feature = "image")] +#[doc(no_inline)] +pub mod image_pane; + +#[cfg(feature = "image")] +#[doc(no_inline)] +pub use image_pane::ImagePane; diff --git a/wgpu/src/widget/image_pane.rs b/wgpu/src/widget/image_pane.rs new file mode 100644 index 00000000..aa30a8cc --- /dev/null +++ b/wgpu/src/widget/image_pane.rs @@ -0,0 +1,6 @@ +//! Zoom and pan on an image. + +pub use iced_native::image_pane::State; + +/// A widget that can display an image with the ability to zoom in/out and pan. +pub type ImagePane<'a> = iced_native::ImagePane<'a>; | 
