diff options
author | 2019-10-08 03:13:41 +0200 | |
---|---|---|
committer | 2019-10-08 03:13:41 +0200 | |
commit | 10e10e5e06841574425d2633f1c2916733f7b4ff (patch) | |
tree | 0407a0136973a201fe44bfc1a94268544a2f8eb5 /native | |
parent | a0234d5bcea5b25f575af01d3a8e0296b2d0395c (diff) | |
download | iced-10e10e5e06841574425d2633f1c2916733f7b4ff.tar.gz iced-10e10e5e06841574425d2633f1c2916733f7b4ff.tar.bz2 iced-10e10e5e06841574425d2633f1c2916733f7b4ff.zip |
Make `iced_core::Button` customizable
Now it supports:
- Any kind of content
- Custom border radius
- Custom background
Diffstat (limited to 'native')
-rw-r--r-- | native/src/element.rs | 27 | ||||
-rw-r--r-- | native/src/lib.rs | 12 | ||||
-rw-r--r-- | native/src/style.rs | 4 | ||||
-rw-r--r-- | native/src/widget.rs | 2 | ||||
-rw-r--r-- | native/src/widget/button.rs | 26 | ||||
-rw-r--r-- | native/src/widget/checkbox.rs | 4 | ||||
-rw-r--r-- | native/src/widget/column.rs | 2 | ||||
-rw-r--r-- | native/src/widget/image.rs | 4 | ||||
-rw-r--r-- | native/src/widget/radio.rs | 4 | ||||
-rw-r--r-- | native/src/widget/row.rs | 2 | ||||
-rw-r--r-- | native/src/widget/slider.rs | 2 | ||||
-rw-r--r-- | native/src/widget/text.rs | 2 |
12 files changed, 51 insertions, 40 deletions
diff --git a/native/src/element.rs b/native/src/element.rs index 417e3463..cf96b7ea 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -41,6 +41,10 @@ where } } + pub fn node(&self, renderer: &Renderer) -> Node { + self.widget.node(renderer) + } + pub fn draw( &self, renderer: &mut Renderer, @@ -97,22 +101,22 @@ where /// /// ``` /// # mod counter { - /// # use iced_native::{button, Button}; + /// # use iced_native::{text, Text}; /// # /// # #[derive(Debug, Clone, Copy)] /// # pub enum Message {} - /// # pub struct Counter(button::State); + /// # pub struct Counter; /// # /// # impl Counter { - /// # pub fn view(&mut self) -> Button<Message> { - /// # Button::new(&mut self.0, "_") + /// # pub fn view(&mut self) -> Text { + /// # Text::new("") /// # } /// # } /// # } /// # /// # mod iced_wgpu { /// # use iced_native::{ - /// # button, row, Button, Node, Point, Rectangle, Style, Layout, Row + /// # text, row, Text, Node, Point, Rectangle, Style, Layout, Row /// # }; /// # pub struct Renderer; /// # @@ -127,16 +131,15 @@ where /// # ) {} /// # } /// # - /// # impl button::Renderer for Renderer { - /// # fn node<Message>(&self, _button: &Button<'_, Message>) -> Node { + /// # impl text::Renderer for Renderer { + /// # fn node(&self, _text: &Text) -> Node { /// # Node::new(Style::default()) /// # } /// # - /// # fn draw<Message>( + /// # fn draw( /// # &mut self, - /// # _button: &Button<'_, Message>, + /// # _text: &Text, /// # _layout: Layout<'_>, - /// # _cursor_position: Point, /// # ) {} /// # } /// # } @@ -289,7 +292,7 @@ where A: Copy, Renderer: crate::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { self.widget.node(renderer) } @@ -359,7 +362,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> where Renderer: crate::Renderer + renderer::Debugger, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { self.element.widget.node(renderer) } diff --git a/native/src/lib.rs b/native/src/lib.rs index 6067f49d..18ce3a37 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -89,14 +89,14 @@ //! # impl button::Renderer for Renderer { //! # fn node<Message>( //! # &self, -//! # _button: &Button<'_, Message> +//! # _button: &Button<'_, Message, Self> //! # ) -> Node { //! # Node::new(Style::default()) //! # } //! # //! # fn draw<Message>( //! # &mut self, -//! # _button: &Button<'_, Message>, +//! # _button: &Button<'_, Message, Self>, //! # _layout: Layout<'_>, //! # _cursor_position: Point, //! # ) {} @@ -125,7 +125,7 @@ //! .push( //! // The increment button. We tell it to produce an //! // `IncrementPressed` message when pressed -//! Button::new(&mut self.increment_button, "+") +//! Button::new(&mut self.increment_button, Text::new("+")) //! .on_press(Message::IncrementPressed), //! ) //! .push( @@ -135,7 +135,7 @@ //! .push( //! // The decrement button. We tell it to produce a //! // `DecrementPressed` message when pressed -//! Button::new(&mut self.decrement_button, "-") +//! Button::new(&mut self.decrement_button, Text::new("-")) //! .on_press(Message::DecrementPressed), //! ) //! } @@ -212,7 +212,9 @@ mod user_interface; pub(crate) use iced_core::Vector; -pub use iced_core::{Align, Color, Justify, Length, Point, Rectangle}; +pub use iced_core::{ + Align, Background, Color, Justify, Length, Point, Rectangle, +}; #[doc(no_inline)] pub use stretch::{geometry::Size, number::Number}; diff --git a/native/src/style.rs b/native/src/style.rs index b1c49fd4..70a7ff74 100644 --- a/native/src/style.rs +++ b/native/src/style.rs @@ -74,12 +74,12 @@ impl Style { self } - pub(crate) fn align_items(mut self, align: Align) -> Self { + pub fn align_items(mut self, align: Align) -> Self { self.0.align_items = into_align_items(align); self } - pub(crate) fn justify_content(mut self, justify: Justify) -> Self { + pub fn justify_content(mut self, justify: Justify) -> Self { self.0.justify_content = into_justify_content(justify); self } diff --git a/native/src/widget.rs b/native/src/widget.rs index eff098a6..b7181c1b 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -67,7 +67,7 @@ where /// [`Node`]: ../struct.Node.html /// [`Widget`]: trait.Widget.html /// [`Layout`]: ../struct.Layout.html - fn node(&self, renderer: &mut Renderer) -> Node; + fn node(&self, renderer: &Renderer) -> Node; /// Draws the [`Widget`] using the associated `Renderer`. /// 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<Message, Renderer> for Button<'a, Message> +pub type Button<'a, Message, Renderer> = + iced_core::Button<'a, Message, Element<'a, Message, Renderer>>; + +impl<'a, Message, Renderer> Widget<Message, Renderer> + 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<Message>(&self, button: &Button<'_, Message>) -> Node; + fn node<Message>(&self, button: &Button<'_, Message, Self>) -> Node; /// Draws a [`Button`]. /// /// [`Button`]: struct.Button.html fn draw<Message>( &mut self, - button: &Button<'_, Message>, + button: &Button<'_, Message, Self>, layout: Layout<'_>, cursor_position: Point, ) -> Self::Primitive; } -impl<'a, Message, Renderer> From<Button<'a, Message>> +impl<'a, Message, Renderer> From<Button<'a, Message, Renderer>> 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<Message, Renderer> Widget<Message, Renderer> for Checkbox<Message> 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<Message>(&mut self, checkbox: &Checkbox<Message>) -> Node; + fn node<Message>(&self, checkbox: &Checkbox<Message>) -> 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<Message, Renderer> where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { let mut children: Vec<Node> = 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>, 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<I>: crate::Renderer { /// /// [`Node`]: ../../struct.Node.html /// [`Image`]: struct.Image.html - fn node(&mut self, image: &Image<I>) -> Node; + fn node(&self, image: &Image<I>) -> 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<Message>(&mut self, radio: &Radio<Message>) -> Node; + fn node<Message>(&self, radio: &Radio<Message>) -> 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<Message, Renderer> where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { let mut children: Vec<Node> = 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<Message, Renderer> 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<Message, Renderer> Widget<Message, Renderer> for Text where Renderer: self::Renderer, { - fn node(&self, renderer: &mut Renderer) -> Node { + fn node(&self, renderer: &Renderer) -> Node { renderer.node(&self) } |