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

View file

@ -6,10 +6,9 @@ use std::hash::Hash;
pub use iced_core::Image;
impl<I, Message, Renderer> Widget<Message, Renderer> for Image<I>
impl<Message, Renderer> Widget<Message, Renderer> for Image
where
Renderer: self::Renderer<I>,
I: Clone,
Renderer: self::Renderer,
{
fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self)
@ -38,27 +37,26 @@ where
///
/// [`Image`]: struct.Image.html
/// [renderer]: ../../renderer/index.html
pub trait Renderer<I>: crate::Renderer {
pub trait Renderer: crate::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(&self, image: &Image<I>) -> Node;
fn node(&self, image: &Image) -> Node;
/// Draws an [`Image`].
///
/// [`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
Renderer: self::Renderer<I>,
I: Clone + 'a,
Renderer: self::Renderer,
{
fn from(image: Image<I>) -> Element<'a, Message, Renderer> {
fn from(image: Image) -> Element<'a, Message, Renderer> {
Element::new(image)
}
}

View file

@ -2,9 +2,9 @@ use crate::{Bus, Element, Length, Widget};
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>(
&self,
bump: &'b bumpalo::Bump,
@ -12,7 +12,7 @@ impl<'a, Message> Widget<Message> for Image<'a> {
) -> dodrio::Node<'b> {
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());
@ -35,8 +35,8 @@ impl<'a, Message> Widget<Message> for Image<'a> {
}
}
impl<'a, Message> From<Image<'a>> for Element<'a, Message> {
fn from(image: Image<'a>) -> Element<'a, Message> {
impl<'a, Message> From<Image> for Element<'a, Message> {
fn from(image: Image) -> Element<'a, Message> {
Element::new(image)
}
}

View file

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