From a7d11944039a1b5ea5b72256e8d15367d99e6010 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 5 Oct 2019 03:56:18 +0200 Subject: Add `Renderer` and `Primitive` concepts --- native/src/widget/button.rs | 8 ++++---- native/src/widget/checkbox.rs | 8 ++++---- native/src/widget/column.rs | 34 +++++++++++++++------------------- native/src/widget/image.rs | 11 +++++------ native/src/widget/radio.rs | 8 ++++---- native/src/widget/row.rs | 30 ++++++++++++++---------------- native/src/widget/slider.rs | 6 +++--- native/src/widget/text.rs | 12 +++++------- 8 files changed, 54 insertions(+), 63 deletions(-) (limited to 'native/src/widget') diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 7b5c4a86..5ae4e045 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -7,7 +7,7 @@ //! [`Class`]: enum.Class.html use crate::input::{mouse, ButtonState}; -use crate::{Element, Event, Hasher, Layout, MouseCursor, Node, Point, Widget}; +use crate::{Element, Event, Hasher, Layout, Node, Point, Widget}; use std::hash::Hash; pub use iced_core::button::*; @@ -63,7 +63,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { + ) -> Renderer::Primitive { renderer.draw(&self, layout, cursor_position) } @@ -81,7 +81,7 @@ where /// /// [`Button`]: struct.Button.html /// [renderer]: ../../renderer/index.html -pub trait Renderer { +pub trait Renderer: crate::Renderer { /// Creates a [`Node`] for the provided [`Button`]. /// /// [`Node`]: ../../struct.Node.html @@ -96,7 +96,7 @@ pub trait Renderer { button: &Button<'_, Message>, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor; + ) -> Self::Primitive; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index 3e307f64..1954305a 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -2,7 +2,7 @@ use std::hash::Hash; use crate::input::{mouse, ButtonState}; -use crate::{Element, Event, Hasher, Layout, MouseCursor, Node, Point, Widget}; +use crate::{Element, Event, Hasher, Layout, Node, Point, Widget}; pub use iced_core::Checkbox; @@ -43,7 +43,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { + ) -> Renderer::Primitive { renderer.draw(&self, layout, cursor_position) } @@ -59,7 +59,7 @@ where /// /// [`Checkbox`]: struct.Checkbox.html /// [renderer]: ../../renderer/index.html -pub trait Renderer { +pub trait Renderer: crate::Renderer { /// Creates a [`Node`] for the provided [`Checkbox`]. /// /// [`Node`]: ../../struct.Node.html @@ -80,7 +80,7 @@ pub trait Renderer { checkbox: &Checkbox, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor; + ) -> Self::Primitive; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 9da2e161..6228d711 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -1,8 +1,6 @@ use std::hash::Hash; -use crate::{ - Element, Event, Hasher, Layout, MouseCursor, Node, Point, Style, Widget, -}; +use crate::{Element, Event, Hasher, Layout, Node, Point, Style, Widget}; /// A container that distributes its contents vertically. pub type Column<'a, Message, Renderer> = @@ -10,6 +8,8 @@ pub type Column<'a, Message, Renderer> = impl<'a, Message, Renderer> Widget for Column<'a, Message, Renderer> +where + Renderer: self::Renderer, { fn node(&self, renderer: &mut Renderer) -> Node { let mut children: Vec = self @@ -70,21 +70,8 @@ impl<'a, Message, Renderer> Widget renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { - let mut cursor = MouseCursor::OutOfBounds; - - self.children.iter().zip(layout.children()).for_each( - |(child, layout)| { - let new_cursor = - child.widget.draw(renderer, layout, cursor_position); - - if new_cursor != MouseCursor::OutOfBounds { - cursor = new_cursor; - } - }, - ); - - cursor + ) -> Renderer::Primitive { + renderer.draw(&self, layout, cursor_position) } fn hash_layout(&self, state: &mut Hasher) { @@ -104,10 +91,19 @@ impl<'a, Message, Renderer> Widget } } +pub trait Renderer: crate::Renderer + Sized { + fn draw( + &mut self, + row: &Column<'_, Message, Self>, + layout: Layout<'_>, + cursor_position: Point, + ) -> Self::Primitive; +} + impl<'a, Message, Renderer> From> for Element<'a, Message, Renderer> where - Renderer: 'a, + Renderer: 'a + self::Renderer, Message: 'static, { fn from( diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 81f99acb..5b224158 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -20,10 +20,8 @@ where renderer: &mut Renderer, layout: Layout<'_>, _cursor_position: Point, - ) -> MouseCursor { - renderer.draw(&self, layout); - - MouseCursor::OutOfBounds + ) -> Renderer::Primitive { + renderer.draw(&self, layout) } fn hash_layout(&self, state: &mut Hasher) { @@ -40,7 +38,7 @@ where /// /// [`Image`]: struct.Image.html /// [renderer]: ../../renderer/index.html -pub trait Renderer { +pub trait Renderer: crate::Renderer { /// Creates a [`Node`] for the provided [`Image`]. /// /// You should probably keep the original aspect ratio, if possible. @@ -52,7 +50,8 @@ pub trait Renderer { /// Draws an [`Image`]. /// /// [`Image`]: struct.Image.html - fn draw(&mut self, image: &Image, layout: Layout<'_>); + fn draw(&mut self, image: &Image, layout: Layout<'_>) + -> Self::Primitive; } impl<'a, I, Message, Renderer> From> for Element<'a, Message, Renderer> diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 33d42e61..1bc052aa 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -1,6 +1,6 @@ //! Create choices using radio buttons. use crate::input::{mouse, ButtonState}; -use crate::{Element, Event, Hasher, Layout, MouseCursor, Node, Point, Widget}; +use crate::{Element, Event, Hasher, Layout, Node, Point, Widget}; use std::hash::Hash; @@ -40,7 +40,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { + ) -> Renderer::Primitive { renderer.draw(&self, layout, cursor_position) } @@ -56,7 +56,7 @@ where /// /// [`Radio`]: struct.Radio.html /// [renderer]: ../../renderer/index.html -pub trait Renderer { +pub trait Renderer: crate::Renderer { /// Creates a [`Node`] for the provided [`Radio`]. /// /// [`Node`]: ../../struct.Node.html @@ -77,7 +77,7 @@ pub trait Renderer { radio: &Radio, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor; + ) -> Self::Primitive; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 3cd451b7..04fc8163 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -10,6 +10,8 @@ pub type Row<'a, Message, Renderer> = impl<'a, Message, Renderer> Widget for Row<'a, Message, Renderer> +where + Renderer: self::Renderer, { fn node(&self, renderer: &mut Renderer) -> Node { let mut children: Vec = self @@ -70,21 +72,8 @@ impl<'a, Message, Renderer> Widget renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { - let mut cursor = MouseCursor::OutOfBounds; - - self.children.iter().zip(layout.children()).for_each( - |(child, layout)| { - let new_cursor = - child.widget.draw(renderer, layout, cursor_position); - - if new_cursor != MouseCursor::OutOfBounds { - cursor = new_cursor; - } - }, - ); - - cursor + ) -> Renderer::Primitive { + renderer.draw(&self, layout, cursor_position) } fn hash_layout(&self, state: &mut Hasher) { @@ -105,10 +94,19 @@ impl<'a, Message, Renderer> Widget } } +pub trait Renderer: crate::Renderer + Sized { + fn draw( + &mut self, + row: &Row<'_, Message, Self>, + layout: Layout<'_>, + cursor_position: Point, + ) -> Self::Primitive; +} + impl<'a, Message, Renderer> From> for Element<'a, Message, Renderer> where - Renderer: 'a, + Renderer: 'a + self::Renderer, Message: 'static, { fn from(row: Row<'a, Message, Renderer>) -> Element<'a, Message, Renderer> { diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 481296bd..cd36c4b9 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -71,7 +71,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor { + ) -> Renderer::Primitive { renderer.draw(&self, layout, cursor_position) } @@ -87,7 +87,7 @@ where /// /// [`Slider`]: struct.Slider.html /// [renderer]: ../../renderer/index.html -pub trait Renderer { +pub trait Renderer: crate::Renderer { /// Creates a [`Node`] for the provided [`Radio`]. /// /// [`Node`]: ../../struct.Node.html @@ -111,7 +111,7 @@ pub trait Renderer { slider: &Slider<'_, Message>, layout: Layout<'_>, cursor_position: Point, - ) -> MouseCursor; + ) -> Self::Primitive; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index 5ca6ebf3..a032b4fc 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -1,5 +1,5 @@ //! Write some text for your users to read. -use crate::{Element, Hasher, Layout, MouseCursor, Node, Point, Widget}; +use crate::{Element, Hasher, Layout, Node, Point, Widget}; use std::hash::Hash; @@ -18,10 +18,8 @@ where renderer: &mut Renderer, layout: Layout<'_>, _cursor_position: Point, - ) -> MouseCursor { - renderer.draw(&self, layout); - - MouseCursor::OutOfBounds + ) -> Renderer::Primitive { + renderer.draw(&self, layout) } fn hash_layout(&self, state: &mut Hasher) { @@ -40,7 +38,7 @@ where /// [`Text`]: struct.Text.html /// [renderer]: ../../renderer/index.html /// [`UserInterface`]: ../../struct.UserInterface.html -pub trait Renderer { +pub trait Renderer: crate::Renderer { /// Creates a [`Node`] with the given [`Style`] for the provided [`Text`] /// contents and size. /// @@ -66,7 +64,7 @@ pub trait Renderer { /// [`Text`]: struct.Text.html /// [`HorizontalAlignment`]: enum.HorizontalAlignment.html /// [`VerticalAlignment`]: enum.VerticalAlignment.html - fn draw(&mut self, text: &Text, layout: Layout<'_>); + fn draw(&mut self, text: &Text, layout: Layout<'_>) -> Self::Primitive; } impl<'a, Message, Renderer> From for Element<'a, Message, Renderer> -- cgit From a90f7fcb987f667a80038a5e72f379abbd59d932 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 5 Oct 2019 03:58:23 +0200 Subject: Move `MouseCursor` to `iced_wgpu` --- native/src/widget/image.rs | 2 +- native/src/widget/row.rs | 4 +--- native/src/widget/slider.rs | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) (limited to 'native/src/widget') diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 5b224158..2bce36c2 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -1,6 +1,6 @@ //! Display images in your user interface. -use crate::{Element, Hasher, Layout, MouseCursor, Node, Point, Widget}; +use crate::{Element, Hasher, Layout, Node, Point, Widget}; use std::hash::Hash; diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 04fc8163..9d023210 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -1,8 +1,6 @@ use std::hash::Hash; -use crate::{ - Element, Event, Hasher, Layout, MouseCursor, Node, Point, Style, Widget, -}; +use crate::{Element, Event, Hasher, Layout, Node, Point, Style, Widget}; /// A container that distributes its contents horizontally. pub type Row<'a, Message, Renderer> = diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index cd36c4b9..77095cb7 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -7,7 +7,7 @@ use std::hash::Hash; use crate::input::{mouse, ButtonState}; -use crate::{Element, Event, Hasher, Layout, MouseCursor, Node, Point, Widget}; +use crate::{Element, Event, Hasher, Layout, Node, Point, Widget}; pub use iced_core::slider::*; -- cgit From 10e10e5e06841574425d2633f1c2916733f7b4ff Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 8 Oct 2019 03:13:41 +0200 Subject: Make `iced_core::Button` customizable Now it supports: - Any kind of content - Custom border radius - Custom background --- native/src/widget/button.rs | 26 ++++++++++++++++---------- native/src/widget/checkbox.rs | 4 ++-- native/src/widget/column.rs | 2 +- native/src/widget/image.rs | 4 ++-- native/src/widget/radio.rs | 4 ++-- native/src/widget/row.rs | 2 +- native/src/widget/slider.rs | 2 +- native/src/widget/text.rs | 2 +- 8 files changed, 26 insertions(+), 20 deletions(-) (limited to 'native/src/widget') diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 5ae4e045..1f881660 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -10,14 +10,18 @@ use crate::input::{mouse, ButtonState}; use crate::{Element, Event, Hasher, Layout, Node, Point, Widget}; use std::hash::Hash; -pub use iced_core::button::*; +pub use iced_core::button::State; -impl<'a, Message, Renderer> Widget for Button<'a, Message> +pub type Button<'a, Message, Renderer> = + iced_core::Button<'a, Message, Element<'a, Message, Renderer>>; + +impl<'a, Message, Renderer> Widget + for Button<'a, Message, Renderer> where Renderer: self::Renderer, Message: Copy + std::fmt::Debug, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } @@ -68,9 +72,9 @@ where } fn hash_layout(&self, state: &mut Hasher) { - self.label.hash(state); self.width.hash(state); self.align_self.hash(state); + self.content.hash_layout(state); } } @@ -81,31 +85,33 @@ where /// /// [`Button`]: struct.Button.html /// [renderer]: ../../renderer/index.html -pub trait Renderer: crate::Renderer { +pub trait Renderer: crate::Renderer + Sized { /// Creates a [`Node`] for the provided [`Button`]. /// /// [`Node`]: ../../struct.Node.html /// [`Button`]: struct.Button.html - fn node(&self, button: &Button<'_, Message>) -> Node; + fn node(&self, button: &Button<'_, Message, Self>) -> Node; /// Draws a [`Button`]. /// /// [`Button`]: struct.Button.html fn draw( &mut self, - button: &Button<'_, Message>, + button: &Button<'_, Message, Self>, layout: Layout<'_>, cursor_position: Point, ) -> Self::Primitive; } -impl<'a, Message, Renderer> From> +impl<'a, Message, Renderer> From> for Element<'a, Message, Renderer> where - Renderer: self::Renderer, + Renderer: 'static + self::Renderer, Message: 'static + Copy + std::fmt::Debug, { - fn from(button: Button<'a, Message>) -> Element<'a, Message, Renderer> { + fn from( + button: Button<'a, Message, Renderer>, + ) -> Element<'a, Message, Renderer> { Element::new(button) } } diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index 1954305a..c069bfdc 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -10,7 +10,7 @@ impl Widget for Checkbox where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } @@ -64,7 +64,7 @@ pub trait Renderer: crate::Renderer { /// /// [`Node`]: ../../struct.Node.html /// [`Checkbox`]: struct.Checkbox.html - fn node(&mut self, checkbox: &Checkbox) -> Node; + fn node(&self, checkbox: &Checkbox) -> Node; /// Draws a [`Checkbox`]. /// diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 6228d711..7e10e662 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -11,7 +11,7 @@ impl<'a, Message, Renderer> Widget where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { let mut children: Vec = self .children .iter() diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 2bce36c2..5197d5b1 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -11,7 +11,7 @@ where Renderer: self::Renderer, I: Clone, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } @@ -45,7 +45,7 @@ pub trait Renderer: crate::Renderer { /// /// [`Node`]: ../../struct.Node.html /// [`Image`]: struct.Image.html - fn node(&mut self, image: &Image) -> Node; + fn node(&self, image: &Image) -> Node; /// Draws an [`Image`]. /// diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 1bc052aa..22308f81 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -11,7 +11,7 @@ where Renderer: self::Renderer, Message: Copy + std::fmt::Debug, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } @@ -61,7 +61,7 @@ pub trait Renderer: crate::Renderer { /// /// [`Node`]: ../../struct.Node.html /// [`Radio`]: struct.Radio.html - fn node(&mut self, radio: &Radio) -> Node; + fn node(&self, radio: &Radio) -> Node; /// Draws a [`Radio`] button. /// diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 9d023210..b1d4a5b2 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -11,7 +11,7 @@ impl<'a, Message, Renderer> Widget where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { let mut children: Vec = self .children .iter() diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 77095cb7..643efdf4 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -15,7 +15,7 @@ impl<'a, Message, Renderer> Widget for Slider<'a, Message> where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index a032b4fc..62f2d7b7 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -9,7 +9,7 @@ impl Widget for Text where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } -- cgit From 8846a239cf14edd464b1d09f6d6d57ad9b5c9fc7 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Oct 2019 22:15:39 +0200 Subject: Rename `Renderer::Primitive` to `Renderer::Output` --- native/src/widget/button.rs | 4 ++-- native/src/widget/checkbox.rs | 4 ++-- native/src/widget/column.rs | 4 ++-- native/src/widget/image.rs | 5 ++--- native/src/widget/radio.rs | 4 ++-- native/src/widget/row.rs | 4 ++-- native/src/widget/slider.rs | 4 ++-- native/src/widget/text.rs | 4 ++-- 8 files changed, 16 insertions(+), 17 deletions(-) (limited to 'native/src/widget') diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 1f881660..4ab59f7f 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -67,7 +67,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout, cursor_position) } @@ -100,7 +100,7 @@ pub trait Renderer: crate::Renderer + Sized { button: &Button<'_, Message, Self>, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive; + ) -> Self::Output; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index c069bfdc..cb2baedd 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -43,7 +43,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout, cursor_position) } @@ -80,7 +80,7 @@ pub trait Renderer: crate::Renderer { checkbox: &Checkbox, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive; + ) -> Self::Output; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 7e10e662..7995cf5d 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -70,7 +70,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout, cursor_position) } @@ -97,7 +97,7 @@ pub trait Renderer: crate::Renderer + Sized { row: &Column<'_, Message, Self>, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive; + ) -> Self::Output; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 5197d5b1..178dd709 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -20,7 +20,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, _cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout) } @@ -50,8 +50,7 @@ pub trait Renderer: crate::Renderer { /// Draws an [`Image`]. /// /// [`Image`]: struct.Image.html - fn draw(&mut self, image: &Image, layout: Layout<'_>) - -> Self::Primitive; + fn draw(&mut self, image: &Image, layout: Layout<'_>) -> Self::Output; } impl<'a, I, Message, Renderer> From> for Element<'a, Message, Renderer> diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 22308f81..27b8f8a8 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -40,7 +40,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout, cursor_position) } @@ -77,7 +77,7 @@ pub trait Renderer: crate::Renderer { radio: &Radio, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive; + ) -> Self::Output; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index b1d4a5b2..5ec27159 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -70,7 +70,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout, cursor_position) } @@ -98,7 +98,7 @@ pub trait Renderer: crate::Renderer + Sized { row: &Row<'_, Message, Self>, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive; + ) -> Self::Output; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 643efdf4..d643d902 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -71,7 +71,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout, cursor_position) } @@ -111,7 +111,7 @@ pub trait Renderer: crate::Renderer { slider: &Slider<'_, Message>, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive; + ) -> Self::Output; } impl<'a, Message, Renderer> From> diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index 62f2d7b7..e389e1d9 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -18,7 +18,7 @@ where renderer: &mut Renderer, layout: Layout<'_>, _cursor_position: Point, - ) -> Renderer::Primitive { + ) -> Renderer::Output { renderer.draw(&self, layout) } @@ -64,7 +64,7 @@ pub trait Renderer: crate::Renderer { /// [`Text`]: struct.Text.html /// [`HorizontalAlignment`]: enum.HorizontalAlignment.html /// [`VerticalAlignment`]: enum.VerticalAlignment.html - fn draw(&mut self, text: &Text, layout: Layout<'_>) -> Self::Primitive; + fn draw(&mut self, text: &Text, layout: Layout<'_>) -> Self::Output; } impl<'a, Message, Renderer> From for Element<'a, Message, Renderer> -- cgit From ccc463a7c051b1096bc8a9f17ec64c2912a11247 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 13 Oct 2019 18:10:12 +0200 Subject: Draw checkbox in `iced_wgpu` --- native/src/widget/checkbox.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'native/src/widget') diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index cb2baedd..5393417e 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -26,9 +26,7 @@ where button: mouse::Button::Left, state: ButtonState::Pressed, }) => { - let mouse_over = layout - .children() - .any(|child| child.bounds().contains(cursor_position)); + let mouse_over = layout.bounds().contains(cursor_position); if mouse_over { messages.push((self.on_toggle)(!self.is_checked)); -- cgit From f8a232c8af4c50557fbf0c2e0b2ba46fb63f6adc Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 22 Oct 2019 23:20:24 +0200 Subject: Remove generic handle in `Image` For now, we will simply assume images will be loaded from a given path. --- native/src/widget/image.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'native/src/widget') diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 178dd709..6255a7b5 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -6,10 +6,9 @@ use std::hash::Hash; pub use iced_core::Image; -impl Widget for Image +impl Widget for Image where - Renderer: self::Renderer, - 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: 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) -> Node; + fn node(&self, image: &Image) -> Node; /// Draws an [`Image`]. /// /// [`Image`]: struct.Image.html - fn draw(&mut self, image: &Image, layout: Layout<'_>) -> Self::Output; + fn draw(&mut self, image: &Image, layout: Layout<'_>) -> Self::Output; } -impl<'a, I, Message, Renderer> From> for Element<'a, Message, Renderer> +impl<'a, Message, Renderer> From for Element<'a, Message, Renderer> where - Renderer: self::Renderer, - I: Clone + 'a, + Renderer: self::Renderer, { - fn from(image: Image) -> Element<'a, Message, Renderer> { + fn from(image: Image) -> Element<'a, Message, Renderer> { Element::new(image) } } -- cgit