diff options
author | 2021-10-25 15:03:57 +0700 | |
---|---|---|
committer | 2021-10-25 15:03:57 +0700 | |
commit | 1afbc98544327b5454b862bec938dc76c4d38fa0 (patch) | |
tree | 5f48bb6379ce3db93afbb9d88284eab33ddb97af | |
parent | e7ae4422312e045a1fbbaa7655d4bf78ca6954a8 (diff) | |
download | iced-1afbc98544327b5454b862bec938dc76c4d38fa0.tar.gz iced-1afbc98544327b5454b862bec938dc76c4d38fa0.tar.bz2 iced-1afbc98544327b5454b862bec938dc76c4d38fa0.zip |
Implement `Widget::draw` for `Image`
-rw-r--r-- | graphics/src/renderer.rs | 4 | ||||
-rw-r--r-- | graphics/src/widget/image.rs | 10 | ||||
-rw-r--r-- | native/src/widget/image.rs | 5 |
3 files changed, 17 insertions, 2 deletions
diff --git a/graphics/src/renderer.rs b/graphics/src/renderer.rs index 5e74019f..d90a3f1e 100644 --- a/graphics/src/renderer.rs +++ b/graphics/src/renderer.rs @@ -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); } diff --git a/graphics/src/widget/image.rs b/graphics/src/widget/image.rs index b55ba32f..dc2d1657 100644 --- a/graphics/src/widget/image.rs +++ b/graphics/src/widget/image.rs @@ -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(), + }) + } } diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index b6b8dc1f..b61904f4 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -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> |