summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui/components/text.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-08-25 18:22:00 +0100
committerJoe Carstairs <me@joeac.net>2025-08-25 18:22:00 +0100
commit86487b8ff6e691f2b261a93733df8f4cc5dc7320 (patch)
tree8d116acb31fe3bf8ce5d4201ae0bbc36ce6cc38a /schist_desktop_gui/src/gui/components/text.rs
parentfe85652e4d3e8906824baddaafd05d19105579b8 (diff)
refactor navigation
Diffstat (limited to 'schist_desktop_gui/src/gui/components/text.rs')
-rw-r--r--schist_desktop_gui/src/gui/components/text.rs68
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()
+}