Skip to main content

ShapedTextLayout

Struct ShapedTextLayout 

Source
pub struct ShapedTextLayout {
    pub layout: Arc<LineLayout>,
    pub wrap_width: Option<Pixels>,
}
Expand description

Shaped text with its wrap width, which is how a layout is measured and queried.

Get one from WindowTextSystem::shape_text. ShapedText derefs to it. Its methods convert between pixel positions and UTF-8 byte indices, so you can place a caret or find the character under the mouse. All positions are in logical pixels, relative to the top-left corner of the text.

Fields§

§layout: Arc<LineLayout>

The laid-out document.

§wrap_width: Option<Pixels>

The width that lines wrap at, or None when the text does not wrap.

Implementations§

Source§

impl ShapedTextLayout

Source

pub fn len(&self) -> usize

Returns the length of the text in UTF-8 bytes.

Source

pub fn width(&self) -> Pixels

Returns the width of the widest line, capped at the wrap width.

Source

pub fn size(&self, line_height: Pixels) -> Size<Pixels>

Returns the size of the whole layout, with each line line_height tall.

Source

pub fn line_count(&self) -> usize

Returns the number of visual lines in this layout.

Source

pub fn ascent(&self) -> Pixels

Returns the distance from the baseline up to the tallest glyphs.

Source

pub fn descent(&self) -> Pixels

Returns the distance from the baseline down to the lowest glyphs.

Source

pub fn visual_lines(&self) -> &[VisualLine]

Returns the visual lines in paint order.

Source

pub fn fragments_for_line(&self, line: &VisualLine) -> &[PaintFragment]

Returns the fragments belonging to a visual line.

Source

pub fn font_size(&self) -> Pixels

Returns the base font size that the text was shaped at, in logical pixels.

Source

pub fn byte_index_for_pixel_point( &self, pixel_point: Point<Pixels>, line_height: Pixels, ) -> Result<usize, usize>

The UTF-8 byte index for a point in GPUI layout coordinates.

The backend returns the logical start of the visual cluster under the point. Whitespace is hit like any other cluster. Positions outside the line return the boundary at that visual edge in Err.

See also Self::closest_byte_index_for_pixel_point.

Source

pub fn closest_byte_index_for_pixel_point( &self, pixel_point: Point<Pixels>, line_height: Pixels, ) -> Result<usize, usize>

Returns the UTF-8 byte index of the cluster boundary closest to a point.

Use this for a click or drag that should always land on the nearest character, even when the point is outside the text. For right-to-left clusters, the visual left edge maps to the logical end and the visual right edge maps to the logical start. Zero-width clusters share a stop with an adjacent cluster, and visual order breaks the tie.

§Errors

Returns Err with the index when the point is outside a visual line, and Ok otherwise. Both cases give an index, so use either value.

Source

pub fn closest_caret_for_pixel_point( &self, pixel_point: Point<Pixels>, line_height: Pixels, ) -> Result<CaretPosition, CaretPosition>

Returns the closest backend-native caret for a point in GPUI layout coordinates.

Returns Err with the caret at that edge when the point is outside a visual line, the same way as Self::closest_byte_index_for_pixel_point.

Source

pub fn visual_position_for_byte_index( &self, byte_index: usize, line_height: Pixels, ) -> Option<Point<Pixels>>

Returns the top-left corner of the caret for a UTF-8 byte index, or None if the index is past the end.

The position is on the cluster boundary, at the visual edge that matches the text direction. An index inside an atomic cluster snaps to the start of that cluster. On a soft-wrap boundary, the index places the caret at the start of the following visual line.

Source

pub fn visual_position_for_caret( &self, caret: CaretPosition, line_height: Pixels, ) -> Option<Point<Pixels>>

Returns the top-left corner of the caret for caret, or None if the caret has no position.

Source

pub fn normalized_caret(&self, caret: CaretPosition) -> CaretPosition

Moves a caret onto a valid cluster boundary, keeping its affinity when it can.

Source

pub fn adjacent_visual_caret( &self, caret: CaretPosition, direction: VisualDirection, ) -> Option<CaretPosition>

Returns the next caret stop to the left or right of caret on screen.

Returns None when there is no caret stop in that direction.

Source

pub fn logical_cluster_before( &self, caret: CaretPosition, ) -> Option<Range<usize>>

Returns the byte range of the cluster before caret in logical order.

Source

pub fn logical_cluster_after( &self, caret: CaretPosition, ) -> Option<Range<usize>>

Returns the byte range of the cluster after caret in logical order.

Source

pub fn caret_movement( &self, caret: CaretPosition, movement: TextMovement, vertical_navigation_x: Option<Pixels>, ) -> CaretMovement

Returns where the caret lands after movement, without changing any state.

Pass the vertical_navigation_x from the previous move to keep the caret’s column across consecutive up or down moves. The result carries the new value.

Source

pub fn selection_movement( &self, selection: CaretSelection, movement: TextMovement, extend: bool, vertical_navigation_x: Option<Pixels>, line_height: Pixels, ) -> CaretSelectionMovement

Returns where a selection lands after movement, using visual order.

Without extend, a left or right cluster or word move on a non-empty selection collapses it to the visual edge in that direction. Other moves start from the caret. With extend, the anchor stays fixed and the caret moves.

  • selection is the current anchor and caret.
  • movement gives the direction and the unit.
  • extend keeps the anchor fixed when true, and collapses the selection when false.
  • vertical_navigation_x carries the column across vertical moves.
  • line_height converts caret positions into comparable visual coordinates.
Source

pub fn selection_from_pixel_point( &self, pixel_point: Point<Pixels>, line_height: Pixels, kind: TextSelectionKind, ) -> Range<usize> ⓘ

Selects the word or line at a point in GPUI layout coordinates.

Source

pub fn selection_bounds( &self, byte_range: Range<usize>, line_height: Pixels, ) -> SmallVec<[Bounds<Pixels>; 4]>

Returns rectangles covering all selected clusters in visual order.

Trait Implementations§

Source§

impl Debug for ShapedTextLayout

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for ShapedTextLayout

Source§

type Target = LineLayout

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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