Implement Widget::draw for image::Viewer
This commit is contained in:
parent
1ec667920a
commit
8b15874218
3 changed files with 20 additions and 12 deletions
|
|
@ -2,10 +2,9 @@
|
|||
pub mod viewer;
|
||||
|
||||
use crate::backend::{self, Backend};
|
||||
use crate::{Primitive, Rectangle, Renderer};
|
||||
|
||||
use crate::{Primitive, Renderer};
|
||||
use iced_native::image;
|
||||
use iced_native::Layout;
|
||||
|
||||
pub use iced_native::image::{Handle, Image, Viewer};
|
||||
|
||||
|
|
@ -17,10 +16,7 @@ where
|
|||
self.backend().dimensions(handle)
|
||||
}
|
||||
|
||||
fn draw(&mut self, handle: image::Handle, layout: Layout<'_>) {
|
||||
self.draw_primitive(Primitive::Image {
|
||||
handle,
|
||||
bounds: layout.bounds(),
|
||||
})
|
||||
fn draw(&mut self, handle: image::Handle, bounds: Rectangle) {
|
||||
self.draw_primitive(Primitive::Image { handle, bounds })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ where
|
|||
_cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
renderer.draw(self.handle.clone(), layout);
|
||||
renderer.draw(self.handle.clone(), layout.bounds());
|
||||
}
|
||||
|
||||
fn hash_layout(&self, state: &mut Hasher) {
|
||||
|
|
@ -228,7 +228,7 @@ pub trait Renderer: crate::Renderer {
|
|||
fn dimensions(&self, handle: &Handle) -> (u32, u32);
|
||||
|
||||
// Draws an [`Image`].
|
||||
fn draw(&mut self, handle: Handle, layout: Layout<'_>);
|
||||
fn draw(&mut self, handle: Handle, bounds: Rectangle);
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> From<Image> for Element<'a, Message, Renderer>
|
||||
|
|
|
|||
|
|
@ -284,9 +284,9 @@ where
|
|||
fn draw(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
style: &renderer::Style,
|
||||
_style: &renderer::Style,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
_cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
let bounds = layout.bounds();
|
||||
|
|
@ -302,7 +302,19 @@ where
|
|||
image_top_left - self.state.offset(bounds, image_size)
|
||||
};
|
||||
|
||||
let is_mouse_over = bounds.contains(cursor_position);
|
||||
renderer.with_layer(bounds, |renderer| {
|
||||
renderer.with_translation(translation, |renderer| {
|
||||
image::Renderer::draw(
|
||||
renderer,
|
||||
self.handle.clone(),
|
||||
Rectangle {
|
||||
x: bounds.x,
|
||||
y: bounds.y,
|
||||
..Rectangle::with_size(image_size)
|
||||
},
|
||||
)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
fn hash_layout(&self, state: &mut Hasher) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue