diff options
-rw-r--r-- | examples/styling/src/main.rs | 6 | ||||
-rw-r--r-- | glow/src/widget/checkbox.rs | 2 | ||||
-rw-r--r-- | graphics/src/widget/checkbox.rs | 17 | ||||
-rw-r--r-- | native/src/renderer/null.rs | 9 | ||||
-rw-r--r-- | native/src/widget/checkbox.rs | 55 | ||||
-rw-r--r-- | style/src/checkbox.rs | 13 | ||||
-rw-r--r-- | web/src/widget/checkbox.rs | 18 | ||||
-rw-r--r-- | wgpu/src/widget/checkbox.rs | 2 |
8 files changed, 40 insertions, 82 deletions
diff --git a/examples/styling/src/main.rs b/examples/styling/src/main.rs index 7e9b01ab..5ce54e23 100644 --- a/examples/styling/src/main.rs +++ b/examples/styling/src/main.rs @@ -108,7 +108,7 @@ impl Sandbox for Styling { "Check me!", Message::CheckboxToggled, ) - .style(self.theme); + .style(self.theme.into()); let toggler = Toggler::new( self.toggler_value, @@ -239,11 +239,11 @@ mod style { } } - impl From<Theme> for Box<dyn checkbox::StyleSheet> { + impl From<Theme> for &'static dyn checkbox::StyleSheet { fn from(theme: Theme) -> Self { match theme { Theme::Light => Default::default(), - Theme::Dark => dark::Checkbox.into(), + Theme::Dark => &dark::Checkbox, } } } diff --git a/glow/src/widget/checkbox.rs b/glow/src/widget/checkbox.rs index d27d77cc..9fd003d4 100644 --- a/glow/src/widget/checkbox.rs +++ b/glow/src/widget/checkbox.rs @@ -6,4 +6,4 @@ pub use iced_graphics::checkbox::{Style, StyleSheet}; /// A box that can be checked. /// /// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`. -pub type Checkbox<Message> = iced_native::Checkbox<Message, Renderer>; +pub type Checkbox<'a, Message> = iced_native::Checkbox<'a, Message, Renderer>; diff --git a/graphics/src/widget/checkbox.rs b/graphics/src/widget/checkbox.rs index 3b756525..a458d85c 100644 --- a/graphics/src/widget/checkbox.rs +++ b/graphics/src/widget/checkbox.rs @@ -1,23 +1,10 @@ //! Show toggle controls using checkboxes. -use crate::backend::{self, Backend}; use crate::Renderer; -use iced_native::checkbox; - pub use iced_style::checkbox::{Style, StyleSheet}; /// A box that can be checked. /// /// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`. -pub type Checkbox<Message, Backend> = - iced_native::Checkbox<Message, Renderer<Backend>>; - -impl<B> checkbox::Renderer for Renderer<B> -where - B: Backend + backend::Text, -{ - type Style = Box<dyn StyleSheet>; - - const DEFAULT_SIZE: u16 = 20; - const DEFAULT_SPACING: u16 = 15; -} +pub type Checkbox<'a, Message, Backend> = + iced_native::Checkbox<'a, Message, Renderer<Backend>>; diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs index 40fd5995..010305a2 100644 --- a/native/src/renderer/null.rs +++ b/native/src/renderer/null.rs @@ -1,7 +1,5 @@ -use crate::checkbox; use crate::pane_grid; use crate::progress_bar; -use crate::radio; use crate::renderer::{self, Renderer}; use crate::text; use crate::toggler; @@ -66,13 +64,6 @@ impl renderer::Text for Null { fn fill_text(&mut self, _text: renderer::text::Section<'_, Self::Font>) {} } -impl checkbox::Renderer for Null { - type Style = (); - - const DEFAULT_SIZE: u16 = 20; - const DEFAULT_SPACING: u16 = 15; -} - impl progress_bar::Renderer for Null { type Style = (); diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index c307d776..c1408d73 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -11,6 +11,8 @@ use crate::{ Rectangle, Row, Text, Widget, }; +pub use iced_style::checkbox::{Style, StyleSheet}; + /// A box that can be checked. /// /// # Example @@ -29,7 +31,7 @@ use crate::{ /// ///  #[allow(missing_debug_implementations)] -pub struct Checkbox<Message, Renderer: self::Renderer + renderer::Text> { +pub struct Checkbox<'a, Message, Renderer: renderer::Text> { is_checked: bool, on_toggle: Box<dyn Fn(bool) -> Message>, label: String, @@ -39,12 +41,16 @@ pub struct Checkbox<Message, Renderer: self::Renderer + renderer::Text> { text_size: Option<u16>, font: Renderer::Font, text_color: Option<Color>, - style: Renderer::Style, + style_sheet: &'a dyn StyleSheet, } -impl<Message, Renderer: self::Renderer + renderer::Text> - Checkbox<Message, Renderer> -{ +impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> { + /// The default size of a [`Checkbox`]. + const DEFAULT_SIZE: u16 = 20; + + /// The default spacing of a [`Checkbox`]. + const DEFAULT_SPACING: u16 = 15; + /// Creates a new [`Checkbox`]. /// /// It expects: @@ -62,12 +68,12 @@ impl<Message, Renderer: self::Renderer + renderer::Text> on_toggle: Box::new(f), label: label.into(), width: Length::Shrink, - size: <Renderer as self::Renderer>::DEFAULT_SIZE, - spacing: Renderer::DEFAULT_SPACING, + size: Self::DEFAULT_SIZE, + spacing: Self::DEFAULT_SPACING, text_size: None, font: Renderer::Font::default(), text_color: None, - style: Renderer::Style::default(), + style_sheet: Default::default(), } } @@ -110,16 +116,16 @@ impl<Message, Renderer: self::Renderer + renderer::Text> } /// Sets the style of the [`Checkbox`]. - pub fn style(mut self, style: impl Into<Renderer::Style>) -> Self { - self.style = style.into(); + pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self { + self.style_sheet = style_sheet; self } } -impl<Message, Renderer> Widget<Message, Renderer> - for Checkbox<Message, Renderer> +impl<'a, Message, Renderer> Widget<Message, Renderer> + for Checkbox<'a, Message, Renderer> where - Renderer: self::Renderer + renderer::Text, + Renderer: renderer::Text, { fn width(&self) -> Length { self.width @@ -218,31 +224,14 @@ where } } -/// The renderer of a [`Checkbox`]. -/// -/// Your [renderer] will need to implement this trait before being -/// able to use a [`Checkbox`] in your user interface. -/// -/// [renderer]: crate::Renderer -pub trait Renderer: crate::Renderer { - /// The style supported by this renderer. - type Style: Default; - - /// The default size of a [`Checkbox`]. - const DEFAULT_SIZE: u16; - - /// The default spacing of a [`Checkbox`]. - const DEFAULT_SPACING: u16; -} - -impl<'a, Message, Renderer> From<Checkbox<Message, Renderer>> +impl<'a, Message, Renderer> From<Checkbox<'a, Message, Renderer>> for Element<'a, Message, Renderer> where - Renderer: 'a + self::Renderer + renderer::Text, + Renderer: 'a + renderer::Text, Message: 'a, { fn from( - checkbox: Checkbox<Message, Renderer>, + checkbox: Checkbox<'a, Message, Renderer>, ) -> Element<'a, Message, Renderer> { Element::new(checkbox) } diff --git a/style/src/checkbox.rs b/style/src/checkbox.rs index 566136bb..4c88faaa 100644 --- a/style/src/checkbox.rs +++ b/style/src/checkbox.rs @@ -39,17 +39,8 @@ impl StyleSheet for Default { } } -impl std::default::Default for Box<dyn StyleSheet> { +impl std::default::Default for &'static dyn StyleSheet { fn default() -> Self { - Box::new(Default) - } -} - -impl<T> From<T> for Box<dyn StyleSheet> -where - T: 'static + StyleSheet, -{ - fn from(style: T) -> Self { - Box::new(style) + &Default } } diff --git a/web/src/widget/checkbox.rs b/web/src/widget/checkbox.rs index 43110aa7..095ef47d 100644 --- a/web/src/widget/checkbox.rs +++ b/web/src/widget/checkbox.rs @@ -24,17 +24,17 @@ use std::rc::Rc; /// ///  #[allow(missing_debug_implementations)] -pub struct Checkbox<Message> { +pub struct Checkbox<'a, Message> { is_checked: bool, on_toggle: Rc<dyn Fn(bool) -> Message>, label: String, id: Option<String>, width: Length, #[allow(dead_code)] - style: Box<dyn StyleSheet>, + style_sheet: &'a dyn StyleSheet, } -impl<Message> Checkbox<Message> { +impl<'a, Message> Checkbox<'a, Message> { /// Creates a new [`Checkbox`]. /// /// It expects: @@ -53,7 +53,7 @@ impl<Message> Checkbox<Message> { label: label.into(), id: None, width: Length::Shrink, - style: Default::default(), + style_sheet: Default::default(), } } @@ -64,8 +64,8 @@ impl<Message> Checkbox<Message> { } /// Sets the style of the [`Checkbox`]. - pub fn style(mut self, style: impl Into<Box<dyn StyleSheet>>) -> Self { - self.style = style.into(); + pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self { + self.style_sheet = style_sheet; self } @@ -76,7 +76,7 @@ impl<Message> Checkbox<Message> { } } -impl<Message> Widget<Message> for Checkbox<Message> +impl<'a, Message> Widget<Message> for Checkbox<'a, Message> where Message: 'static, { @@ -137,11 +137,11 @@ where } } -impl<'a, Message> From<Checkbox<Message>> for Element<'a, Message> +impl<'a, Message> From<Checkbox<'a, Message>> for Element<'a, Message> where Message: 'static, { - fn from(checkbox: Checkbox<Message>) -> Element<'a, Message> { + fn from(checkbox: Checkbox<'a, Message>) -> Element<'a, Message> { Element::new(checkbox) } } diff --git a/wgpu/src/widget/checkbox.rs b/wgpu/src/widget/checkbox.rs index d27d77cc..9fd003d4 100644 --- a/wgpu/src/widget/checkbox.rs +++ b/wgpu/src/widget/checkbox.rs @@ -6,4 +6,4 @@ pub use iced_graphics::checkbox::{Style, StyleSheet}; /// A box that can be checked. /// /// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`. -pub type Checkbox<Message> = iced_native::Checkbox<Message, Renderer>; +pub type Checkbox<'a, Message> = iced_native::Checkbox<'a, Message, Renderer>; |