Add background styling to span / rich text
This commit is contained in:
parent
23a7e9f981
commit
ddcf02f9d0
7 changed files with 141 additions and 16 deletions
|
|
@ -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 () {
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue