diff options
Diffstat (limited to '')
| -rw-r--r-- | widget/src/helpers.rs | 2 | ||||
| -rw-r--r-- | widget/src/svg.rs | 36 | 
2 files changed, 25 insertions, 13 deletions
| diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs index da9a5792..f63306c4 100644 --- a/widget/src/helpers.rs +++ b/widget/src/helpers.rs @@ -366,7 +366,7 @@ pub fn image<Handle>(handle: impl Into<Handle>) -> crate::Image<Handle> {  #[cfg(feature = "svg")]  pub fn svg<Theme>(handle: impl Into<core::svg::Handle>) -> crate::Svg<Theme>  where -    Theme: crate::svg::Style, +    crate::svg::Style<Theme>: Default,  {      crate::Svg::new(handle)  } diff --git a/widget/src/svg.rs b/widget/src/svg.rs index a0402288..8ac5a1cf 100644 --- a/widget/src/svg.rs +++ b/widget/src/svg.rs @@ -25,21 +25,21 @@ pub struct Svg<Theme = crate::Theme> {      width: Length,      height: Length,      content_fit: ContentFit, -    style: fn(&Theme, Status) -> Appearance, +    style: Style<Theme>,  }  impl<Theme> Svg<Theme> {      /// Creates a new [`Svg`] from the given [`Handle`].      pub fn new(handle: impl Into<Handle>) -> Self      where -        Theme: Style, +        Style<Theme>: Default,      {          Svg {              handle: handle.into(),              width: Length::Fill,              height: Length::Shrink,              content_fit: ContentFit::Contain, -            style: Theme::style(), +            style: Style::default(),          }      } @@ -48,7 +48,7 @@ impl<Theme> Svg<Theme> {      #[must_use]      pub fn from_path(path: impl Into<PathBuf>) -> Self      where -        Theme: Style, +        Style<Theme>: Default,      {          Self::new(Handle::from_path(path))      } @@ -163,7 +163,7 @@ where                  Status::Idle              }; -            let appearance = (self.style)(theme, status); +            let appearance = (self.style.0)(theme, status);              renderer.draw(                  self.handle.clone(), @@ -213,14 +213,26 @@ pub struct Appearance {      pub color: Option<Color>,  } -/// The definiton of the default style of an [`Svg`]. -pub trait Style { -    /// Returns the default style of an [`Svg`]. -    fn style() -> fn(&Self, Status) -> Appearance; +/// The style of an [`Svg`]. +#[derive(Debug, PartialEq, Eq)] +pub struct Style<Theme>(fn(&Theme, Status) -> Appearance); + +impl<Theme> Clone for Style<Theme> { +    fn clone(&self) -> Self { +        *self +    } +} + +impl<Theme> Copy for Style<Theme> {} + +impl Default for Style<Theme> { +    fn default() -> Self { +        Style(|_, _| Appearance::default()) +    }  } -impl Style for Theme { -    fn style() -> fn(&Self, Status) -> Appearance { -        |_, _| Appearance::default() +impl<Theme> From<fn(&Theme, Status) -> Appearance> for Style<Theme> { +    fn from(f: fn(&Theme, Status) -> Appearance) -> Self { +        Style(f)      }  } | 
