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) -> Self
pub fn new(size: f32) -> Self
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) -> Self
pub fn underline_color(self, c: Color) -> Self
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) -> Self
pub fn underline_style(self, s: UnderlineStyle) -> Self
An underline of this shape. Turns the underline on.
Sourcepub fn strikethrough(self) -> Self
pub fn strikethrough(self) -> Self
A line through the text.
Sourcepub fn features(self, f: FontFeatures) -> Self
pub fn features(self, f: FontFeatures) -> Self
OpenType features for the shaper; see FontFeatures.
Sourcepub fn family(self, f: FontFamily) -> Self
pub fn family(self, f: FontFamily) -> Self
The face to shape with.
Sourcepub fn line_height(self, lh: f32) -> Self
pub fn line_height(self, lh: f32) -> Self
The line height in logical px, replacing the derived one.
Sourcepub fn ellipsis(self) -> Self
pub fn ellipsis(self) -> Self
Truncate with “…” instead of overflowing: a single line unless
max_lines says otherwise.
Sourcepub fn or_fg(self, fg: Color) -> Self
pub fn or_fg(self, fg: Color) -> Self
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.