Skip to main content

StyledText

Struct StyledText 

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

Text that is laid out and painted with a different style for each run.

Use StyledText when part of the text needs its own color, weight, font, or decoration. Pass the text to StyledText::new, then add highlights or explicit runs. Text with a single style doesn’t need this type. Pass a &str or SharedString to the element tree directly.

StyledText wraps to the width it is given and paints each run with its own TextRun. Read the laid-out text with StyledText::layout, which returns a TextLayout for hit testing and measurement.

§Examples

StyledText::new("Warning: disk almost full").with_highlights([(
    0..8,
    HighlightStyle {
        color: Some(hsla(0., 0.8, 0.5, 1.)),
        font_weight: Some(FontWeight::BOLD),
        ..Default::default()
    },
)])

See text for an overview of text in GPUI.

Implementations§

Source§

impl StyledText

Source

pub fn new(text: impl Into<SharedString>) -> Self

Creates a styled text element for text, with no styling beyond the inherited text style.

Add styling with StyledText::with_highlights, StyledText::with_default_highlights, StyledText::with_runs, or StyledText::with_font_family_overrides.

Source

pub fn layout(&self) -> &TextLayout

Returns the layout of this element, for mapping between byte indices and pixels.

The layout is filled in while the element is laid out and prepainted. Its query methods panic if called before that, so call them from event handlers or after the frame has been drawn. TextLayout is cheap to clone and shares its state.

Source

pub fn with_default_highlights( self, default_style: &TextStyle, highlights: impl IntoIterator<Item = (Range<usize>, HighlightStyle)>, ) -> Self

Styles the text with default_style, with highlights applied over it.

The runs are computed now, from default_style. Use this when you have a TextStyle in hand. Otherwise use StyledText::with_highlights, which takes the inherited style at layout time.

Each range must lie on character boundaries inside the text. The ranges must be sorted by start and must not overlap.

§Panics

Panics in debug builds if a range is outside the text, or if this element already has highlights from StyledText::with_highlights.

Source

pub fn with_highlights( self, highlights: impl IntoIterator<Item = (Range<usize>, HighlightStyle)>, ) -> Self

Applies highlights over the inherited text style of the element.

Each highlight is a byte range and a HighlightStyle. The inherited style is read from the window when the element is laid out, so a highlight changes only the properties it sets. Text outside every range keeps the inherited style.

The ranges must be sorted by start, must not overlap, and must lie on character boundaries. Debug builds check that each range is inside the text. Release builds don’t check, and unsorted ranges give wrong layouts or panic.

§Examples
StyledText::new("Press Enter to save").with_highlights([(
    6..11,
    HighlightStyle {
        font_weight: Some(FontWeight::BOLD),
        ..Default::default()
    },
)])
Source

pub fn with_font_family_overrides( self, overrides: impl IntoIterator<Item = (Range<usize>, SharedString)>, ) -> Self

Sets the font family for byte ranges of the text.

The family is applied at layout time, on top of the inherited style. An override changes the family of a run only when that run lies entirely inside the override’s range. Runs are split only at highlight boundaries, so to make an override cover part of the text, add a highlight at each edge of the range. Can be combined with with_highlights.

The overrides must be sorted by range start and non-overlapping. Each override range must fall on character boundaries.

Source

pub fn with_runs(self, runs: Vec<TextRun>) -> Self

Sets the runs that style the text. Each run gives its byte length and its TextRun.

The run lengths must add up to the length of the text exactly, and each run must end on a character boundary.

§Panics

Panics if the runs don’t cover the text exactly, or if a run ends inside a character. In debug builds the message includes the text and the run.

Trait Implementations§

Source§

impl Element for StyledText

Source§

type RequestLayoutState = ()

The state that Element::request_layout returns for the later phases. Read more
Source§

type PrepaintState = ()

The state that Element::prepaint returns for Element::paint. Read more
Source§

fn id(&self) -> Option<ElementId>

Returns the element’s identity, or None if it has none. Read more
Source§

fn source_location(&self) -> Option<&'static Location<'static>>

Returns where this element was created, for the inspector and debug output. Read more
Source§

fn request_layout( &mut self, _id: Option<&GlobalElementId>, _inspector_id: Option<&InspectorElementId>, window: &mut Window, cx: &mut App, ) -> (LayoutId, Self::RequestLayoutState)

Requests a layout node from Taffy, and returns it with the state the later phases need. Read more
Source§

fn prepaint( &mut self, _id: Option<&GlobalElementId>, _inspector_id: Option<&InspectorElementId>, bounds: Bounds<Pixels>, _: &mut Self::RequestLayoutState, window: &mut Window, _cx: &mut App, )

Runs once the element’s bounds are known, and returns the state that paint needs. Read more
Source§

fn paint( &mut self, _id: Option<&GlobalElementId>, _inspector_id: Option<&InspectorElementId>, _bounds: Bounds<Pixels>, _: &mut Self::RequestLayoutState, _: &mut Self::PrepaintState, window: &mut Window, cx: &mut App, )

Draws the element. Runs after prepaint, once per frame. Read more
Source§

fn a11y_role(&self) -> Option<Role>

Returns the accessible role for this element, if any. Elements that return None have no accessibility node unless Element::is_a11y_hidden returns true. Read more
Source§

fn is_a11y_hidden(&self) -> bool

Whether assistive technology should ignore this element and its descendants. Read more
Source§

fn write_a11y_info(&self, _node: &mut Node)

Write accessibility properties to the given node. GPUI calls this only when Element::a11y_role returns Some or Element::is_a11y_hidden returns true. Read more
Source§

fn a11y_synthetic_children( &mut self, _prepaint: &mut Self::PrepaintState, _builder: &mut A11ySubtreeBuilder<'_>, )

Add synthetic child nodes to an Element. The element must have an .id(). It must also have a .role() or return true from Element::is_a11y_hidden. Read more
Source§

fn into_any(self) -> AnyElement

Convert this element into a dynamically-typed AnyElement.
Source§

impl IntoElement for StyledText

Source§

type Element = StyledText

The element type that this type converts into. Read more
Source§

fn into_element(self) -> Self::Element

Converts self into an Element. Read more
Source§

fn into_any_element(self) -> AnyElement

Converts self into an AnyElement, with its concrete type erased. Read more

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<E> AnimationExt for E
where E: IntoElement + 'static,

Source§

fn with_animation( self, id: impl Into<ElementId>, animation: Animation, animator: impl Fn(Self, f32) -> Self + 'static, ) -> AnimationElement<Self>
where Self: Sized,

Renders this element with animation, passing animator the eased progress on every frame. Read more
Source§

fn with_animations( self, id: impl Into<ElementId>, animations: Vec<Animation>, animator: impl Fn(Self, usize, f32) -> Self + 'static, ) -> AnimationElement<Self>
where Self: Sized,

Renders this element with a sequence of animations, one after another. Read more
Source§

fn with_spring<T>( self, id: impl Into<ElementId>, animation: SpringAnimation<T>, animator: impl FnOnce(Self, T::Output) -> Self + 'static, ) -> SpringAnimationElement<Self>
where Self: Sized, T: SpringTarget, T::Output: 'static,

Renders this element at the value of a spring, passed to animator. 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> FluentBuilder for T
where T: IntoElement,

Source§

fn map<U>(self, f: impl FnOnce(Self) -> U) -> U
where Self: Sized,

Passes self to f, and returns the result. Use it to continue a chain with a closure.
Source§

fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Self
where Self: Sized,

Calls then with self if condition is true. Otherwise returns self unchanged.
Source§

fn when_else( self, condition: bool, then: impl FnOnce(Self) -> Self, else_fn: impl FnOnce(Self) -> Self, ) -> Self
where Self: Sized,

Calls then with self if condition is true, and else_fn with self otherwise.
Source§

fn when_some<T>( self, option: Option<T>, then: impl FnOnce(Self, T) -> Self, ) -> Self
where Self: Sized,

Calls then with self and the value inside option if the option is Some. Returns self unchanged for None.
Source§

fn when_none<T>( self, option: &Option<T>, then: impl FnOnce(Self) -> Self, ) -> Self
where Self: Sized,

Calls then with self if option is None. The option is taken by reference, so you can still use it afterward.
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