diff options
Diffstat (limited to 'native/src/widget')
| -rw-r--r-- | native/src/widget/button.rs | 8 | ||||
| -rw-r--r-- | native/src/widget/checkbox.rs | 8 | ||||
| -rw-r--r-- | native/src/widget/column.rs | 34 | ||||
| -rw-r--r-- | native/src/widget/image.rs | 13 | ||||
| -rw-r--r-- | native/src/widget/radio.rs | 8 | ||||
| -rw-r--r-- | native/src/widget/row.rs | 34 | ||||
| -rw-r--r-- | native/src/widget/slider.rs | 8 | ||||
| -rw-r--r-- | native/src/widget/text.rs | 12 | 
8 files changed, 57 insertions, 68 deletions
| 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<Button<'a, Message>> 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<Message>,          layout: Layout<'_>,          cursor_position: Point, -    ) -> MouseCursor; +    ) -> Self::Primitive;  }  impl<'a, Message, Renderer> From<Checkbox<Message>> 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<Message, Renderer>      for Column<'a, Message, Renderer> +where +    Renderer: self::Renderer,  {      fn node(&self, renderer: &mut Renderer) -> Node {          let mut children: Vec<Node> = self @@ -70,21 +70,8 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>          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<Message, Renderer>      }  } +pub trait Renderer: crate::Renderer + Sized { +    fn draw<Message>( +        &mut self, +        row: &Column<'_, Message, Self>, +        layout: Layout<'_>, +        cursor_position: Point, +    ) -> Self::Primitive; +} +  impl<'a, Message, Renderer> From<Column<'a, Message, Renderer>>      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..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; @@ -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<I> { +pub trait Renderer<I>: 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<I> {      /// Draws an [`Image`].      ///      /// [`Image`]: struct.Image.html -    fn draw(&mut self, image: &Image<I>, layout: Layout<'_>); +    fn draw(&mut self, image: &Image<I>, layout: Layout<'_>) +        -> Self::Primitive;  }  impl<'a, I, Message, Renderer> From<Image<I>> 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<Message>,          layout: Layout<'_>,          cursor_position: Point, -    ) -> MouseCursor; +    ) -> Self::Primitive;  }  impl<'a, Message, Renderer> From<Radio<Message>> diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 3cd451b7..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> = @@ -10,6 +8,8 @@ pub type Row<'a, Message, Renderer> =  impl<'a, Message, Renderer> Widget<Message, Renderer>      for Row<'a, Message, Renderer> +where +    Renderer: self::Renderer,  {      fn node(&self, renderer: &mut Renderer) -> Node {          let mut children: Vec<Node> = self @@ -70,21 +70,8 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>          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 +92,19 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>      }  } +pub trait Renderer: crate::Renderer + Sized { +    fn draw<Message>( +        &mut self, +        row: &Row<'_, Message, Self>, +        layout: Layout<'_>, +        cursor_position: Point, +    ) -> Self::Primitive; +} +  impl<'a, Message, Renderer> From<Row<'a, Message, Renderer>>      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..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::*; @@ -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<Slider<'a, Message>> 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<Text> for Element<'a, Message, Renderer> | 
