Implement Widget::draw for Image

This commit is contained in:
Héctor Ramón Jiménez 2021-10-25 15:03:57 +07:00
parent e7ae442231
commit 1afbc98544
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
3 changed files with 17 additions and 2 deletions

View file

@ -26,6 +26,10 @@ impl<B: Backend> Renderer<B> {
&self.backend
}
pub fn draw_primitive(&mut self, primitive: Primitive) {
self.primitives.push(primitive);
}
pub fn present(&mut self, f: impl FnOnce(&mut B, &[Primitive])) {
f(&mut self.backend, &self.primitives);
}

View file

@ -3,8 +3,9 @@ pub mod viewer;
use crate::backend::{self, Backend};
use crate::Renderer;
use crate::{Primitive, Renderer};
use iced_native::image;
use iced_native::Layout;
pub use iced_native::image::{Handle, Image, Viewer};
@ -15,4 +16,11 @@ where
fn dimensions(&self, handle: &image::Handle) -> (u32, u32) {
self.backend().dimensions(handle)
}
fn draw(&mut self, handle: image::Handle, layout: Layout<'_>) {
self.draw_primitive(Primitive::Image {
handle,
bounds: layout.bounds(),
})
}
}

View file

@ -98,7 +98,7 @@ where
_cursor_position: Point,
_viewport: &Rectangle,
) {
// TODO
renderer.draw(self.handle.clone(), layout);
}
fn hash_layout(&self, state: &mut Hasher) {
@ -226,6 +226,9 @@ impl std::fmt::Debug for Data {
pub trait Renderer: crate::Renderer {
/// Returns the dimensions of an [`Image`] located on the given path.
fn dimensions(&self, handle: &Handle) -> (u32, u32);
// Draws an [`Image`].
fn draw(&mut self, handle: Handle, layout: Layout<'_>);
}
impl<'a, Message, Renderer> From<Image> for Element<'a, Message, Renderer>