summaryrefslogtreecommitdiffstats
path: root/native/src/widget/image.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2019-09-24 15:39:33 +0200
committerLibravatar GitHub <noreply@github.com>2019-09-24 15:39:33 +0200
commit68c4752e998dca1d618380ce4e7d8ac52b710056 (patch)
tree35e386030b072c189509bb2ed3adeaec5b0fd4d1 /native/src/widget/image.rs
parentbb5cac49d028eb53c259ae58e3a007ebfb736fd4 (diff)
parent05c7c39ecb8910c75b82dc4052a7720fb2d42b4a (diff)
downloadiced-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.rs66
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)
+ }
+}