diff options
Diffstat (limited to 'style/src')
-rw-r--r-- | style/src/lib.rs | 1 | ||||
-rw-r--r-- | style/src/text.rs | 18 | ||||
-rw-r--r-- | style/src/theme.rs | 35 |
3 files changed, 54 insertions, 0 deletions
diff --git a/style/src/lib.rs b/style/src/lib.rs index 4a0a6a14..ee426e98 100644 --- a/style/src/lib.rs +++ b/style/src/lib.rs @@ -21,6 +21,7 @@ pub mod radio; pub mod rule; pub mod scrollable; pub mod slider; +pub mod text; pub mod text_input; pub mod theme; pub mod toggler; diff --git a/style/src/text.rs b/style/src/text.rs new file mode 100644 index 00000000..69a4ed85 --- /dev/null +++ b/style/src/text.rs @@ -0,0 +1,18 @@ +use iced_core::Color; + +pub trait StyleSheet { + type Style: Default + Copy; + + fn appearance(&self, style: Self::Style) -> Appearance; +} + +#[derive(Debug, Clone, Copy)] +pub struct Appearance { + pub color: Option<Color>, +} + +impl Default for Appearance { + fn default() -> Self { + Self { color: None } + } +} diff --git a/style/src/theme.rs b/style/src/theme.rs index b1e18c55..0bae671e 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -14,6 +14,7 @@ use crate::radio; use crate::rule; use crate::scrollable; use crate::slider; +use crate::text; use crate::text_input; use crate::toggler; @@ -602,6 +603,40 @@ impl scrollable::StyleSheet for Theme { } /* + * Text + */ +#[derive(Clone, Copy)] +pub enum Text { + Default, + Color(Color), + Custom(fn(&Theme) -> text::Appearance), +} + +impl Default for Text { + fn default() -> Self { + Self::Default + } +} + +impl From<Color> for Text { + fn from(color: Color) -> Self { + Text::Color(color) + } +} + +impl text::StyleSheet for Theme { + type Style = Text; + + fn appearance(&self, style: Self::Style) -> text::Appearance { + match style { + Text::Default => Default::default(), + Text::Color(c) => text::Appearance { color: Some(c) }, + Text::Custom(f) => f(self), + } + } +} + +/* * Text Input */ impl text_input::StyleSheet for Theme { |