diff options
author | 2022-07-08 20:07:33 +0200 | |
---|---|---|
committer | 2022-07-08 20:07:33 +0200 | |
commit | bb07d017e8c8e43ac74f66bf649643bebdc5f71d (patch) | |
tree | 6e780f78ef4eae7dbe590a82ceef11e47289d953 /style | |
parent | fa55dff61db47197a961152285c6a6abfab0b217 (diff) | |
download | iced-bb07d017e8c8e43ac74f66bf649643bebdc5f71d.tar.gz iced-bb07d017e8c8e43ac74f66bf649643bebdc5f71d.tar.bz2 iced-bb07d017e8c8e43ac74f66bf649643bebdc5f71d.zip |
Add `Style` variant support to `application::StyleSheet`
Diffstat (limited to 'style')
-rw-r--r-- | style/src/application.rs | 10 | ||||
-rw-r--r-- | style/src/theme.rs | 26 |
2 files changed, 28 insertions, 8 deletions
diff --git a/style/src/application.rs b/style/src/application.rs index 4aa950fb..d48c6a34 100644 --- a/style/src/application.rs +++ b/style/src/application.rs @@ -1,7 +1,13 @@ use iced_core::Color; pub trait StyleSheet { - fn background_color(&self) -> Color; + type Style: Default + Copy; - fn text_color(&self) -> Color; + fn appearance(&self, style: Self::Style) -> Appearance; +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct Appearance { + pub background_color: Color, + pub text_color: Color, } diff --git a/style/src/theme.rs b/style/src/theme.rs index 0bae671e..70b32edf 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -48,17 +48,31 @@ impl Default for Theme { } } -impl application::StyleSheet for Theme { - fn background_color(&self) -> Color { - let palette = self.extended_palette(); +#[derive(Debug, Clone, Copy)] +pub enum Application { + Default, + Custom(fn(Theme) -> application::Appearance), +} - palette.background.base.color +impl Default for Application { + fn default() -> Self { + Self::Default } +} - fn text_color(&self) -> Color { +impl application::StyleSheet for Theme { + type Style = Application; + + fn appearance(&self, style: Self::Style) -> application::Appearance { let palette = self.extended_palette(); - palette.background.base.text + match style { + Application::Default => application::Appearance { + background_color: palette.background.base.color, + text_color: palette.background.base.text, + }, + Application::Custom(f) => f(*self), + } } } |