diff options
| author | Joe Carstairs <me@joeac.net> | 2025-08-25 18:22:00 +0100 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2025-08-25 18:22:00 +0100 |
| commit | 86487b8ff6e691f2b261a93733df8f4cc5dc7320 (patch) | |
| tree | 8d116acb31fe3bf8ce5d4201ae0bbc36ce6cc38a /schist_desktop_gui/src/gui/components/text.rs | |
| parent | fe85652e4d3e8906824baddaafd05d19105579b8 (diff) | |
refactor navigation
Diffstat (limited to 'schist_desktop_gui/src/gui/components/text.rs')
| -rw-r--r-- | schist_desktop_gui/src/gui/components/text.rs | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/schist_desktop_gui/src/gui/components/text.rs b/schist_desktop_gui/src/gui/components/text.rs index 90cd7bc..a3093ac 100644 --- a/schist_desktop_gui/src/gui/components/text.rs +++ b/schist_desktop_gui/src/gui/components/text.rs @@ -1,3 +1,5 @@ +use std::borrow::Borrow; + use crate::style::*; #[derive(Clone, Debug, PartialEq)] @@ -71,30 +73,46 @@ impl Text { } } -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() +impl<'a, Message> From<Text> for iced::Element<'a, Message> { + fn from(text: Text) -> Self { + text_as_element(text) + } +} + +impl<'a, Message> From<&'a Text> for iced::Element<'a, Message> { + fn from(text: &'a Text) -> Self { + text_as_element(text) } } + +fn text_as_element<'a, T, Message>(text: T) -> iced::Element<'a, Message> +where + T: Borrow<Text> + 'a, +{ + iced::widget::text(text.borrow().content.clone()) + .size(match text.borrow().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 ( + &text.borrow().borrow().colour, + &text.borrow().borrow().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() +} |
