Add ImagePane widget

This commit is contained in:
Cory Forsstrom 2020-04-23 15:34:55 -07:00
parent 5324eb1024
commit 0d8cefbf2d
No known key found for this signature in database
GPG key ID: 64D6B5851FFCAC9E
7 changed files with 470 additions and 2 deletions

View file

@ -17,3 +17,5 @@ mod svg;
#[cfg(feature = "image")]
mod image;
#[cfg(feature = "image")]
mod image_pane;

View file

@ -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
}
},
)
}
}

View file

@ -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;

View file

@ -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>;