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;
|
pub mod viewer;
|
||||||
|
|
||||||
use crate::backend::{self, Backend};
|
use crate::backend::{self, Backend};
|
||||||
|
use crate::{Primitive, Rectangle, Renderer};
|
||||||
|
|
||||||
use crate::{Primitive, Renderer};
|
|
||||||
use iced_native::image;
|
use iced_native::image;
|
||||||
use iced_native::Layout;
|
|
||||||
|
|
||||||
pub use iced_native::image::{Handle, Image, Viewer};
|
pub use iced_native::image::{Handle, Image, Viewer};
|
||||||
|
|
||||||
|
|
@ -17,10 +16,7 @@ where
|
||||||
self.backend().dimensions(handle)
|
self.backend().dimensions(handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(&mut self, handle: image::Handle, layout: Layout<'_>) {
|
fn draw(&mut self, handle: image::Handle, bounds: Rectangle) {
|
||||||
self.draw_primitive(Primitive::Image {
|
self.draw_primitive(Primitive::Image { handle, bounds })
|
||||||
handle,
|
|
||||||
bounds: layout.bounds(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ where
|
||||||
_cursor_position: Point,
|
_cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
) {
|
) {
|
||||||
renderer.draw(self.handle.clone(), layout);
|
renderer.draw(self.handle.clone(), layout.bounds());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hash_layout(&self, state: &mut Hasher) {
|
fn hash_layout(&self, state: &mut Hasher) {
|
||||||
|
|
@ -228,7 +228,7 @@ pub trait Renderer: crate::Renderer {
|
||||||
fn dimensions(&self, handle: &Handle) -> (u32, u32);
|
fn dimensions(&self, handle: &Handle) -> (u32, u32);
|
||||||
|
|
||||||
// Draws an [`Image`].
|
// 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>
|
impl<'a, Message, Renderer> From<Image> for Element<'a, Message, Renderer>
|
||||||
|
|
|
||||||
|
|
@ -284,9 +284,9 @@ where
|
||||||
fn draw(
|
fn draw(
|
||||||
&self,
|
&self,
|
||||||
renderer: &mut Renderer,
|
renderer: &mut Renderer,
|
||||||
style: &renderer::Style,
|
_style: &renderer::Style,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
_cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
) {
|
) {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
|
|
@ -302,7 +302,19 @@ where
|
||||||
image_top_left - self.state.offset(bounds, image_size)
|
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) {
|
fn hash_layout(&self, state: &mut Hasher) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue