summaryrefslogtreecommitdiffstats
path: root/style/src/theme.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-09-12 14:51:00 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-09-12 14:51:00 +0200
commit6448429103c9c82b90040ac5a5a097bdded23f82 (patch)
tree79582bde4a7d6df71df0abefe35146b06452409f /style/src/theme.rs
parent346af3f8b0baa418fd37b878bc2930ff0bd57cc0 (diff)
downloadiced-6448429103c9c82b90040ac5a5a097bdded23f82.tar.gz
iced-6448429103c9c82b90040ac5a5a097bdded23f82.tar.bz2
iced-6448429103c9c82b90040ac5a5a097bdded23f82.zip
Draft `Editor` API and `TextEditor` widget
Diffstat (limited to '')
-rw-r--r--style/src/theme.rs113
1 files changed, 113 insertions, 0 deletions
diff --git a/style/src/theme.rs b/style/src/theme.rs
index 893d7202..a1501c01 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -17,6 +17,7 @@ use crate::rule;
use crate::scrollable;
use crate::slider;
use crate::svg;
+use crate::text_editor;
use crate::text_input;
use crate::toggler;
@@ -1174,3 +1175,115 @@ impl text_input::StyleSheet for Theme {
self.placeholder_color(style)
}
}
+
+/// The style of a text input.
+#[derive(Default)]
+pub enum TextEditor {
+ /// The default style.
+ #[default]
+ Default,
+ /// A custom style.
+ Custom(Box<dyn text_editor::StyleSheet<Style = Theme>>),
+}
+
+impl text_editor::StyleSheet for Theme {
+ type Style = TextEditor;
+
+ fn active(&self, style: &Self::Style) -> text_editor::Appearance {
+ if let TextEditor::Custom(custom) = style {
+ return custom.active(self);
+ }
+
+ let palette = self.extended_palette();
+
+ text_editor::Appearance {
+ background: palette.background.base.color.into(),
+ border_radius: 2.0.into(),
+ border_width: 1.0,
+ border_color: palette.background.strong.color,
+ }
+ }
+
+ fn hovered(&self, style: &Self::Style) -> text_editor::Appearance {
+ if let TextEditor::Custom(custom) = style {
+ return custom.hovered(self);
+ }
+
+ let palette = self.extended_palette();
+
+ text_editor::Appearance {
+ background: palette.background.base.color.into(),
+ border_radius: 2.0.into(),
+ border_width: 1.0,
+ border_color: palette.background.base.text,
+ }
+ }
+
+ fn focused(&self, style: &Self::Style) -> text_editor::Appearance {
+ if let TextEditor::Custom(custom) = style {
+ return custom.focused(self);
+ }
+
+ let palette = self.extended_palette();
+
+ text_editor::Appearance {
+ background: palette.background.base.color.into(),
+ border_radius: 2.0.into(),
+ border_width: 1.0,
+ border_color: palette.primary.strong.color,
+ }
+ }
+
+ fn placeholder_color(&self, style: &Self::Style) -> Color {
+ if let TextEditor::Custom(custom) = style {
+ return custom.placeholder_color(self);
+ }
+
+ let palette = self.extended_palette();
+
+ palette.background.strong.color
+ }
+
+ fn value_color(&self, style: &Self::Style) -> Color {
+ if let TextEditor::Custom(custom) = style {
+ return custom.value_color(self);
+ }
+
+ let palette = self.extended_palette();
+
+ palette.background.base.text
+ }
+
+ fn selection_color(&self, style: &Self::Style) -> Color {
+ if let TextEditor::Custom(custom) = style {
+ return custom.selection_color(self);
+ }
+
+ let palette = self.extended_palette();
+
+ palette.primary.weak.color
+ }
+
+ fn disabled(&self, style: &Self::Style) -> text_editor::Appearance {
+ if let TextEditor::Custom(custom) = style {
+ return custom.disabled(self);
+ }
+
+ let palette = self.extended_palette();
+
+ text_editor::Appearance {
+ background: palette.background.weak.color.into(),
+ border_radius: 2.0.into(),
+ border_width: 1.0,
+ border_color: palette.background.strong.color,
+ }
+ }
+
+ fn disabled_color(&self, style: &Self::Style) -> Color {
+ if let TextEditor::Custom(custom) = style {
+ return custom.disabled_color(self);
+ }
+
+ self.placeholder_color(style)
+ }
+}