diff options
author | 2019-09-24 15:39:33 +0200 | |
---|---|---|
committer | 2019-09-24 15:39:33 +0200 | |
commit | 68c4752e998dca1d618380ce4e7d8ac52b710056 (patch) | |
tree | 35e386030b072c189509bb2ed3adeaec5b0fd4d1 /native/src/widget/image.rs | |
parent | bb5cac49d028eb53c259ae58e3a007ebfb736fd4 (diff) | |
parent | 05c7c39ecb8910c75b82dc4052a7720fb2d42b4a (diff) | |
download | iced-68c4752e998dca1d618380ce4e7d8ac52b710056.tar.gz iced-68c4752e998dca1d618380ce4e7d8ac52b710056.tar.bz2 iced-68c4752e998dca1d618380ce4e7d8ac52b710056.zip |
Merge pull request #17 from hecrj/web
Basic web support (core, native, and web crates)
Diffstat (limited to 'native/src/widget/image.rs')
-rw-r--r-- | native/src/widget/image.rs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs new file mode 100644 index 00000000..81f99acb --- /dev/null +++ b/native/src/widget/image.rs @@ -0,0 +1,66 @@ +//! Display images in your user interface. + +use crate::{Element, Hasher, Layout, MouseCursor, Node, Point, Widget}; + +use std::hash::Hash; + +pub use iced_core::Image; + +impl<I, Message, Renderer> Widget<Message, Renderer> for Image<I> +where + Renderer: self::Renderer<I>, + 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); + self.align_self.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<I> { + /// 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<I>) -> Node; + + /// Draws an [`Image`]. + /// + /// [`Image`]: struct.Image.html + fn draw(&mut self, image: &Image<I>, layout: Layout<'_>); +} + +impl<'a, I, Message, Renderer> From<Image<I>> for Element<'a, Message, Renderer> +where + Renderer: self::Renderer<I>, + I: Clone + 'a, +{ + fn from(image: Image<I>) -> Element<'a, Message, Renderer> { + Element::new(image) + } +} |