From b9e0f7494881ad7cdfbcbc16878ecc6ef717753f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 20 Sep 2019 19:15:31 +0200 Subject: Create `iced_core` and `iced_native` --- native/src/widget/image.rs | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 native/src/widget/image.rs (limited to 'native/src/widget/image.rs') diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs new file mode 100644 index 00000000..17f06ebe --- /dev/null +++ b/native/src/widget/image.rs @@ -0,0 +1,67 @@ +//! Display images in your user interface. + +use crate::{ + Element, Hasher, Layout, MouseCursor, Node, Point, Rectangle, Widget, +}; + +use std::hash::Hash; + +pub use iced_core::Image; + +impl Widget for Image +where + Renderer: self::Renderer, + I: Clone, +{ + fn node(&self, renderer: &mut Renderer) -> Node { + renderer.node(&self) + } + + fn draw( + &self, + renderer: &mut Renderer, + layout: Layout<'_>, + _cursor_position: Point, + ) -> MouseCursor { + renderer.draw(&self, layout); + + MouseCursor::OutOfBounds + } + + fn hash_layout(&self, state: &mut Hasher) { + self.width.hash(state); + self.height.hash(state); + } +} + +/// The renderer of an [`Image`]. +/// +/// Your [renderer] will need to implement this trait before being able to use +/// an [`Image`] in your user interface. +/// +/// [`Image`]: struct.Image.html +/// [renderer]: ../../renderer/index.html +pub trait Renderer { + /// Creates a [`Node`] for the provided [`Image`]. + /// + /// You should probably keep the original aspect ratio, if possible. + /// + /// [`Node`]: ../../struct.Node.html + /// [`Image`]: struct.Image.html + fn node(&mut self, image: &Image) -> Node; + + /// Draws an [`Image`]. + /// + /// [`Image`]: struct.Image.html + fn draw(&mut self, image: &Image, layout: Layout<'_>); +} + +impl<'a, I, Message, Renderer> From> for Element<'a, Message, Renderer> +where + Renderer: self::Renderer, + I: Clone + 'a, +{ + fn from(image: Image) -> Element<'a, Message, Renderer> { + Element::new(image) + } +} -- cgit From eda1048dbcf5753dc6171c3ee1478ec44468d5e3 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 20 Sep 2019 19:31:49 +0200 Subject: Complete some `hash_layout` implementations --- native/src/widget/image.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'native/src/widget/image.rs') diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 17f06ebe..81f99acb 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -1,8 +1,6 @@ //! Display images in your user interface. -use crate::{ - Element, Hasher, Layout, MouseCursor, Node, Point, Rectangle, Widget, -}; +use crate::{Element, Hasher, Layout, MouseCursor, Node, Point, Widget}; use std::hash::Hash; @@ -31,6 +29,7 @@ where fn hash_layout(&self, state: &mut Hasher) { self.width.hash(state); self.height.hash(state); + self.align_self.hash(state); } } -- cgit