diff options
| author | Joe Carstairs <me@joeac.net> | 2025-08-25 16:35:45 +0000 |
|---|---|---|
| committer | joeac <me@joeac.net> | 2025-08-25 16:35:45 +0000 |
| commit | fe85652e4d3e8906824baddaafd05d19105579b8 (patch) | |
| tree | 31b56e31cbf289a34ec1d6707becf3c60933b56f /schist_desktop_gui/src/gui/components/text.rs | |
| parent | d082a30de6a0cbd1fbe2ab5a4316db0891004129 (diff) | |
task-072
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com>
Reviewed-on: https://git.joeac.net/joeac/schist/pulls/3
Co-authored-by: Joe Carstairs <me@joeac.net>
Co-committed-by: Joe Carstairs <me@joeac.net>
Diffstat (limited to 'schist_desktop_gui/src/gui/components/text.rs')
| -rw-r--r-- | schist_desktop_gui/src/gui/components/text.rs | 94 |
1 files changed, 86 insertions, 8 deletions
diff --git a/schist_desktop_gui/src/gui/components/text.rs b/schist_desktop_gui/src/gui/components/text.rs index d334de3..90cd7bc 100644 --- a/schist_desktop_gui/src/gui/components/text.rs +++ b/schist_desktop_gui/src/gui/components/text.rs @@ -1,22 +1,100 @@ -use iced::Element; - -use crate::gui::components::navigation; +use crate::style::*; #[derive(Clone, Debug, PartialEq)] pub struct Text { pub content: String, + colour: Option<Colour>, + size: Option<Size>, + strength: Option<Strength>, +} + +#[derive(Clone, Debug, PartialEq)] +enum Colour { + Danger, + Primary, +} + +#[derive(Clone, Debug, PartialEq)] +enum Strength { + Base, + Weak, +} + +#[derive(Clone, Debug, PartialEq)] +enum Size { + Small, + Base, } impl Text { - pub fn new(group_name: String) -> Self { + pub fn default(content: &str) -> Self { + Self { + content: String::from(content), + colour: Some(Colour::Primary), + size: Some(Size::Base), + strength: Some(Strength::Base), + } + } + + pub fn new(content: &str) -> Self { + Self { + content: String::from(content), + colour: None, + size: None, + strength: None, + } + } + + pub fn as_element<'a, Message>(self) -> iced::Element<'a, Message> { + <Self as Into<iced::Element<'a, Message>>>::into(self) + } + + pub fn small(&self) -> Self { + Self { + size: Some(Size::Small), + ..self.clone() + } + } + + pub fn danger(&self) -> Self { + Self { + colour: Some(Colour::Danger), + ..self.clone() + } + } + + pub fn weak(&self) -> Self { Self { - content: group_name.clone(), + strength: Some(Strength::Weak), + ..self.clone() } } } -impl<'a> Into<Element<'a, navigation::Message<Text>>> for Text { - fn into(self) -> Element<'a, navigation::Message<Text>> { - iced::widget::text(self.content.clone()).into() +impl<'a, Message> Into<iced::Element<'a, Message>> for Text { + fn into(self) -> iced::Element<'a, Message> { + iced::widget::text(self.content.clone()) + .size(match self.size { + Some(Size::Small) => TEXT_SIZE_SM, + Some(Size::Base) | None => TEXT_SIZE_BASE, + }) + .style(move |theme: &iced::Theme| iced::widget::text::Style { + color: match (&self.colour, &self.strength) { + (Some(Colour::Danger), Some(Strength::Base) | None) => { + Some(theme.extended_palette().danger.base.text) + } + (Some(Colour::Danger), Some(Strength::Weak)) => { + Some(theme.extended_palette().danger.weak.text) + } + (Some(Colour::Primary), Some(Strength::Base) | None) => { + Some(theme.extended_palette().primary.base.text) + } + (Some(Colour::Primary), Some(Strength::Weak)) => { + Some(theme.extended_palette().primary.weak.text) + } + (None, _) => None, + }, + }) + .into() } } |
