diff options
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/renderer/null.rs | 4 | ||||
-rw-r--r-- | core/src/text.rs | 39 | ||||
-rw-r--r-- | core/src/text/paragraph.rs | 6 |
3 files changed, 47 insertions, 2 deletions
diff --git a/core/src/renderer/null.rs b/core/src/renderer/null.rs index d8d3c50a..5c7513c6 100644 --- a/core/src/renderer/null.rs +++ b/core/src/renderer/null.rs @@ -111,6 +111,10 @@ impl text::Paragraph for () { fn hit_span(&self, _point: Point) -> Option<usize> { None } + + fn span_bounds(&self, _index: usize) -> Vec<Rectangle> { + vec![] + } } impl text::Editor for () { diff --git a/core/src/text.rs b/core/src/text.rs index aa24d85f..0bdc6851 100644 --- a/core/src/text.rs +++ b/core/src/text.rs @@ -8,7 +8,7 @@ pub use highlighter::Highlighter; pub use paragraph::Paragraph; use crate::alignment; -use crate::{Color, Pixels, Point, Rectangle, Size}; +use crate::{Border, Color, Pixels, Point, Rectangle, Size}; use std::borrow::Cow; use std::hash::{Hash, Hasher}; @@ -235,6 +235,8 @@ pub struct Span<'a, Link = (), Font = crate::Font> { pub font: Option<Font>, /// The [`Color`] of the [`Span`]. pub color: Option<Color>, + /// The [`Background`] of the [`Span`]. + pub background: Option<Background>, /// The link of the [`Span`]. pub link: Option<Link>, } @@ -248,6 +250,7 @@ impl<'a, Link, Font> Span<'a, Link, Font> { line_height: None, font: None, color: None, + background: None, link: None, } } @@ -288,6 +291,21 @@ impl<'a, Link, Font> Span<'a, Link, Font> { self } + /// Sets the [`Background`] of the [`Span`]. + pub fn background(mut self, background: impl Into<Background>) -> Self { + self.background = Some(background.into()); + self + } + + /// Sets the [`Background`] of the [`Span`], if any. + pub fn background_maybe( + mut self, + background: Option<impl Into<Background>>, + ) -> Self { + self.background = background.map(Into::into); + self + } + /// Sets the link of the [`Span`]. pub fn link(mut self, link: impl Into<Link>) -> Self { self.link = Some(link.into()); @@ -308,6 +326,7 @@ impl<'a, Link, Font> Span<'a, Link, Font> { line_height: self.line_height, font: self.font, color: self.color, + background: self.background, link: self.link, } } @@ -406,3 +425,21 @@ into_fragment!(isize); into_fragment!(f32); into_fragment!(f64); + +/// The background style of text +#[derive(Debug, Clone, Copy)] +pub struct Background { + /// The background [`Color`] + pub color: Color, + /// The background [`Border`] + pub border: Border, +} + +impl From<Color> for Background { + fn from(color: Color) -> Self { + Background { + color, + border: Border::default(), + } + } +} diff --git a/core/src/text/paragraph.rs b/core/src/text/paragraph.rs index 26650793..04a97f35 100644 --- a/core/src/text/paragraph.rs +++ b/core/src/text/paragraph.rs @@ -1,7 +1,7 @@ //! Draw paragraphs. use crate::alignment; use crate::text::{Difference, Hit, Span, Text}; -use crate::{Point, Size}; +use crate::{Point, Rectangle, Size}; /// A text paragraph. pub trait Paragraph: Sized + Default { @@ -42,6 +42,10 @@ pub trait Paragraph: Sized + Default { /// that was hit. fn hit_span(&self, point: Point) -> Option<usize>; + /// Returns all bounds for the provided [`Span`] index of the [`Paragraph`]. + /// A [`Span`] can have multiple bounds for each line it's on. + fn span_bounds(&self, index: usize) -> Vec<Rectangle>; + /// Returns the distance to the given grapheme index in the [`Paragraph`]. fn grapheme_position(&self, line: usize, index: usize) -> Option<Point>; |