pub struct TextStyle {
pub size: f32,
pub line_height: f32,
pub color: Option<Color>,
pub family: FontFamily,
pub wrap: TextWrap,
pub max_lines: u32,
pub ellipsis: bool,
pub features: FontFeatures,
pub underline: bool,
pub underline_color: Option<Color>,
pub underline_style: UnderlineStyle,
pub strikethrough: bool,
}Expand description
How a run of text is shaped and painted: size, line height, colour, family, wrapping, line limits, OpenType features and decorations.
TextStyle::new takes the font size and derives a line height; the
rest are builders. A style with no colour paints in the theme’s
foreground, so plain text is legible on both the light and dark base.
use kui_core::{Color, FontFamily, TextStyle, TextWrap};
let body = TextStyle::new(15.0).line_height(22.0);
let caption = TextStyle::new(12.0).color(Color::hex(0x8a8fa3ff)).max_lines(2).ellipsis();
let code = TextStyle::new(13.0).family(FontFamily::Mono).wrap(TextWrap::None);
let link = TextStyle::new(15.0).underline().color(Color::hex(0x3b5bd4ff));
assert_eq!(body.color, None); // the theme's foreground
assert_eq!(caption.max_lines, 2);
assert!(code.wrap == TextWrap::None && link.underline);Fields§
§size: f32§line_height: f32§color: Option<Color>None is the theme’s foreground, filled in as the text enters the
tree so nothing downstream of that ever sees a None.
family: FontFamily§wrap: TextWrap§max_lines: u32At most this many lines are laid out; 0 = unlimited.
ellipsis: boolEnd the last line with “…” when the text was cut off. Alone it
means a single line (max_lines 1); with max_lines it clamps.
features: FontFeaturesOpenType features for the shaper; none by default, which is the font’s own defaults (ligatures on, where it has them).
underline: boolA line under every glyph, where the face puts its underline. Paint only: not part of what the text is shaped as.
underline_color: Option<Color>The underline’s own colour; None is the text’s.
underline_style: UnderlineStyleThe underline’s shape: a line, a wave, dots.
strikethrough: boolA line through every glyph, where the face puts its strikeout.
Implementations§
Source§impl TextStyle
impl TextStyle
Sourcepub fn new(size: f32) -> TextStyle
pub fn new(size: f32) -> TextStyle
A style at size logical px, sans, in the theme’s foreground, with
a line height of 1.35 times the size, rounded.
Sourcepub fn underline_color(self, c: Color) -> TextStyle
pub fn underline_color(self, c: Color) -> TextStyle
An underline in its own colour rather than the text’s (a diagnostic’s red under keyword-coloured text). Turns the underline on.
Sourcepub fn underline_style(self, s: UnderlineStyle) -> TextStyle
pub fn underline_style(self, s: UnderlineStyle) -> TextStyle
An underline of this shape. Turns the underline on.
Sourcepub fn strikethrough(self) -> TextStyle
pub fn strikethrough(self) -> TextStyle
A line through the text.
Sourcepub fn features(self, f: FontFeatures) -> TextStyle
pub fn features(self, f: FontFeatures) -> TextStyle
OpenType features for the shaper; see FontFeatures.
Sourcepub fn family(self, f: FontFamily) -> TextStyle
pub fn family(self, f: FontFamily) -> TextStyle
The face to shape with.
Sourcepub fn font(self, id: FontId) -> TextStyle
pub fn font(self, id: FontId) -> TextStyle
Shape with a registered font (see FontFamily::Custom).
Sourcepub fn line_height(self, lh: f32) -> TextStyle
pub fn line_height(self, lh: f32) -> TextStyle
The line height in logical px, replacing the derived one.
Sourcepub fn ellipsis(self) -> TextStyle
pub fn ellipsis(self) -> TextStyle
Truncate with “…” instead of overflowing: a single line unless
max_lines says otherwise.
Sourcepub fn or_fg(self, fg: Color) -> TextStyle
pub fn or_fg(self, fg: Color) -> TextStyle
This style with fg where it named no colour of its own: what the
core stamps on as the text enters the tree, so the shaping caches,
the display list and every binding see a resolved colour.
Sourcepub fn color_or_default(&self) -> Color
pub fn color_or_default(&self) -> Color
The colour this style paints in, falling back to what kui painted before there were themes. For the handful of places that hold a style the core never stamped.
Trait Implementations§
impl Copy for TextStyle
impl StructuralPartialEq for TextStyle
Auto Trait Implementations§
impl Freeze for TextStyle
impl RefUnwindSafe for TextStyle
impl Send for TextStyle
impl Sync for TextStyle
impl Unpin for TextStyle
impl UnsafeUnpin for TextStyle
impl UnwindSafe for TextStyle
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.