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
impl ShapedTextLayout
Sourcepub fn size(&self, line_height: Pixels) -> Size<Pixels>
pub fn size(&self, line_height: Pixels) -> Size<Pixels>
Returns the size of the whole layout, with each line line_height tall.
Sourcepub fn line_count(&self) -> usize
pub fn line_count(&self) -> usize
Returns the number of visual lines in this layout.
Sourcepub fn ascent(&self) -> Pixels
pub fn ascent(&self) -> Pixels
Returns the distance from the baseline up to the tallest glyphs.
Sourcepub fn descent(&self) -> Pixels
pub fn descent(&self) -> Pixels
Returns the distance from the baseline down to the lowest glyphs.
Sourcepub fn visual_lines(&self) -> &[VisualLine]
pub fn visual_lines(&self) -> &[VisualLine]
Returns the visual lines in paint order.
Sourcepub fn fragments_for_line(&self, line: &VisualLine) -> &[PaintFragment]
pub fn fragments_for_line(&self, line: &VisualLine) -> &[PaintFragment]
Returns the fragments belonging to a visual line.
Sourcepub fn font_size(&self) -> Pixels
pub fn font_size(&self) -> Pixels
Returns the base font size that the text was shaped at, in logical pixels.
Sourcepub fn byte_index_for_pixel_point(
&self,
pixel_point: Point<Pixels>,
line_height: Pixels,
) -> Result<usize, usize>
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.
Sourcepub fn closest_byte_index_for_pixel_point(
&self,
pixel_point: Point<Pixels>,
line_height: Pixels,
) -> Result<usize, usize>
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.
Sourcepub fn closest_caret_for_pixel_point(
&self,
pixel_point: Point<Pixels>,
line_height: Pixels,
) -> Result<CaretPosition, CaretPosition>
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.
Sourcepub fn visual_position_for_byte_index(
&self,
byte_index: usize,
line_height: Pixels,
) -> Option<Point<Pixels>>
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.
Sourcepub fn visual_position_for_caret(
&self,
caret: CaretPosition,
line_height: Pixels,
) -> Option<Point<Pixels>>
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.
Sourcepub fn normalized_caret(&self, caret: CaretPosition) -> CaretPosition
pub fn normalized_caret(&self, caret: CaretPosition) -> CaretPosition
Moves a caret onto a valid cluster boundary, keeping its affinity when it can.
Sourcepub fn adjacent_visual_caret(
&self,
caret: CaretPosition,
direction: VisualDirection,
) -> Option<CaretPosition>
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.
Sourcepub fn logical_cluster_before(
&self,
caret: CaretPosition,
) -> Option<Range<usize>>
pub fn logical_cluster_before( &self, caret: CaretPosition, ) -> Option<Range<usize>>
Returns the byte range of the cluster before caret in logical order.
Sourcepub fn logical_cluster_after(
&self,
caret: CaretPosition,
) -> Option<Range<usize>>
pub fn logical_cluster_after( &self, caret: CaretPosition, ) -> Option<Range<usize>>
Returns the byte range of the cluster after caret in logical order.
Sourcepub fn caret_movement(
&self,
caret: CaretPosition,
movement: TextMovement,
vertical_navigation_x: Option<Pixels>,
) -> CaretMovement
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.
Sourcepub fn selection_movement(
&self,
selection: CaretSelection,
movement: TextMovement,
extend: bool,
vertical_navigation_x: Option<Pixels>,
line_height: Pixels,
) -> CaretSelectionMovement
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.
selectionis the current anchor and caret.movementgives the direction and the unit.extendkeeps the anchor fixed whentrue, and collapses the selection whenfalse.vertical_navigation_xcarries the column across vertical moves.line_heightconverts caret positions into comparable visual coordinates.
Sourcepub fn selection_from_pixel_point(
&self,
pixel_point: Point<Pixels>,
line_height: Pixels,
kind: TextSelectionKind,
) -> Range<usize> ⓘ
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.
Trait Implementations§
Source§impl Debug for ShapedTextLayout
impl Debug for ShapedTextLayout
Auto Trait Implementations§
impl !RefUnwindSafe for ShapedTextLayout
impl !UnwindSafe for ShapedTextLayout
impl Freeze for ShapedTextLayout
impl Send for ShapedTextLayout
impl Sync for ShapedTextLayout
impl Unpin for ShapedTextLayout
impl UnsafeUnpin for ShapedTextLayout
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
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) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
Source§type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
Source§fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T, C> ComponentsInto<C> for T
impl<T, C> ComponentsInto<C> for T
Source§fn components_into(self) -> C
fn components_into(self) -> C
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more