diff options
author | 2022-12-06 05:15:16 +0100 | |
---|---|---|
committer | 2022-12-06 05:15:16 +0100 | |
commit | f38e7fcac2e3505d11577ade1757a77ca2a544ea (patch) | |
tree | 84b3dc6c88aa555cf931482adcf4e7be35614b72 /style/src/theme.rs | |
parent | 28f0beee52f258af6bbaf8a0d9867863d7513c9b (diff) | |
parent | f99d24e0850b63194b7976ec66d547ea2ff6bfc8 (diff) | |
download | iced-f38e7fcac2e3505d11577ade1757a77ca2a544ea.tar.gz iced-f38e7fcac2e3505d11577ade1757a77ca2a544ea.tar.bz2 iced-f38e7fcac2e3505d11577ade1757a77ca2a544ea.zip |
Merge pull request #1578 from iced-rs/svg-styling
Svg styling
Diffstat (limited to 'style/src/theme.rs')
-rw-r--r-- | style/src/theme.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/style/src/theme.rs b/style/src/theme.rs index dde0df5d..271d9a29 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -16,6 +16,7 @@ use crate::radio; use crate::rule; use crate::scrollable; use crate::slider; +use crate::svg; use crate::text; use crate::text_input; use crate::toggler; @@ -823,6 +824,44 @@ impl rule::StyleSheet for fn(&Theme) -> rule::Appearance { } } +/** + * Svg + */ +#[derive(Default)] +pub enum Svg { + /// No filtering to the rendered SVG. + #[default] + Default, + /// A custom style. + Custom(Box<dyn svg::StyleSheet<Style = Theme>>), +} + +impl Svg { + /// Creates a custom [`Svg`] style. + pub fn custom_fn(f: fn(&Theme) -> svg::Appearance) -> Self { + Self::Custom(Box::new(f)) + } +} + +impl svg::StyleSheet for Theme { + type Style = Svg; + + fn appearance(&self, style: &Self::Style) -> svg::Appearance { + match style { + Svg::Default => Default::default(), + Svg::Custom(custom) => custom.appearance(self), + } + } +} + +impl svg::StyleSheet for fn(&Theme) -> svg::Appearance { + type Style = Theme; + + fn appearance(&self, style: &Self::Style) -> svg::Appearance { + (self)(style) + } +} + /// The style of a scrollable. #[derive(Default)] pub enum Scrollable { |