Reintroduce Box for style_sheet in Slider

This commit is contained in:
Héctor Ramón Jiménez 2021-10-31 17:42:43 +07:00
parent eed19dcf81
commit 0c76e0307f
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
5 changed files with 26 additions and 11 deletions

View file

@ -853,7 +853,7 @@ impl Controls {
speed as f32, speed as f32,
Message::SpeedChanged, Message::SpeedChanged,
) )
.style(&style::Slider), .style(style::Slider),
) )
.push(Text::new(format!("x{}", speed)).size(16)); .push(Text::new(format!("x{}", speed)).size(16));

View file

@ -90,7 +90,7 @@ impl Sandbox for Styling {
self.slider_value, self.slider_value,
Message::SliderChanged, Message::SliderChanged,
) )
.style(self.theme.into()); .style(self.theme);
let progress_bar = let progress_bar =
ProgressBar::new(0.0..=100.0, self.slider_value).style(self.theme); ProgressBar::new(0.0..=100.0, self.slider_value).style(self.theme);
@ -221,11 +221,11 @@ mod style {
} }
} }
impl From<Theme> for &'static dyn slider::StyleSheet { impl<'a> From<Theme> for Box<dyn slider::StyleSheet + 'a> {
fn from(theme: Theme) -> Self { fn from(theme: Theme) -> Self {
match theme { match theme {
Theme::Light => Default::default(), Theme::Light => Default::default(),
Theme::Dark => &dark::Slider, Theme::Dark => dark::Slider.into(),
} }
} }
} }

View file

@ -50,7 +50,7 @@ pub struct Slider<'a, T, Message> {
on_release: Option<Message>, on_release: Option<Message>,
width: Length, width: Length,
height: u16, height: u16,
style_sheet: &'a dyn StyleSheet, style_sheet: Box<dyn StyleSheet + 'a>,
} }
impl<'a, T, Message> Slider<'a, T, Message> impl<'a, T, Message> Slider<'a, T, Message>
@ -127,8 +127,11 @@ where
} }
/// Sets the style of the [`Slider`]. /// Sets the style of the [`Slider`].
pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self { pub fn style(
self.style_sheet = style_sheet; mut self,
style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
) -> Self {
self.style_sheet = style_sheet.into();
self self
} }

View file

@ -79,8 +79,17 @@ impl StyleSheet for Default {
} }
} }
impl std::default::Default for &'static dyn StyleSheet { impl std::default::Default for Box<dyn StyleSheet> {
fn default() -> Self { fn default() -> Self {
&Default Box::new(Default)
}
}
impl<'a, T> From<T> for Box<dyn StyleSheet + 'a>
where
T: StyleSheet + 'a,
{
fn from(style_sheet: T) -> Self {
Box::new(style_sheet)
} }
} }

View file

@ -41,7 +41,7 @@ pub struct Slider<'a, T, Message> {
#[allow(dead_code)] #[allow(dead_code)]
width: Length, width: Length,
#[allow(dead_code)] #[allow(dead_code)]
style_sheet: &'a dyn StyleSheet, style_sheet: Box<dyn StyleSheet + 'a>,
} }
impl<'a, T, Message> Slider<'a, T, Message> impl<'a, T, Message> Slider<'a, T, Message>
@ -96,7 +96,10 @@ where
} }
/// Sets the style of the [`Slider`]. /// Sets the style of the [`Slider`].
pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self { pub fn style(
mut self,
style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
) -> Self {
self.style_sheet = style_sheet.into(); self.style_sheet = style_sheet.into();
self self
} }