diff options
-rw-r--r-- | examples/game_of_life/src/main.rs | 2 | ||||
-rw-r--r-- | examples/styling/src/main.rs | 6 | ||||
-rw-r--r-- | glow/src/widget/slider.rs | 10 | ||||
-rw-r--r-- | graphics/src/widget/slider.rs | 21 | ||||
-rw-r--r-- | native/src/renderer/null.rs | 10 | ||||
-rw-r--r-- | native/src/widget/slider.rs | 48 | ||||
-rw-r--r-- | style/src/slider.rs | 13 | ||||
-rw-r--r-- | web/src/widget/slider.rs | 8 | ||||
-rw-r--r-- | wgpu/src/widget/slider.rs | 10 |
9 files changed, 31 insertions, 97 deletions
diff --git a/examples/game_of_life/src/main.rs b/examples/game_of_life/src/main.rs index 3e94bd44..2c027421 100644 --- a/examples/game_of_life/src/main.rs +++ b/examples/game_of_life/src/main.rs @@ -853,7 +853,7 @@ impl Controls { speed as f32, Message::SpeedChanged, ) - .style(style::Slider), + .style(&style::Slider), ) .push(Text::new(format!("x{}", speed)).size(16)); diff --git a/examples/styling/src/main.rs b/examples/styling/src/main.rs index 38ab0411..34d18fc9 100644 --- a/examples/styling/src/main.rs +++ b/examples/styling/src/main.rs @@ -90,7 +90,7 @@ impl Sandbox for Styling { self.slider_value, Message::SliderChanged, ) - .style(self.theme); + .style(self.theme.into()); let progress_bar = ProgressBar::new(0.0..=100.0, self.slider_value).style(self.theme); @@ -221,11 +221,11 @@ mod style { } } - impl From<Theme> for Box<dyn slider::StyleSheet> { + impl From<Theme> for &'static dyn slider::StyleSheet { fn from(theme: Theme) -> Self { match theme { Theme::Light => Default::default(), - Theme::Dark => dark::Slider.into(), + Theme::Dark => &dark::Slider, } } } diff --git a/glow/src/widget/slider.rs b/glow/src/widget/slider.rs index 9a269858..2ece156c 100644 --- a/glow/src/widget/slider.rs +++ b/glow/src/widget/slider.rs @@ -1,13 +1,5 @@ //! Display an interactive selector of a single value from a range of values. //! //! A [`Slider`] has some local [`State`]. -use crate::Renderer; - pub use iced_graphics::slider::{Handle, HandleShape, Style, StyleSheet}; -pub use iced_native::slider::State; - -/// An horizontal bar and a handle that selects a single value from a range of -/// values. -/// -/// This is an alias of an `iced_native` slider with an `iced_wgpu::Renderer`. -pub type Slider<'a, T, Message> = iced_native::Slider<'a, T, Message, Renderer>; +pub use iced_native::slider::{Slider, State}; diff --git a/graphics/src/widget/slider.rs b/graphics/src/widget/slider.rs index 5125d66c..766ecbb6 100644 --- a/graphics/src/widget/slider.rs +++ b/graphics/src/widget/slider.rs @@ -1,24 +1,5 @@ //! Display an interactive selector of a single value from a range of values. //! //! A [`Slider`] has some local [`State`]. -use crate::{Backend, Renderer}; -use iced_native::slider; - -pub use iced_native::slider::State; +pub use iced_native::slider::{Slider, State}; pub use iced_style::slider::{Handle, HandleShape, Style, StyleSheet}; - -/// An horizontal bar and a handle that selects a single value from a range of -/// values. -/// -/// This is an alias of an `iced_native` slider with an `iced_wgpu::Renderer`. -pub type Slider<'a, T, Message, Backend> = - iced_native::Slider<'a, T, Message, Renderer<Backend>>; - -impl<B> slider::Renderer for Renderer<B> -where - B: Backend, -{ - type Style = Box<dyn StyleSheet>; - - const DEFAULT_HEIGHT: u16 = 22; -} diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs index 07023a67..2d6979e3 100644 --- a/native/src/renderer/null.rs +++ b/native/src/renderer/null.rs @@ -1,14 +1,12 @@ -use crate::button; use crate::checkbox; use crate::pane_grid; use crate::progress_bar; use crate::radio; use crate::renderer::{self, Renderer}; -use crate::slider; use crate::text; use crate::text_input; use crate::toggler; -use crate::{Font, Padding, Point, Rectangle, Size, Vector}; +use crate::{Font, Point, Rectangle, Size, Vector}; /// A renderer that does nothing. /// @@ -104,12 +102,6 @@ impl checkbox::Renderer for Null { const DEFAULT_SPACING: u16 = 15; } -impl slider::Renderer for Null { - type Style = (); - - const DEFAULT_HEIGHT: u16 = 30; -} - impl progress_bar::Renderer for Null { type Style = (); diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 7bdb72af..24b6bf6d 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -13,6 +13,8 @@ use crate::{ use std::hash::Hash; use std::ops::RangeInclusive; +pub use iced_style::slider::{Handle, HandleShape, Style, StyleSheet}; + /// An horizontal bar and a handle that selects a single value from a range of /// values. /// @@ -23,9 +25,8 @@ use std::ops::RangeInclusive; /// /// # Example /// ``` -/// # use iced_native::{slider, renderer::Null}; +/// # use iced_native::slider::{self, Slider}; /// # -/// # pub type Slider<'a, T, Message> = iced_native::Slider<'a, T, Message, Null>; /// #[derive(Clone)] /// pub enum Message { /// SliderChanged(f32), @@ -39,7 +40,7 @@ use std::ops::RangeInclusive; /// ///  #[allow(missing_debug_implementations)] -pub struct Slider<'a, T, Message, Renderer: self::Renderer> { +pub struct Slider<'a, T, Message> { state: &'a mut State, range: RangeInclusive<T>, step: T, @@ -48,15 +49,16 @@ pub struct Slider<'a, T, Message, Renderer: self::Renderer> { on_release: Option<Message>, width: Length, height: u16, - style: Renderer::Style, + style_sheet: &'a dyn StyleSheet, } -impl<'a, T, Message, Renderer> Slider<'a, T, Message, Renderer> +impl<'a, T, Message> Slider<'a, T, Message> where T: Copy + From<u8> + std::cmp::PartialOrd, Message: Clone, - Renderer: self::Renderer, { + pub const DEFAULT_HEIGHT: u16 = 22; + /// Creates a new [`Slider`]. /// /// It expects: @@ -95,8 +97,8 @@ where on_change: Box::new(on_change), on_release: None, width: Length::Fill, - height: Renderer::DEFAULT_HEIGHT, - style: Renderer::Style::default(), + height: Self::DEFAULT_HEIGHT, + style_sheet: Default::default(), } } @@ -124,8 +126,8 @@ where } /// Sets the style of the [`Slider`]. - 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 } @@ -150,11 +152,11 @@ impl State { } impl<'a, T, Message, Renderer> Widget<Message, Renderer> - for Slider<'a, T, Message, Renderer> + for Slider<'a, T, Message> where T: Copy + Into<f64> + num_traits::FromPrimitive, Message: Clone, - Renderer: self::Renderer, + Renderer: crate::Renderer, { fn width(&self) -> Length { self.width @@ -275,30 +277,14 @@ where } } -/// The renderer of a [`Slider`]. -/// -/// Your [renderer] will need to implement this trait before being -/// able to use a [`Slider`] in your user interface. -/// -/// [renderer]: crate::renderer -pub trait Renderer: crate::Renderer { - /// The style supported by this renderer. - type Style: Default; - - /// The default height of a [`Slider`]. - const DEFAULT_HEIGHT: u16; -} - -impl<'a, T, Message, Renderer> From<Slider<'a, T, Message, Renderer>> +impl<'a, T, Message, Renderer> From<Slider<'a, T, Message>> for Element<'a, Message, Renderer> where T: 'a + Copy + Into<f64> + num_traits::FromPrimitive, Message: 'a + Clone, - Renderer: 'a + self::Renderer, + Renderer: 'a + crate::Renderer, { - fn from( - slider: Slider<'a, T, Message, Renderer>, - ) -> Element<'a, Message, Renderer> { + fn from(slider: Slider<'a, T, Message>) -> Element<'a, Message, Renderer> { Element::new(slider) } } diff --git a/style/src/slider.rs b/style/src/slider.rs index 9148fcbe..c6791c3d 100644 --- a/style/src/slider.rs +++ b/style/src/slider.rs @@ -79,17 +79,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/slider.rs b/web/src/widget/slider.rs index f457aa4c..7ec84475 100644 --- a/web/src/widget/slider.rs +++ b/web/src/widget/slider.rs @@ -41,7 +41,7 @@ pub struct Slider<'a, T, Message> { #[allow(dead_code)] width: Length, #[allow(dead_code)] - style: Box<dyn StyleSheet>, + style_sheet: &'a dyn StyleSheet, } impl<'a, T, Message> Slider<'a, T, Message> @@ -85,7 +85,7 @@ where step: T::from(1), on_change: Rc::new(Box::new(on_change)), width: Length::Fill, - style: Default::default(), + style_sheet: Default::default(), } } @@ -96,8 +96,8 @@ where } /// Sets the style of the [`Slider`]. - 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.into(); self } diff --git a/wgpu/src/widget/slider.rs b/wgpu/src/widget/slider.rs index 9a269858..2ece156c 100644 --- a/wgpu/src/widget/slider.rs +++ b/wgpu/src/widget/slider.rs @@ -1,13 +1,5 @@ //! Display an interactive selector of a single value from a range of values. //! //! A [`Slider`] has some local [`State`]. -use crate::Renderer; - pub use iced_graphics::slider::{Handle, HandleShape, Style, StyleSheet}; -pub use iced_native::slider::State; - -/// An horizontal bar and a handle that selects a single value from a range of -/// values. -/// -/// This is an alias of an `iced_native` slider with an `iced_wgpu::Renderer`. -pub type Slider<'a, T, Message> = iced_native::Slider<'a, T, Message, Renderer>; +pub use iced_native::slider::{Slider, State}; |