Implement Widget::draw for image::Viewer

This commit is contained in:
Héctor Ramón Jiménez 2021-10-28 17:01:23 +07:00
parent 1ec667920a
commit 8b15874218
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
3 changed files with 20 additions and 12 deletions

View file

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

View file

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

View file

@ -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) {