Skip to main content

TextSystem

Struct TextSystem 

Source
pub struct TextSystem { /* private fields */ }
Expand description

The platform-independent font database and metrics cache, shared by all windows.

Get it from App::text_system and use it to register fonts with TextSystem::add_fonts, to measure glyphs and to resolve Fonts to FontIds. To shape text for painting, use the WindowTextSystem of the window, which also caches the layouts.

Implementations§

Source§

impl TextSystem

Source

pub fn new(platform_text_system: Arc<dyn PlatformTextSystem>) -> Self

Creates a text system that delegates font work to platform_text_system.

GPUI creates the text system for each application. You don’t need to call this yourself, except in tests that supply their own platform text system.

Source

pub fn all_font_names(&self) -> Vec<String>

Returns the font family names that this text system can resolve.

Use these names as Font::family values. On the web, the list contains only the families registered with TextSystem::add_fonts and the .SystemUIFont alias, because the web has no system fonts.

Source

pub fn add_fonts(&self, fonts: Vec<Cow<'static, [u8]>>) -> Result<()>

Registers font files so that Fonts can resolve to them.

Each entry is the bytes of one font file, such as a .ttf or .otf. Use Cow::Borrowed for bytes compiled into the binary with include_bytes!, and Cow::Owned for bytes loaded at runtime. The family names come from each font’s name table, so pass those names to font or set Font::family to use them.

The web starts with an empty font database, so add the fonts your application uses before you open a window.

§Errors

Returns an error if an entry contains no font face that the platform supports. The parley backend, used on macOS, Windows, Linux, and the web, checks every entry before it registers any, so a failed call leaves the set of fonts unchanged.

§Examples
let bytes = include_bytes!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/../../assets/fonts/lilex/Lilex-Regular.ttf"
));
app.text_system()
    .add_fonts(vec![Cow::Borrowed(bytes.as_slice())])
    .expect("Lilex is a valid font");

See text for how fonts are chosen.

Source

pub fn resolve_font(&self, font: &Font) -> FontId

Resolves a Font to the FontId of the face that will be used to draw it.

Resolution applies the family, weight, style, width, and fallbacks, and the result is cached. Use the returned id with the metric methods on this type, such as TextSystem::ascent.

§Panics

Panics if the platform cannot resolve the font. Pass the family name of a font from TextSystem::all_font_names or one added with TextSystem::add_fonts to avoid this.

Source

pub fn prewarm_fonts(&self, fonts: &[Font])

Resolves each font and loads its platform caches ahead of time.

Loading system fonts can be slow, so call this from a background executor before the first frame that uses the fonts. Fonts that are not prewarmed are loaded when they are first used.

§Panics

Panics if any font cannot be resolved, as TextSystem::resolve_font does.

Source

pub fn bounding_box(&self, font_id: FontId, font_size: Pixels) -> Bounds<Pixels>

Returns the font’s bounding box at font_size in logical pixels.

The bounding box is the smallest rectangle that encloses every glyph in the font when they are all drawn at the same origin.

Source

pub fn typographic_bounds( &self, font_id: FontId, font_size: Pixels, character: char, ) -> Result<Bounds<Pixels>>

Returns the bounding rectangle of the glyph for character at font_size in logical pixels.

§Errors

Returns an error if the font has no glyph for character or the platform cannot read its bounds.

Source

pub fn advance( &self, font_id: FontId, font_size: Pixels, ch: char, ) -> Result<Size<Pixels>>

Returns the advance of ch at font_size: how far the pen moves after drawing it.

The width of the result is the advance, which is the glyph’s horizontal width in the font, not its ink width. Layout uses it to place the next character.

§Errors

Returns an error if the font has no glyph for ch.

Source

pub fn units_per_em(&self, font_id: FontId) -> u32

Returns the number of font units in the font’s em square.

The em square is the grid that font sizes are measured on. Divide a font-unit measurement by this value to get a fraction of the font size.

Source

pub fn ascent(&self, font_id: FontId, font_size: Pixels) -> Pixels

Returns the distance from the baseline up to the top of the font’s tallest glyphs, at font_size.

Source

pub fn descent(&self, font_id: FontId, font_size: Pixels) -> Pixels

Returns the distance from the baseline down to the bottom of the font’s lowest glyphs, at font_size.

The value is positive. It is the distance below the baseline, not a signed coordinate.

Source

pub fn x_height(&self, font_id: FontId, font_size: Pixels) -> Pixels

Returns the height of lowercase x at font_size.

Source

pub fn baseline_offset( &self, font_id: FontId, font_size: Pixels, line_height: Pixels, ) -> Pixels

Returns the distance from the top of a line box of line_height to the baseline.

The ascent and descent are centered in the line box, so extra line_height is split evenly above and below the glyphs. Use this to place text inside a box with a fixed height.

Source

pub fn rasterize_glyph( &self, params: &RenderGlyphParams, ) -> Result<ValidatedRasterizedGlyph>

Rasterizes one glyph to pixels, and checks that the result is well formed.

GPUI calls this when it draws a glyph that is not in the glyph atlas yet. Application code rarely needs it.

§Errors

Returns an error if the platform cannot rasterize the glyph, or if the pixel buffer does not match the size and format it reports. See RasterizedGlyph::validate.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

👎Deprecated since 0.7.7:

replaced by palette::chromatic_adaptation::AdaptIntoUnclamped

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

👎Deprecated since 0.7.7:

replaced by palette::chromatic_adaptation::AdaptIntoUnclamped

Convert the source color to the destination color using the bradford method by default.
Source§

impl<T, C> AdaptIntoUnclamped<T> for C
where T: AdaptFromUnclamped<C>,

Source§

type Scalar = <T as AdaptFromUnclamped<C>>::Scalar

The number type that’s used as the color’s components.
Source§

fn adapt_into_unclamped_with<M>(self) -> T

Adapt a color of type Self into a color of type T, using the custom matrix M. Read more
Source§

fn adapt_into_unclamped(self) -> T
where Bradford: LmsToXyz<Self::Scalar> + XyzToLms<Self::Scalar>,

Adapt a color of type Self into a color of type T, using the Bradford matrix. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T, C> ComponentsInto<C> for T

Source§

fn components_into(self) -> C

Cast this collection of color components into a collection of colors. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more