Remove generic handle in Image

For now, we will simply assume images will be loaded from a given path.
This commit is contained in:
Héctor Ramón Jiménez 2019-10-22 23:20:24 +02:00
parent 523736f08b
commit f8a232c8af
4 changed files with 25 additions and 41 deletions

View file

@ -9,12 +9,12 @@ use crate::{Align, Length, Rectangle};
/// ``` /// ```
/// use iced_core::Image; /// use iced_core::Image;
/// ///
/// # let my_handle = String::from("some_handle"); /// let image = Image::new("resources/ferris.png");
/// let image = Image::new(my_handle);
/// ``` /// ```
pub struct Image<I> { #[derive(Debug)]
/// The image handle pub struct Image {
pub handle: I, /// The image path
pub path: String,
/// The part of the image to show /// The part of the image to show
pub clip: Option<Rectangle<u16>>, pub clip: Option<Rectangle<u16>>,
@ -28,23 +28,13 @@ pub struct Image<I> {
pub align_self: Option<Align>, pub align_self: Option<Align>,
} }
impl<I> std::fmt::Debug for Image<I> { impl Image {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { /// Creates a new [`Image`] with the given path.
f.debug_struct("Image")
.field("clip", &self.clip)
.field("width", &self.width)
.field("height", &self.height)
.finish()
}
}
impl<I> Image<I> {
/// Creates a new [`Image`] with given image handle.
/// ///
/// [`Image`]: struct.Image.html /// [`Image`]: struct.Image.html
pub fn new(handle: I) -> Self { pub fn new<T: Into<String>>(path: T) -> Self {
Image { Image {
handle, path: path.into(),
clip: None, clip: None,
width: Length::Shrink, width: Length::Shrink,
height: Length::Shrink, height: Length::Shrink,

View file

@ -6,10 +6,9 @@ use std::hash::Hash;
pub use iced_core::Image; pub use iced_core::Image;
impl<I, Message, Renderer> Widget<Message, Renderer> for Image<I> impl<Message, Renderer> Widget<Message, Renderer> for Image
where where
Renderer: self::Renderer<I>, Renderer: self::Renderer,
I: Clone,
{ {
fn node(&self, renderer: &Renderer) -> Node { fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self) renderer.node(&self)
@ -38,27 +37,26 @@ where
/// ///
/// [`Image`]: struct.Image.html /// [`Image`]: struct.Image.html
/// [renderer]: ../../renderer/index.html /// [renderer]: ../../renderer/index.html
pub trait Renderer<I>: crate::Renderer { pub trait Renderer: crate::Renderer {
/// Creates a [`Node`] for the provided [`Image`]. /// Creates a [`Node`] for the provided [`Image`].
/// ///
/// You should probably keep the original aspect ratio, if possible. /// You should probably keep the original aspect ratio, if possible.
/// ///
/// [`Node`]: ../../struct.Node.html /// [`Node`]: ../../struct.Node.html
/// [`Image`]: struct.Image.html /// [`Image`]: struct.Image.html
fn node(&self, image: &Image<I>) -> Node; fn node(&self, image: &Image) -> Node;
/// Draws an [`Image`]. /// Draws an [`Image`].
/// ///
/// [`Image`]: struct.Image.html /// [`Image`]: struct.Image.html
fn draw(&mut self, image: &Image<I>, layout: Layout<'_>) -> Self::Output; fn draw(&mut self, image: &Image, layout: Layout<'_>) -> Self::Output;
} }
impl<'a, I, Message, Renderer> From<Image<I>> for Element<'a, Message, Renderer> impl<'a, Message, Renderer> From<Image> for Element<'a, Message, Renderer>
where where
Renderer: self::Renderer<I>, Renderer: self::Renderer,
I: Clone + 'a,
{ {
fn from(image: Image<I>) -> Element<'a, Message, Renderer> { fn from(image: Image) -> Element<'a, Message, Renderer> {
Element::new(image) Element::new(image)
} }
} }

View file

@ -2,9 +2,9 @@ use crate::{Bus, Element, Length, Widget};
use dodrio::bumpalo; use dodrio::bumpalo;
pub type Image<'a> = iced_core::Image<&'a str>; pub use iced_core::Image;
impl<'a, Message> Widget<Message> for Image<'a> { impl<Message> Widget<Message> for Image {
fn node<'b>( fn node<'b>(
&self, &self,
bump: &'b bumpalo::Bump, bump: &'b bumpalo::Bump,
@ -12,7 +12,7 @@ impl<'a, Message> Widget<Message> for Image<'a> {
) -> dodrio::Node<'b> { ) -> dodrio::Node<'b> {
use dodrio::builder::*; use dodrio::builder::*;
let src = bumpalo::format!(in bump, "{}", self.handle); let src = bumpalo::format!(in bump, "{}", self.path);
let mut image = img(bump).attr("src", src.into_bump_str()); let mut image = img(bump).attr("src", src.into_bump_str());
@ -35,8 +35,8 @@ impl<'a, Message> Widget<Message> for Image<'a> {
} }
} }
impl<'a, Message> From<Image<'a>> for Element<'a, Message> { impl<'a, Message> From<Image> for Element<'a, Message> {
fn from(image: Image<'a>) -> Element<'a, Message> { fn from(image: Image) -> Element<'a, Message> {
Element::new(image) Element::new(image)
} }
} }

View file

@ -1,16 +1,12 @@
use crate::{Primitive, Renderer}; use crate::{Primitive, Renderer};
use iced_native::{image, Image, Layout, MouseCursor, Node, Style}; use iced_native::{image, Image, Layout, MouseCursor, Node, Style};
impl image::Renderer<&str> for Renderer { impl image::Renderer for Renderer {
fn node(&self, _image: &Image<&str>) -> Node { fn node(&self, _image: &Image) -> Node {
Node::new(Style::default()) Node::new(Style::default())
} }
fn draw( fn draw(&mut self, _image: &Image, _layout: Layout<'_>) -> Self::Output {
&mut self,
_image: &Image<&str>,
_layout: Layout<'_>,
) -> Self::Output {
(Primitive::None, MouseCursor::OutOfBounds) (Primitive::None, MouseCursor::OutOfBounds)
} }
} }