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 &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])) { pub fn present(&mut self, f: impl FnOnce(&mut B, &[Primitive])) {
f(&mut self.backend, &self.primitives); f(&mut self.backend, &self.primitives);
} }

View file

@ -3,8 +3,9 @@ pub mod viewer;
use crate::backend::{self, Backend}; use crate::backend::{self, Backend};
use crate::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};
@ -15,4 +16,11 @@ where
fn dimensions(&self, handle: &image::Handle) -> (u32, u32) { fn dimensions(&self, handle: &image::Handle) -> (u32, u32) {
self.backend().dimensions(handle) 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, _cursor_position: Point,
_viewport: &Rectangle, _viewport: &Rectangle,
) { ) {
// TODO renderer.draw(self.handle.clone(), layout);
} }
fn hash_layout(&self, state: &mut Hasher) { fn hash_layout(&self, state: &mut Hasher) {
@ -226,6 +226,9 @@ impl std::fmt::Debug for Data {
pub trait Renderer: crate::Renderer { pub trait Renderer: crate::Renderer {
/// Returns the dimensions of an [`Image`] located on the given path. /// Returns the dimensions of an [`Image`] located on the given path.
fn dimensions(&self, handle: &Handle) -> (u32, u32); 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> impl<'a, Message, Renderer> From<Image> for Element<'a, Message, Renderer>