summaryrefslogtreecommitdiffstats
path: root/style/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-07-08 20:07:33 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-07-08 20:07:33 +0200
commitbb07d017e8c8e43ac74f66bf649643bebdc5f71d (patch)
tree6e780f78ef4eae7dbe590a82ceef11e47289d953 /style/src
parentfa55dff61db47197a961152285c6a6abfab0b217 (diff)
downloadiced-bb07d017e8c8e43ac74f66bf649643bebdc5f71d.tar.gz
iced-bb07d017e8c8e43ac74f66bf649643bebdc5f71d.tar.bz2
iced-bb07d017e8c8e43ac74f66bf649643bebdc5f71d.zip
Add `Style` variant support to `application::StyleSheet`
Diffstat (limited to 'style/src')
-rw-r--r--style/src/application.rs10
-rw-r--r--style/src/theme.rs26
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),
+ }
}
}