summaryrefslogtreecommitdiffstats
path: root/style/src
diff options
context:
space:
mode:
Diffstat (limited to 'style/src')
-rw-r--r--style/src/lib.rs1
-rw-r--r--style/src/text.rs18
-rw-r--r--style/src/theme.rs35
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 {