diff options
Diffstat (limited to 'core/src/text.rs')
-rw-r--r-- | core/src/text.rs | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/core/src/text.rs b/core/src/text.rs index 22cfce13..c22734f8 100644 --- a/core/src/text.rs +++ b/core/src/text.rs @@ -223,8 +223,8 @@ pub trait Renderer: crate::Renderer { } /// A span of text. -#[derive(Debug, Clone, PartialEq)] -pub struct Span<'a, Font = crate::Font> { +#[derive(Debug, Clone)] +pub struct Span<'a, Link = (), Font = crate::Font> { /// The [`Fragment`] of text. pub text: Fragment<'a>, /// The size of the [`Span`] in [`Pixels`]. @@ -235,9 +235,11 @@ pub struct Span<'a, Font = crate::Font> { pub font: Option<Font>, /// The [`Color`] of the [`Span`]. pub color: Option<Color>, + /// The link of the [`Span`]. + pub link: Option<Link>, } -impl<'a, Font> Span<'a, Font> { +impl<'a, Link, Font> Span<'a, Link, Font> { /// Creates a new [`Span`] of text with the given text fragment. pub fn new(fragment: impl IntoFragment<'a>) -> Self { Self { @@ -246,6 +248,7 @@ impl<'a, Font> Span<'a, Font> { line_height: None, font: None, color: None, + link: None, } } @@ -285,14 +288,27 @@ impl<'a, Font> Span<'a, Font> { self } + /// Sets the link of the [`Span`]. + pub fn link(mut self, link: impl Into<Link>) -> Self { + self.link = Some(link.into()); + self + } + + /// Sets the link of the [`Span`], if any. + pub fn link_maybe(mut self, link: Option<impl Into<Link>>) -> Self { + self.link = link.map(Into::into); + self + } + /// Turns the [`Span`] into a static one. - pub fn to_static(self) -> Span<'static, Font> { + pub fn to_static(self) -> Span<'static, Link, Font> { Span { text: Cow::Owned(self.text.into_owned()), size: self.size, line_height: self.line_height, font: self.font, color: self.color, + link: self.link, } } } @@ -303,6 +319,16 @@ impl<'a, Font> From<&'a str> for Span<'a, Font> { } } +impl<'a, Link, Font: PartialEq> PartialEq for Span<'a, Link, Font> { + fn eq(&self, other: &Self) -> bool { + self.text == other.text + && self.size == other.size + && self.line_height == other.line_height + && self.font == other.font + && self.color == other.color + } +} + /// A fragment of [`Text`]. /// /// This is just an alias to a string that may be either |