pub struct TextEditState {
pub text: String,
pub cursor_pos: usize,
pub selection_anchor: Option<usize>,
pub scroll_offset: f32,
pub scroll_offset_y: f32,
pub cursor_blink_timer: f64,
pub last_click_time: f64,
pub last_click_element: u32,
pub preferred_col: Option<usize>,
pub no_styles_movement: bool,
pub undo_stack: Vec<UndoEntry>,
pub redo_stack: Vec<UndoEntry>,
}Expand description
Persistent text editing state per text input element.
Keyed by element u32 ID in PlyContext::text_edit_states.
Fields§
§text: StringThe current text content.
cursor_pos: usizeCharacter index of the cursor (0 = before first char, text.chars().count() = after last).
selection_anchor: Option<usize>When Some, defines the anchor of a selection range (anchor..cursor_pos or cursor_pos..anchor).
scroll_offset: f32Horizontal scroll offset (pixels) when text overflows the bounding box.
scroll_offset_y: f32Vertical scroll offset (pixels) for multiline text inputs.
cursor_blink_timer: f64Timer for cursor blink animation (seconds).
last_click_time: f64Timestamp of last click (for double-click detection).
last_click_element: u32Element ID of last click (for double-click detection).
preferred_col: Option<usize>Saved visual column for vertical (up/down) navigation. When set, up/down arrows try to return to this column.
no_styles_movement: boolWhen true, cursor movement skips structural style positions (} and empty content markers).
Set from TextInputConfig::no_styles_movement.
undo_stack: Vec<UndoEntry>Undo stack: previous states (newest at end).
redo_stack: Vec<UndoEntry>Redo stack: states undone (newest at end).
Implementations§
Source§impl TextEditState
impl TextEditState
Sourcepub fn selection_range(&self) -> Option<(usize, usize)>
pub fn selection_range(&self) -> Option<(usize, usize)>
Returns the ordered selection range (start, end) if a selection is active.
Sourcepub fn selected_text(&self) -> &str
pub fn selected_text(&self) -> &str
Returns the selected text, or empty string if no selection.
Sourcepub fn delete_selection(&mut self) -> bool
pub fn delete_selection(&mut self) -> bool
Delete the current selection and place cursor at the start. Returns true if a selection was deleted.
Sourcepub fn insert_text(&mut self, s: &str, max_length: Option<usize>)
pub fn insert_text(&mut self, s: &str, max_length: Option<usize>)
Insert text at the current cursor position, replacing any selection. Respects max_length if provided.
Sourcepub fn move_right(&mut self, shift: bool)
pub fn move_right(&mut self, shift: bool)
Move cursor right by one character.
Sourcepub fn move_word_left(&mut self, shift: bool)
pub fn move_word_left(&mut self, shift: bool)
Move cursor to the start of the previous word.
Sourcepub fn move_word_right(&mut self, shift: bool)
pub fn move_word_right(&mut self, shift: bool)
Move cursor to the end of the next word.
Sourcepub fn select_all(&mut self)
pub fn select_all(&mut self)
Select all text.
Sourcepub fn delete_forward(&mut self)
pub fn delete_forward(&mut self)
Delete character after cursor (Delete key).
Sourcepub fn backspace_word(&mut self)
pub fn backspace_word(&mut self)
Delete the word before the cursor (Ctrl+Backspace).
Sourcepub fn delete_word_forward(&mut self)
pub fn delete_word_forward(&mut self)
Delete the word after the cursor (Ctrl+Delete).
Sourcepub fn click_to_cursor(
&mut self,
click_x: f32,
char_x_positions: &[f32],
shift: bool,
)
pub fn click_to_cursor( &mut self, click_x: f32, char_x_positions: &[f32], shift: bool, )
Set cursor position from a click at pixel x within the element.
char_x_positions should be a sorted list of x-positions for each character boundary
(index 0 = left edge of first char, index n = right edge of last char).
Sourcepub fn select_word_at(&mut self, char_pos: usize)
pub fn select_word_at(&mut self, char_pos: usize)
Select the word at the given character position (for double-click).
Sourcepub fn reset_blink(&mut self)
pub fn reset_blink(&mut self)
Reset blink timer so cursor is immediately visible.
Sourcepub fn cursor_visible(&self) -> bool
pub fn cursor_visible(&self) -> bool
Returns whether the cursor should be visible based on blink timer.
Sourcepub fn ensure_cursor_visible(&mut self, cursor_x: f32, visible_width: f32)
pub fn ensure_cursor_visible(&mut self, cursor_x: f32, visible_width: f32)
Update scroll offset to ensure cursor is visible within visible_width.
cursor_x is the pixel x-position of the cursor relative to text start.
Sourcepub fn ensure_cursor_visible_vertical(
&mut self,
cursor_line: usize,
line_height: f32,
visible_height: f32,
)
pub fn ensure_cursor_visible_vertical( &mut self, cursor_line: usize, line_height: f32, visible_height: f32, )
Update vertical scroll offset to keep cursor visible in multiline mode.
cursor_line is the 0-based line index the cursor is on.
line_height is pixel height per line. visible_height is the element height.
Sourcepub fn push_undo(&mut self, kind: UndoActionKind)
pub fn push_undo(&mut self, kind: UndoActionKind)
Push the current state onto the undo stack before an edit.
kind controls grouping: consecutive edits of the same kind are merged
(only InsertChar, Backspace, and Delete are grouped).
Sourcepub fn move_line_home(&mut self, shift: bool)
pub fn move_line_home(&mut self, shift: bool)
Move cursor to the start of the current line (Home in multiline mode).
Sourcepub fn move_line_end(&mut self, shift: bool)
pub fn move_line_end(&mut self, shift: bool)
Move cursor to the end of the current line (End in multiline mode).
Source§impl TextEditState
When the text-styling feature is enabled, these methods operate on TextEditState
using visual (display) cursor positions. The internal text field contains raw markup,
but cursor_pos and selection_anchor always represent visual positions.
impl TextEditState
When the text-styling feature is enabled, these methods operate on TextEditState
using visual (display) cursor positions. The internal text field contains raw markup,
but cursor_pos and selection_anchor always represent visual positions.
Sourcepub fn selected_text_styled(&self) -> String
pub fn selected_text_styled(&self) -> String
Get the selected text in visual space, returning the visible chars.
Sourcepub fn delete_selection_styled(&mut self) -> bool
pub fn delete_selection_styled(&mut self) -> bool
Delete selection in styled mode. Returns true if a selection was deleted.
Sourcepub fn insert_text_styled(&mut self, s: &str, max_length: Option<usize>)
pub fn insert_text_styled(&mut self, s: &str, max_length: Option<usize>)
Insert text at visual cursor position in styled mode, with escaping.
The input s should already be escaped if needed.
Sourcepub fn insert_char_styled(&mut self, ch: char, max_length: Option<usize>)
pub fn insert_char_styled(&mut self, ch: char, max_length: Option<usize>)
Insert a single typed character in styled mode (auto-escapes).
Sourcepub fn backspace_styled(&mut self)
pub fn backspace_styled(&mut self)
Backspace in styled mode: delete visual char before cursor.
Sourcepub fn delete_forward_styled(&mut self)
pub fn delete_forward_styled(&mut self)
Delete forward in styled mode: delete visual char after cursor.
Sourcepub fn backspace_word_styled(&mut self)
pub fn backspace_word_styled(&mut self)
Backspace word in styled mode.
Sourcepub fn delete_word_forward_styled(&mut self)
pub fn delete_word_forward_styled(&mut self)
Delete word forward in styled mode.
Sourcepub fn move_left_styled(&mut self, shift: bool)
pub fn move_left_styled(&mut self, shift: bool)
Move left in styled mode (visual space).
Sourcepub fn move_right_styled(&mut self, shift: bool)
pub fn move_right_styled(&mut self, shift: bool)
Move right in styled mode (visual space).
Sourcepub fn move_word_left_styled(&mut self, shift: bool)
pub fn move_word_left_styled(&mut self, shift: bool)
Move word left in styled mode.
Sourcepub fn move_word_right_styled(&mut self, shift: bool)
pub fn move_word_right_styled(&mut self, shift: bool)
Move word right in styled mode.
Sourcepub fn move_home_styled(&mut self, shift: bool)
pub fn move_home_styled(&mut self, shift: bool)
Move to start in styled mode.
Sourcepub fn move_end_styled(&mut self, shift: bool)
pub fn move_end_styled(&mut self, shift: bool)
Move to end in styled mode.
Sourcepub fn move_up_styled(
&mut self,
shift: bool,
visual_lines: Option<&[VisualLine]>,
)
pub fn move_up_styled( &mut self, shift: bool, visual_lines: Option<&[VisualLine]>, )
Move cursor up one visual line in styled mode.
If visual_lines is provided (multiline with wrapping), uses them for navigation.
Otherwise falls back to simple line-based movement.
Sourcepub fn move_down_styled(
&mut self,
shift: bool,
visual_lines: Option<&[VisualLine]>,
)
pub fn move_down_styled( &mut self, shift: bool, visual_lines: Option<&[VisualLine]>, )
Move cursor down one visual line in styled mode.
Sourcepub fn select_all_styled(&mut self)
pub fn select_all_styled(&mut self)
Select all in styled mode.
Sourcepub fn click_to_cursor_styled(&mut self, click_visual_pos: usize, shift: bool)
pub fn click_to_cursor_styled(&mut self, click_visual_pos: usize, shift: bool)
Click to cursor in styled mode.
click_visual_pos is the visual character position determined from click x.
Sourcepub fn select_word_at_styled(&mut self, visual_pos: usize)
pub fn select_word_at_styled(&mut self, visual_pos: usize)
Select word at visual position in styled mode.
Sourcepub fn cursor_pos_raw(&self) -> usize
pub fn cursor_pos_raw(&self) -> usize
Convert the visual cursor_pos to a raw position for rendering. Enters empty style tags at the cursor boundary.
Sourcepub fn selection_anchor_raw(&self) -> Option<usize>
pub fn selection_anchor_raw(&self) -> Option<usize>
Convert the visual selection_anchor to a raw position for rendering.
Sourcepub fn selection_range_raw(&self) -> Option<(usize, usize)>
pub fn selection_range_raw(&self) -> Option<(usize, usize)>
Get the selection range in raw positions for rendering.
Trait Implementations§
Source§impl Clone for TextEditState
impl Clone for TextEditState
Source§fn clone(&self) -> TextEditState
fn clone(&self) -> TextEditState
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TextEditState
impl Debug for TextEditState
Auto Trait Implementations§
impl Freeze for TextEditState
impl RefUnwindSafe for TextEditState
impl Send for TextEditState
impl Sync for TextEditState
impl Unpin for TextEditState
impl UnsafeUnpin for TextEditState
impl UnwindSafe for TextEditState
Blanket Implementations§
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T, U> RoundInto<U> for Twhere
U: RoundFrom<T>,
impl<T, U> RoundInto<U> for Twhere
U: RoundFrom<T>,
Source§fn round_into(self) -> U
fn round_into(self) -> U
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.