Struct TextInput
pub struct TextInput { /* private fields */ }Implementations§
§impl TextInput
impl TextInput
pub fn note_marks(&self, marks: impl IntoIterator<Item = Rect>)
pub fn note_marks(&self, marks: impl IntoIterator<Item = Rect>)
Add marks (on screen) to what this frame shows painted over the
field’s rows, for a host that paints over them (a code editor’s
diagnostics): a frame where they changed repaints where they were
and are.
pub fn collect_damage_for<T>(&self, owner: &T, regions: &mut Vec<Rect>)where
T: ?Sized,
pub fn collect_damage_for<T>(&self, owner: &T, regions: &mut Vec<Rect>)where
T: ?Sized,
This field’s damage since the frame on screen, for a host that draws
it as part of owner (itself, as a widget in the tree): a scroll is
offered as a copy, the lines and marks that changed repaint where
they were and are, anything else repaints the field.
pub fn mark_shown(&mut self)
pub fn mark_shown(&mut self)
From the host’s mark_drawn: the frame just drawn is on screen.
§impl TextInput
impl TextInput
pub fn new(path: Vec<PathSegment>) -> TextInput
pub fn new(path: Vec<PathSegment>) -> TextInput
Empty path opts the widget out of presence rendering.
pub fn set_align(&mut self, align: TextAlign)
pub fn set_align(&mut self, align: TextAlign)
None disables authorship stamping.
Align the text within the input’s width (a centred title).
pub fn bind_text(&mut self, obj: ExId)
pub fn bind_text(&mut self, obj: ExId)
Show the text object obj, read on every sync. What the user types
stays local until the owner takes it (Self::take_dirty) and
submits it as an action.
pub fn clear_text_binding(&mut self)
pub fn clear_text_binding(&mut self)
Stop showing a text object, keeping what the input shows.
A binding replaces any earlier local mode, so the input stays unbound
until an owner calls Self::bind_text again.
pub fn bound_obj(&self) -> Option<&ExId>
pub fn bound_obj(&self) -> Option<&ExId>
For BlockEditor to match local blocks to doc list elements by object identity.
pub fn with_text_role(self, role: TextRole) -> TextInput
pub fn with_text_role(self, role: TextRole) -> TextInput
Set the field’s text in role (default TextRole::Body).
pub fn with_plain_chrome(self) -> TextInput
pub fn set_text_role(&mut self, role: TextRole)
pub fn set_text_role(&mut self, role: TextRole)
Change the field’s text role; see Self::with_text_role.
pub fn set_plain_chrome(&mut self, plain: bool)
pub fn with_mono(self) -> TextInput
pub fn set_mono(&mut self, mono: bool)
pub fn is_mono(&self) -> bool
pub fn with_kind(self, kind: TextInputKind) -> TextInput
pub fn with_kind(self, kind: TextInputKind) -> TextInput
Declare the exceptional structured intent of a field. Natural-language prose is already the default and never needs an annotation.
pub fn set_kind(&mut self, kind: TextInputKind)
pub fn kind(&self) -> TextInputKind
pub fn with_spellcheck(self, on: bool) -> TextInput
pub fn with_spellcheck(self, on: bool) -> TextInput
Enable or disable spelling assistance for this field. It defaults on for ordinary text and is automatically suppressed for secret and code-like fields.
pub fn spellcheck_enabled(&self) -> bool
pub fn with_autocorrect(self, on: bool) -> TextInput
pub fn with_autocorrect(self, on: bool) -> TextInput
Override automatic correction for this field. Without an override the user-wide Spell checker setting applies.
pub fn set_autocorrect(&mut self, on: Option<bool>)
pub fn set_autocorrect(&mut self, on: Option<bool>)
Self::with_autocorrect on a live field; None follows the
user-wide setting again.
pub fn set_deferred_autocorrection(&mut self, on: bool)
pub fn set_deferred_autocorrection(&mut self, on: bool)
Leave the correction a typed word boundary makes pending instead of
making it in the same keystroke; the host applies it with
Self::apply_pending_autocorrection once the boundary is written,
so the boundary and the correction are two undo steps.
pub fn has_pending_autocorrection(&self) -> bool
pub fn has_pending_autocorrection(&self) -> bool
Whether a typed word boundary left a correction to apply.
pub fn apply_pending_autocorrection(&mut self) -> bool
pub fn apply_pending_autocorrection(&mut self) -> bool
Make the correction the last typed word boundary left pending, while the word and the
boundary after it are still as typed and the caret right after them. Backspace right after
reverts it, as for an immediate correction. false when there was nothing to make.
pub fn replace_range(
&mut self,
range: Range<usize>,
expected: &str,
replacement: &str,
) -> bool
pub fn replace_range( &mut self, range: Range<usize>, expected: &str, replacement: &str, ) -> bool
Replace range, which must still hold expected, with replacement
as exactly one undo step: the typing before it is closed off as a
step of its own, and typing after it starts a new one. Leaves the
replacement selected.
Refuses, changing nothing, when the range no longer holds expected
(the text moved while an asynchronous action ran, or a collaborator
edited it), when the field is read-only or disabled, or while an
input method composition is open.
pub fn apply_text_action_result(&mut self, result: &TextActionResult) -> bool
pub fn apply_text_action_result(&mut self, result: &TextActionResult) -> bool
Write back what a text action made of the text it was handed
(Self::take_text_action_request), as Self::replace_range does.
pub fn autocorrect_enabled(&self) -> bool
pub fn with_spell_language(self, language: &str) -> TextInput
pub fn with_spell_language(self, language: &str) -> TextInput
Select a language dictionary, accepting both en-US and en_US style
tags. If that Hunspell dictionary is unavailable, non-English checking
quietly disables itself; English retains the embedded fallback.
pub fn set_spell_language(&mut self, language: &str)
pub fn spell_language(&self) -> &str
pub fn with_text_action(self, id: &str, label: &str) -> TextInput
pub fn with_text_action(self, id: &str, label: &str) -> TextInput
Add a host-owned action to the selection context menu. Activating it
produces a request drained by take_text_action_request; the widget
never blocks on the action itself.
pub fn add_text_action(&mut self, id: &str, label: &str)
pub fn take_text_action_request(&mut self) -> Option<TextActionRequest>
pub fn with_font_family(self, family: FontChoice) -> TextInput
pub fn with_font_family(self, family: FontChoice) -> TextInput
Wins over the mono flag.
pub fn set_font_family(&mut self, family: Option<FontChoice>)
pub fn font_family(&self) -> Option<&FontChoice>
pub fn from_state(state: &LocalState<String>) -> TextInput
pub fn from_state(state: &LocalState<String>) -> TextInput
Create a true two-way binding to typed process-local text state.
User edits update state; mutations through any clone of state
update this input on the next synchronization pass. Several inputs and
read-only Text views can therefore share one value
without initial-value snapshots, callbacks, or app-owned fan-out.
Selecting a document or external-buffer binding later replaces this
process-local binding explicitly.
pub fn with_change(self, change: Option<(String, String)>) -> TextInput
pub fn with_change(self, change: Option<(String, String)>) -> TextInput
Someone else (identity, by their presence) changed what the field holds and the person
has not seen it: the field is tinted in their colour, and hovering it says note (who
changed it, and what it held before). None once it is seen.
pub fn with_presence_path(self, path: Vec<PathSegment>) -> TextInput
pub fn with_presence_path(self, path: Vec<PathSegment>) -> TextInput
Key the field’s presence by path: collaborators editing the field at the same path
see each other’s carets and selections in it.
pub fn with_char_filter(self, filter: fn(char) -> bool) -> TextInput
pub fn with_char_filter(self, filter: fn(char) -> bool) -> TextInput
Admit only characters accepted by filter on every insertion path. Deliberately a character
predicate, not a validator for the whole value: callers still own domain parsing and error
reporting when the field is submitted.
pub fn with_initial_value(self, s: &str) -> TextInput
pub fn with_initial_value(self, s: &str) -> TextInput
Cursor parks at the end; dirty stays false (programmatic seed).
pub fn set_text(&mut self, s: &str)
pub fn value(&self) -> &str
pub fn is_composing(&self) -> bool
pub fn is_composing(&self) -> bool
Whether an IME candidate is displayed but not yet committed as text. Composite editors must leave candidate-selection keys to the IME.
pub fn on_change(self, callback: impl FnMut(&str) + 'static) -> TextInput
pub fn on_change(self, callback: impl FnMut(&str) + 'static) -> TextInput
Register an app-local callback for committed user edits. Keyboard input, paste,
accessibility edits and committed IME text notify once with the complete new value; IME
preedit, cursor and selection changes, Self::set_text and CRDT synchronization do not.
It runs beside a bound action (Self::on_action), in either order.
pub fn on_action(self, binding: ActionBinding<String>) -> TextInput
pub fn on_action(self, binding: ActionBinding<String>) -> TextInput
Route committed keyboard, paste, IME, and accessibility edits through an exported action with the complete current string as input.
pub fn insert_at_cursor(&mut self, s: &str)
pub fn insert_at_cursor(&mut self, s: &str)
Insert s at the caret as the user’s edit.
pub fn cursor_pos(&self) -> usize
pub fn caret_position(&self) -> TextPosition
pub fn caret_position(&self) -> TextPosition
The caret’s document offset and visual side at an ambiguous boundary.
pub fn set_cursor_pos(&mut self, pos: usize)
pub fn set_cursor_pos(&mut self, pos: usize)
Does not count as a user edit (dirty stays false).
pub fn set_caret_position(&mut self, position: TextPosition)
pub fn set_caret_position(&mut self, position: TextPosition)
Seat the caret at an exact shaped position without counting as an edit.
pub fn selection_range_public(&self) -> Option<(usize, usize)>
pub fn selection_anchor_focus_public(&self) -> Option<(usize, usize)>
pub fn selection_anchor_focus_public(&self) -> Option<(usize, usize)>
The live selection endpoints in anchor/focus order for accessibility
bridges. Unlike Self::selection_range_public, this preserves the
direction in which the user extended the selection.
pub fn selection_anchor_focus_or_caret(&self) -> (usize, usize)
pub fn selection_anchor_focus_or_caret(&self) -> (usize, usize)
The selection a host mirroring this field should paint after a pointer event: the anchor and caret, collapsed to the caret when nothing is selected. A click that collapses a selection has to reach the host too, or it keeps painting the selection it used to show.
pub fn char_x_positions(&self) -> &[f64]
pub fn char_x_positions(&self) -> &[f64]
len() is text.len() + 1; empty until the first draw lands.
pub fn scroll_x(&self) -> f64
pub fn set_preserve_unfocused_scroll(&mut self, preserve: bool)
pub fn set_preserve_unfocused_scroll(&mut self, preserve: bool)
Retain bounded multiline scroll when used as an inert, unfocused source view. Does not enable focus, caret painting, input handling or document binding.
pub fn body_line_height(&self) -> f64
pub fn gutter_width(&self) -> f64
pub fn byte_at_point(&self, point: Point) -> usize
pub fn byte_at_point(&self, point: Point) -> usize
Requires a prior draw to have built the metrics.
pub fn position_at_point(&self, point: Point) -> TextPosition
pub fn position_at_point(&self, point: Point) -> TextPosition
Exact caret position under a point, including mixed-BiDi affinity.
pub fn is_plain(&self) -> bool
pub fn text_padding_x(&self, theme: &Theme) -> f64
pub fn text_inset_x(&self, theme: &Theme) -> f64
pub fn text_inset_x(&self, theme: &Theme) -> f64
Where the field’s text starts inside its rect: the multiline inset (and code gutter) of a wrapping field, the horizontal padding of a single-line one.
pub fn text_band(&self) -> (f64, f64)
pub fn text_band(&self) -> (f64, f64)
Single source of truth for both the local and any peer caret, so they line up.
pub fn caret_rect(&self, theme: &Theme, byte: usize) -> Rect
pub fn caret_rect(&self, theme: &Theme, byte: usize) -> Rect
Peer carets render through this too, so a remote caret is pixel-identical, only recoloured.
pub fn caret_rect_at(&self, theme: &Theme, position: TextPosition) -> Rect
pub fn caret_rect_at(&self, theme: &Theme, position: TextPosition) -> Rect
Caret geometry for an exact byte-and-affinity position.
pub fn selection_rect(&self, theme: &Theme, start: usize, end: usize) -> Rect
pub fn selection_rect(&self, theme: &Theme, start: usize, end: usize) -> Rect
Single-line only; multiline callers use selection_rects.
pub fn selection_rects(
&self,
theme: &Theme,
start: usize,
end: usize,
) -> Vec<Rect>
pub fn selection_rects( &self, theme: &Theme, start: usize, end: usize, ) -> Vec<Rect>
One rect per visual row the range spans.
pub fn content_height(&self) -> f64
pub fn content_height(&self) -> f64
Falls back to one row when nothing has been laid out yet.
pub fn take_dirty(&mut self) -> Option<String>
pub fn take_dirty(&mut self) -> Option<String>
Some(text) if a user-initiated edit landed since the last call.
pub fn apply_layout_external(&mut self, rect: Rect)
pub fn apply_layout_external(&mut self, rect: Rect)
Places the input without a layout tree — only safe on local-mode
TextInputs with no presence path or permission scope.
pub fn with_id(self, id: &str) -> TextInput
pub fn with_external_buffer(self, buffer: Arc<Mutex<String>>) -> TextInput
pub fn with_external_buffer(self, buffer: Arc<Mutex<String>>) -> TextInput
Mirror edits into caller-owned process-local memory without creating a
CRDT object. Intended for passwords/PINs; use with Self::local.
Publishing consumes the edit notification (take_dirty), just as a
document binding does; an idle sync never republishes a consumed edit.
pub fn with_secret(self, on: bool) -> TextInput
pub fn set_secret(&mut self, on: bool)
pub fn is_secret(&self) -> bool
pub fn with_reveal(self, on: bool) -> TextInput
pub fn with_reveal(self, on: bool) -> TextInput
Only meaningful together with with_secret. Secret fields start
hidden; a single-line one also offers its own show/hide control.
pub fn set_reveal(&mut self, on: bool)
pub fn toggle_reveal(&mut self)
pub fn toggle_reveal(&mut self)
No-op on a non-secret field.
pub fn is_revealed(&self) -> bool
pub fn has_reveal_control(&self) -> bool
pub fn has_reveal_control(&self) -> bool
Whether this field paints and offers the trailing show/hide control.
pub fn reveal_control_rect(&self) -> Option<Rect>
pub fn reveal_control_rect(&self) -> Option<Rect>
Where the show/hide control sits, or None without one.
pub fn multiline(self, on: bool) -> TextInput
pub fn set_multiline(&mut self, on: bool)
pub fn is_multiline(&self) -> bool
pub fn with_gutter(self, on: bool) -> TextInput
pub fn set_gutter(&mut self, on: bool)
pub fn with_current_line_highlight(self, on: bool) -> TextInput
pub fn set_current_line_highlight(&mut self, on: bool)
pub fn with_highlighter(self, h: Box<dyn Highlighter>) -> TextInput
pub fn set_highlighter(&mut self, h: Option<Box<dyn Highlighter>>)
pub fn with_tab_width(self, n: usize) -> TextInput
pub fn with_tab_width(self, n: usize) -> TextInput
0 = literal \t. Shift+Tab outdents by the same width.
pub fn set_tab_width(&mut self, n: usize)
pub fn with_enter_submits(self, on: bool) -> TextInput
pub fn with_enter_submits(self, on: bool) -> TextInput
Read the signal with take_submit.
pub fn with_entry(self, on: bool) -> TextInput
pub fn with_entry(self, on: bool) -> TextInput
The entry at the end of a list: Enter or leaving the field with text commits what was typed (its submit) and clears it; Escape, or leaving it with nothing typed, leaves nothing. The field is its own draft: nothing it holds exists until it is committed.
pub fn take_submit(&mut self) -> bool
pub fn take_submit(&mut self) -> bool
true once per submitting Enter; clears on read.
pub fn disabled(self, on: bool) -> TextInput
pub fn set_disabled(&mut self, on: bool)
pub fn set_disabled(&mut self, on: bool)
Drops any in-progress drag so the widget doesn’t hold pointer capture while inert.
pub fn is_disabled(&self) -> bool
pub fn with_placeholder(self, hint: impl Into<LabelKey>) -> TextInput
pub fn wants_focus(self) -> TextInput
pub fn wants_focus(self) -> TextInput
Ask for the keyboard as soon as this field is in the tree: the entry a command just opened is where the person types next, and they should not have to point at it. Asked once, when the window next lays out.
pub fn with_accessible_name(self, name: impl Into<String>) -> TextInput
pub fn with_accessible_name(self, name: impl Into<String>) -> TextInput
Set the stable label announced for this field by assistive technology. Placeholder text is intentionally not used as the label because it disappears after entry and often describes format rather than purpose.
pub fn set_accessible_name(&mut self, name: impl Into<String>)
pub fn set_accessible_name(&mut self, name: impl Into<String>)
pub fn set_placeholder(&mut self, hint: &str)
pub fn placeholder(&self) -> &str
pub fn shows_placeholder(&self) -> bool
pub fn control_size(self, size: ControlSize) -> TextInput
pub fn control_size(self, size: ControlSize) -> TextInput
How tall a single-line field is: the height of a button of the same size, so fields and buttons share a row. Regular (32) by default.
pub fn set_control_size(&mut self, size: ControlSize)
pub fn set_control_size(&mut self, size: ControlSize)
Change the field’s ControlSize; see Self::control_size.
pub fn with_min_lines(self, lines: usize) -> TextInput
pub fn with_min_lines(self, lines: usize) -> TextInput
A wrapping field at least lines lines tall, with the same text
inset as a single-line field and never shorter than one.
pub fn on_submit(self, callback: impl FnMut(&str) + 'static) -> TextInput
pub fn on_submit(self, callback: impl FnMut(&str) + 'static) -> TextInput
Run callback with the text when the person presses Enter: the
field’s commit for a tree-owned field nobody polls. Enter submits
(Shift+Enter still breaks a wrapping field’s line).
pub fn set_on_submit(&mut self, callback: Option<Box<dyn FnMut(&str)>>)
pub fn set_on_submit(&mut self, callback: Option<Box<dyn FnMut(&str)>>)
Run callback on a submitting Enter (Shift+Enter still breaks a wrapping field’s
line), or, given none, let Enter break the line again.
pub fn on_submit_action(self, binding: ActionBinding<String>) -> TextInput
pub fn on_submit_action(self, binding: ActionBinding<String>) -> TextInput
Route Enter through an exported resource action with the text as its
input; see Self::on_submit.
Enter submits the field’s action. A press whose submission the host has not collected yet is
replaced by the next: two Enters delivered before the next frame submit once, so a repeated
press cannot advance a wizard twice.
pub fn on_submit_view(self, callback: impl FnMut(&str) + 'static) -> TextInput
pub fn on_submit_view(self, callback: impl FnMut(&str) + 'static) -> TextInput
Run callback with the text on a submitting Enter, the field as control
tilo.control:<id>, publishing the submit as its view action submit: a person’s Enter, a
screen reader, a script and an agent submit through the same action.
pub fn on_change_view(self, callback: impl FnMut(&str) + 'static) -> TextInput
pub fn on_change_view(self, callback: impl FnMut(&str) + 'static) -> TextInput
Run callback with the text of every committed edit, the field, as
control tilo.control:<id>, publishing the edit as its view action
change: typing, pasting, an IME commit, a screen reader’s edit, a
script’s and an agent’s all arrive through the same action. The
control’s latest text is what it reports, so a burst of edits the host
has not collected yet reports once, with the text it now holds.
pub fn set_on_change_view(&mut self, callback: impl FnMut(&str) + 'static)
pub fn set_on_change_view(&mut self, callback: impl FnMut(&str) + 'static)
Self::on_change_view on a field already built.
A trailing clear button inside the field while it holds text.
pub fn with_trailing_accessory(
self,
icon: Icon,
name: &str,
action: AccessoryAction,
) -> TextInput
pub fn with_trailing_accessory( self, icon: Icon, name: &str, action: AccessoryAction, ) -> TextInput
A trailing icon button inside the field, named name for assistive
technology (a reveal toggle, a picker).
pub fn accessory_pressed(&self) -> Option<bool>
pub fn accessory_pressed(&self) -> Option<bool>
Whether the trailing accessory is a toggle that is on.
pub fn set_accessory_pressed(&mut self, on: bool)
pub fn set_accessory_pressed(&mut self, on: bool)
Turn a toggle accessory on or off (the host syncing from its model). No-op for any other accessory.
pub fn with_content_size(self, px: f32) -> TextInput
pub fn with_content_size(self, px: f32) -> TextInput
Edit text that belongs to a document in place, at the document’s own
px size (a note on a zoomed page): the text scale does not grow it,
the document’s zoom does.
pub fn set_content_size(&mut self, px: Option<f32>)
pub fn set_content_size(&mut self, px: Option<f32>)
Change or clear the document-space size of Self::with_content_size.
pub fn with_span_highlighter(
self,
highlighter: impl Fn(&str, &Theme) -> Vec<(Range<usize>, AlphaColor<Srgb>)> + 'static,
) -> TextInput
pub fn with_span_highlighter( self, highlighter: impl Fn(&str, &Theme) -> Vec<(Range<usize>, AlphaColor<Srgb>)> + 'static, ) -> TextInput
Colour spans of a single-line field’s text (references in a
formula); see SpanHighlighter. A wrapping field takes a
Highlighter instead.
pub fn with_mistakes(
self,
marker: impl Fn(&str) -> Vec<Range<usize>> + 'static,
) -> TextInput
pub fn with_mistakes( self, marker: impl Fn(&str) -> Vec<Range<usize>> + 'static, ) -> TextInput
Underline what marker finds wrong in the text, as a misspelling is, for entries checked
against something other than a dictionary (the words of a recovery key). The marker sees the
text as drawn, so marks never lag an edit; it should leave the word still being typed alone.
pub fn with_read_only(self, read_only: bool) -> TextInput
pub fn with_read_only(self, read_only: bool) -> TextInput
Show text the person can select and copy but not change: a message body, a log. The field keeps the keyboard (arrows, Home, End, select all, copy) and the pointer (drag, double click), but typing, pasting and cutting do nothing, and keys it does not use reach the app. Addresses in the text are links, underlined, that open on a click.
pub fn set_read_only(&mut self, read_only: bool)
pub fn is_read_only(&self) -> bool
pub fn with_runs(self, runs: Vec<RichSpan>) -> TextInput
pub fn with_runs(self, runs: Vec<RichSpan>) -> TextInput
Show runs as the text, each in its own weight, slant, size and ink:
a message body, a help page. A caller that edits the text afterwards
loses the styling; use it with Self::with_read_only.
pub fn set_runs(&mut self, runs: Vec<RichSpan>)
pub fn place_wrapped(
&mut self,
rect: Rect,
tr: &mut TextRenderer,
theme: &Theme,
) -> f64
pub fn place_wrapped( &mut self, rect: Rect, tr: &mut TextRenderer, theme: &Theme, ) -> f64
Lay a wrapping field out in rect’s width at rect’s top-left
without a layout tree, for a host that paints it itself; the rect it
takes is as tall as its text, and that height is returned.
pub fn with_links(self, links: Vec<(Range<usize>, String)>) -> TextInput
pub fn with_links(self, links: Vec<(Range<usize>, String)>) -> TextInput
Targets for byte ranges of a read-only text whose words are not their own address (an HTML mail’s “click here”). These win over the addresses found in the prose.
pub fn set_links(&mut self, links: Vec<(Range<usize>, String)>)
pub fn interaction(&self) -> InteractionEnvironment
pub fn interaction(&self) -> InteractionEnvironment
What inputs the host has: a coarse one makes the field a finger’s target tall.
pub fn own_width_in(theme: &Theme) -> f32
pub fn own_width_in(theme: &Theme) -> f32
The width a field stands at where nothing else sets it: the theme’s
field_min_width, grown with the text it holds.
pub fn is_dragging(&self) -> bool
pub fn is_dragging(&self) -> bool
For BlockEditor’s cross-block drag coordinator.
pub fn handle_chrome_pointer(
&mut self,
event: &WindowEvent,
scale_factor: f64,
modifiers: Modifiers,
) -> bool
pub fn handle_chrome_pointer( &mut self, event: &WindowEvent, scale_factor: f64, modifiers: Modifiers, ) -> bool
Handle a pointer event for a chrome surface that owns this field outside the retained widget tree: the chrome lays the field out itself but still wants the toolkit’s caret placement, drag selection, double-click words and right-click menu. Returns whether the field took the event.
The caller keeps its own text and selection; read the selection back
with Self::selection_anchor_focus_or_caret after a true answer.
pub fn set_selection(&mut self, anchor: usize, cursor: usize)
pub fn set_selection(&mut self, anchor: usize, cursor: usize)
For BlockEditor’s cross-block drag coordinator, painting a selection
band on a block being dragged through without it being the click
target. anchor == cursor clears.
pub fn select_all(&mut self)
pub fn select_all(&mut self)
For wrappers with “focus selects the value” semantics, e.g. NumberInput.
pub fn overhang(&self) -> Option<Rect>
pub fn overhang(&self) -> Option<Rect>
What the last draw painted outside the field’s rect: while a correction is offered, its chip, which floats above or below the field. A host proving its own damage repaints this too when the field changes.
Open the native text menu at a logical-pixel position. Hosts use this for keyboard menu keys, accessibility actions, and deterministic UI previews; pointer right-clicks route here automatically.
§impl TextInput
impl TextInput
pub fn completion(&self) -> TextCompletion
pub fn completion(&self) -> TextCompletion
What this field offers inline: emoji from the toolkit’s catalogue and mentions from the workspace’s roster, both by default for prose. A secret or numeric field offers neither whatever its owner asks, so nothing can be inserted into it and nothing echoes it.
pub fn with_completion(self, completion: TextCompletion) -> TextInput
pub fn with_completion(self, completion: TextCompletion) -> TextInput
Set what the field offers inline. Mark a search field, a code field,
a URL or a terminal plain here: : and @ are syntax there, so
completion is wrong rather than unavailable.
pub fn set_completion(&mut self, completion: TextCompletion)
pub fn set_completion(&mut self, completion: TextCompletion)
Self::with_completion on a live field.
pub fn with_mention_candidates(
self,
candidates: Vec<MentionCandidate>,
) -> TextInput
pub fn with_mention_candidates( self, candidates: Vec<MentionCandidate>, ) -> TextInput
People the app knows of that the workspace’s presence does not (someone
who wrote in a channel and has since left): offered after the
roster for @ completion.
pub fn set_mention_candidates(&mut self, candidates: Vec<MentionCandidate>)
pub fn set_mention_candidates(&mut self, candidates: Vec<MentionCandidate>)
Self::with_mention_candidates on a live field.
pub fn is_completion_open(&self) -> bool
pub fn is_completion_open(&self) -> bool
Whether a :emoji: or @mention candidate list is open beside the
caret.
pub fn set_completion_sources(&mut self, sources: Vec<CompletionSource>)
pub fn set_completion_sources(&mut self, sources: Vec<CompletionSource>)
Complete from sources, one per trigger, as the system gives them
(the workspace’s resources for #, the actions available here for
/): they take the place of the built-in : and @ for their
triggers, and add the rest. They are given once; every keystroke
filters them here.
pub fn set_on_completion_create(
&mut self,
create: impl FnMut(char, &str) + 'static,
)
pub fn set_on_completion_create( &mut self, create: impl FnMut(char, &str) + 'static, )
Run create with the trigger and the typed name when the person picks
“Create …” in a drawer whose source allows it.
pub fn set_on_command(&mut self, start: impl FnMut(&Candidate) + 'static)
pub fn set_on_command(&mut self, start: impl FnMut(&Candidate) + 'static)
Run start with the command a person picked from a / drawer: its
owner turns the field into the command’s chip and parameter fields.
pub fn pending_token(&self) -> Option<Range<usize>>
pub fn pending_token(&self) -> Option<Range<usize>>
The token the open drawer answers, as typed (@mi), for tests and the
pending tint.
Trait Implementations§
Source§impl ActionControl<String> for TextInput
impl ActionControl<String> for TextInput
Source§fn bind_action(self, binding: ActionBinding<String>) -> Self
fn bind_action(self, binding: ActionBinding<String>) -> Self
binding with the control’s committed value.§impl ActionControls for TextInput
impl ActionControls for TextInput
§fn install_control_custody(
&mut self,
domain: &ControlDomain,
attachment: CustodyAttachment,
)
fn install_control_custody( &mut self, domain: &ControlDomain, attachment: CustodyAttachment, )
§fn take_control_invocation(&mut self) -> Option<ControlInvocation>
fn take_control_invocation(&mut self) -> Option<ControlInvocation>
§fn control_action_bindings(&self) -> Vec<ControlBindingMetadata>
fn control_action_bindings(&self) -> Vec<ControlBindingMetadata>
metadata
to its descendants’ inventory.§fn refresh_control_action_availability(
&mut self,
allowed: &HashSet<ActionAddress>,
)
fn refresh_control_action_availability( &mut self, allowed: &HashSet<ActionAddress>, )
§fn take_attributed_control_invocation(
&mut self,
) -> Option<(ControlInvocation, Option<InvocationId>)>
fn take_attributed_control_invocation( &mut self, ) -> Option<(ControlInvocation, Option<InvocationId>)>
Self::take_control_invocation, with the effect invocation the
intent continues when an effect’s handler or completion queued it:
the host applies it for that invocation’s invoker.§fn on_control_invocation_result(
&mut self,
address: &ActionAddress,
result: &Result<ResourceOperationStart, DoorError>,
)
fn on_control_invocation_result( &mut self, address: &ActionAddress, result: &Result<ResourceOperationStart, DoorError>, )
Accepted means queued, not completed; confirmation remains an error
while the host offers its normal confirmation UI. This notification
grants no document authority and must not retry the invocation itself.§fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>
fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>
§fn has_action_control_bindings(&self) -> bool
fn has_action_control_bindings(&self) -> bool
control_action_bindings
contains an Action, including the same modal child exposure,
regardless of current availability.§fn has_pending_control_invocation(&self) -> bool
fn has_pending_control_invocation(&self) -> bool
§impl Described for TextInput
impl Described for TextInput
§fn set_props(&mut self, props: TextInputProps) -> bool
fn set_props(&mut self, props: TextInputProps) -> bool
The text it edits, what it says and how it behaves change where the field stands: it keeps the keyboard, the caret and whatever is being composed into it.
type Props = TextInputProps
§fn from_props(key: &str, props: TextInputProps) -> TextInput
fn from_props(key: &str, props: TextInputProps) -> TextInput
props, with key its stable id.§fn slot_views(&mut self, slot: &str) -> Option<&mut dyn SlotViews>
fn slot_views(&mut self, slot: &str) -> Option<&mut dyn SlotViews>
slot, to change by key in place: None when a change of what
the slot holds builds the widget again.§fn part_views(
&mut self,
slot: &str,
key: &str,
of: &str,
) -> Option<&mut dyn SlotViews>
fn part_views( &mut self, slot: &str, key: &str, of: &str, ) -> Option<&mut dyn SlotViews>
slot holds for the part key — a part being a component the slot
takes, whose props the widget reads — in that part’s own view slot of, to change them
by key where they stand. None when a change inside a part builds the widget again.Source§impl EditsText for TextInput
impl EditsText for TextInput
Source§fn show_text(&mut self, obj: ObjId)
fn show_text(&mut self, obj: ObjId)
obj, reading it on every sync, and keep edits
out of the document.Source§fn take_edited(&mut self) -> Option<String>
fn take_edited(&mut self) -> Option<String>
Source§fn reset_text(&mut self, text: &str)
fn reset_text(&mut self, text: &str)
text, which is not a user edit.fn shown_text(&self) -> &str
§impl FormControl for TextInput
impl FormControl for TextInput
§fn with_form_accessible_name(self, name: &str) -> TextInput
fn with_form_accessible_name(self, name: &str) -> TextInput
§impl PublishesPresence for TextInput
impl PublishesPresence for TextInput
§fn presence_key(&self) -> Option<PresenceKey>
fn presence_key(&self) -> Option<PresenceKey>
The widget’s path, so peers editing the same field share carets.
§fn presence_payload(&self) -> Option<(PresenceKey, PresencePayload)>
fn presence_payload(&self) -> Option<(PresenceKey, PresencePayload)>
The caret, or the selection when one is extended, while focused. A secret field publishes nothing.
The selected text while focused. A field is no resource item, so it names no place; a secret field shares nothing.
§fn composing_payload(&self) -> Option<(PresenceKey, PresencePayload)>
fn composing_payload(&self) -> Option<(PresenceKey, PresencePayload)>
§impl PublishesResources for TextInput
impl PublishesResources for TextInput
§fn resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
fn resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
doc lets
a provider enumerate resources living in the document.§fn caller_view_resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
fn caller_view_resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
§fn action_directory_resource_page(
&self,
_doc: &AutoCommit,
_cursor: &[u8],
_max_results: usize,
) -> Option<ActionDirectoryResourcePage>
fn action_directory_resource_page( &self, _doc: &AutoCommit, _cursor: &[u8], _max_results: usize, ) -> Option<ActionDirectoryResourcePage>
max_results is a hard ceiling; a live
provider must return a non-empty opaque cursor when it has a tail.
None is the default: an unbounded contextual Self::resources
snapshot must not be reached from a remote query or revision.§fn action_directory_revision(&self, _doc: &AutoCommit) -> Option<String>
fn action_directory_revision(&self, _doc: &AutoCommit) -> Option<String>
None when this
widget has no independently mutable remote directory state.§fn action_directory_invocation_domain(
&self,
_doc: &AutoCommit,
) -> ActionDirectoryInvocationDomain
fn action_directory_invocation_domain( &self, _doc: &AutoCommit, ) -> ActionDirectoryInvocationDomain
§fn resource(&self, _doc: &AutoCommit, _id: &str) -> Option<ResourceSpec>
fn resource(&self, _doc: &AutoCommit, _id: &str) -> Option<ResourceSpec>
§fn resource_pending(&self, _id: &str) -> bool
fn resource_pending(&self, _id: &str) -> bool
id, which resolves to nothing now, may resolve once what
the widget is reading off the UI thread lands (a row of a list not
read yet). A caller resolving it is answered then, never kept waiting
on a blocking read nor told it is unknown before the read ends.§fn resources_for(
&self,
participant: Option<&ParticipantId>,
doc: &AutoCommit,
) -> Vec<ResourceSpec>
fn resources_for( &self, participant: Option<&ParticipantId>, doc: &AutoCommit, ) -> Vec<ResourceSpec>
None is this widget’s own view.
Multi-participant widgets override this and Self::resource_for,
and never put one participant’s selection into another’s tree.Self::resources_for as a SharedResource forest whose
unchanged subtrees are the very nodes of the last one, so consumers
skip what they have seen. None, the default, has callers
wrap Self::resources_for. An answer must equal it exactly once
materialised (SharedResource::to_resource).§fn resource_for(
&self,
participant: Option<&ParticipantId>,
doc: &AutoCommit,
id: &str,
) -> Option<ResourceSpec>
fn resource_for( &self, participant: Option<&ParticipantId>, doc: &AutoCommit, id: &str, ) -> Option<ResourceSpec>
Self::resource in participant’s tree.§fn action_directory_visibility(
&self,
_doc: &AutoCommit,
_resource_id: &str,
) -> Option<ActionAddress>
fn action_directory_visibility( &self, _doc: &AutoCommit, _resource_id: &str, ) -> Option<ActionAddress>
None means its label and hierarchy are
not remotely discoverable unless the resource itself has a safe view
action.§fn document_action_result(
&self,
_doc: &AutoCommit,
_address: &ActionAddress,
_changes: &[Patch],
) -> Option<Value>
fn document_action_result( &self, _doc: &AutoCommit, _address: &ActionAddress, _changes: &[Patch], ) -> Option<Value>
address, which has just applied to
doc as changes: a compact summary of what it produced, so its
caller needs no second read to see what happened. Asked only for an
action whose contract declares a JSON result, which this value must
satisfy.§impl ResourceOperations for TextInput
impl ResourceOperations for TextInput
§fn start_operation(
&mut self,
op: &ResourceOperation<'_>,
doc: &mut Edits<'_>,
path: &ExId,
) -> Result<Option<ResourceOperationStart>, String>
fn start_operation( &mut self, op: &ResourceOperation<'_>, doc: &mut Edits<'_>, path: &ExId, ) -> Result<Option<ResourceOperationStart>, String>
Answer a submit or a change addressed to this field: hand its text
to the field’s handler, whoever submitted or edited.
§fn local_resource_operation_handlers(&self) -> &'static [&'static str]
fn local_resource_operation_handlers(&self) -> &'static [&'static str]
§fn resource_operation_handlers(&self) -> HashSet<String>
fn resource_operation_handlers(&self) -> HashSet<String>
§fn poll_resource_operation(
&mut self,
invocation: InvocationId,
cancellation_requested: bool,
doc: &AutoCommit,
path: &ExId,
) -> Option<InvocationUpdate>
fn poll_resource_operation( &mut self, invocation: InvocationId, cancellation_requested: bool, doc: &AutoCommit, path: &ExId, ) -> Option<InvocationUpdate>
§impl UndoPoints for TextInput
impl UndoPoints for TextInput
§impl Widget for TextInput
impl Widget for TextInput
§fn take_focus_request(&mut self) -> Option<String>
fn take_focus_request(&mut self) -> Option<String>
A field made for the person to type in right away takes the keyboard in the tree it
stands in, once. It names itself as the runner finds it (Self::test_id).
§fn sync(&mut self, state: &(dyn Any + 'static), root: &(dyn Any + 'static))
fn sync(&mut self, state: &(dyn Any + 'static), root: &(dyn Any + 'static))
Read the field’s bound state. A sync is a read of what the document holds, not a paint: a field lending its document after a frame’s draw would otherwise ask for a frame forever, and the flags of the pieces that do move (a paste landing, a bound value replaced) are theirs to raise below.
§fn measure(
&mut self,
known: Size<Option<f32>>,
available: Size<AvailableSpace>,
text_renderer: &mut TextRenderer,
) -> Size<f32>
fn measure( &mut self, known: Size<Option<f32>>, available: Size<AvailableSpace>, text_renderer: &mut TextRenderer, ) -> Size<f32>
Single-line keeps its fixed row height from build_layout (0 here)
and measures at its own width where it is given none. Embedded callers
use apply_layout_external and never reach this.
§fn layout_needs_measure(&self) -> bool
fn layout_needs_measure(&self) -> bool
A single-line field scrolls content horizontally rather than growing, so it only needs re-measure before its first layout or right after a user edit — never blocking the scroll fast path while idle.
§fn is_layout_dirty(&self) -> bool
fn is_layout_dirty(&self) -> bool
Same inputs as Self::layout_needs_measure: an input’s size follows
its content only through an edit or a model change that reshapes
multiline or attributed text (layout_dirty, cleared by measure).
Whether the owner has taken the edit yet (dirty) is not one of
them, so an edit is measured in one frame however long its owner
waits to publish it, and idle inputs are never re-measured.
§fn cursor_shape(&self, point: Point) -> Option<CursorIcon>
fn cursor_shape(&self, point: Point) -> Option<CursorIcon>
A disabled input claims no cursor and defers to the host default.
§fn tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
fn tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
Hosts that embed the field without a layout tree still get the show/hide control’s tooltip.
§fn needs_redraw(&self) -> bool
fn needs_redraw(&self) -> bool
Repaints like a leaf when something it shows moved; the show/hide
control’s own paint is a child’s. Asking unconditionally kept every
window that holds a field painting forever, which is what an idle
window costs: nothing changed, so nothing is drawn. The pending edit
notification (Self::dirty) is left out for the same reason: an
owner that reads the text when the person submits leaves it standing,
and a field sitting in a window people are not touching must not keep
that window drawing.
§fn wants_tab_input(&self) -> bool
fn wants_tab_input(&self) -> bool
An open completion drawer takes Tab to insert its selected row.
The node above never sets hidden; answer without cloning the text.
§fn perform_semantic_action(
&mut self,
target: &str,
action: &Action,
_state: &mut Edits<'_>,
_root: &(dyn Any + 'static),
) -> bool
fn perform_semantic_action( &mut self, target: &str, action: &Action, _state: &mut Edits<'_>, _root: &(dyn Any + 'static), ) -> bool
The trailing accessory is a named control of its own: activating it (an agent, a screen reader) does what a press does.
§fn wants_pointer_capture(&self) -> bool
fn wants_pointer_capture(&self) -> bool
Keeps receiving cursor events during a drag even if the cursor wanders into a sibling widget.
§fn update(
&mut self,
state: &(dyn Any + 'static),
path: &(dyn Any + 'static),
) -> bool
fn update( &mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static), ) -> bool
A glide after the fingers lifted moves the text on in the frames it asks for.
§fn draw_overlay(
&mut self,
scene: &mut Scene,
transform: Affine,
text_renderer: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw_overlay( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
Paints the open context menu and the candidate list here so they float above every sibling regardless of tree order.
§fn as_any(&self) -> Option<&(dyn Any + 'static)>
fn as_any(&self) -> Option<&(dyn Any + 'static)>
dyn Widget. Default None (a widget may borrow
and so not be 'static); a widget opts in with Some(self), and a
Decorator answers itself.§fn provide<'a>(&'a self, request: &mut Request<'a, '_>)
fn provide<'a>(&'a self, request: &mut Request<'a, '_>)
capability). Declare capabilities with crate::provides!.§fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)
fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)
Widget::provide.fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
§fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
fn build_layout( &mut self, taffy: &mut TaffyTree, theme: &Theme, node_map: &mut HashMap<NodeId, *mut dyn Widget>, ) -> NodeId
§fn apply_layout(&mut self, taffy: &TaffyTree, node: NodeId, origin: Point)
fn apply_layout(&mut self, taffy: &TaffyTree, node: NodeId, origin: Point)
§fn draw(
&mut self,
scene: &mut Scene,
transform: Affine,
text_renderer: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
scene. The default paints nothing.§fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)
fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)
fn name(&self) -> &'static str
§fn test_id(&self) -> Option<&str>
fn test_id(&self) -> Option<&str>
None falls back to a path-based
key. Must be unique across the live tree — the registry resolves on
first match, so a duplicate shadows the second occurrence.§fn get_rect(&self) -> Rect
fn get_rect(&self) -> Rect
fn children(&self) -> Vec<&dyn Widget>
§fn for_each_child(&self, visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_child(&self, visitor: &mut dyn FnMut(&dyn Widget))
Self::children; toolkit
containers override this to walk their retained storage directly.fn children_mut(&mut self) -> Vec<&mut dyn Widget>
§fn collect_damage(&self, regions: &mut Vec<Rect>)
fn collect_damage(&self, regions: &mut Vec<Rect>)
§fn mark_drawn(&mut self)
fn mark_drawn(&mut self)
dirty flag. Default forwards to children.fn is_focusable(&self) -> bool
§fn set_invalid(&mut self, invalid: bool)
fn set_invalid(&mut self, invalid: bool)
Field::with_error: an invalid control edges itself in danger ink
and reports invalid to assistive technology. Controls without a
field face ignore it.fn set_focus(&mut self, focused: bool)
fn is_focused(&self) -> bool
§fn ime_cursor_rect(&self) -> Option<Rect>
fn ime_cursor_rect(&self) -> Option<Rect>
Some enables IME for the focused widget and
positions its candidate window; non-text controls keep the default
None and therefore disable IME.§fn ime_content(&self) -> Option<InputContent>
fn ime_content(&self) -> Option<InputContent>
text-input-v3, native IMEs elsewhere). None is intentionally the
default: enabling an IME for buttons, canvas tools or games makes the
compositor raise an on-screen keyboard over content that cannot accept
the committed text. Read more§fn ime_multiline(&self) -> bool
fn ime_multiline(&self) -> bool
§fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
§fn accessibility(&self) -> Option<AccessNode>
fn accessibility(&self) -> Option<AccessNode>
AccessState. Default None means
presentational: the node is skipped and children reparent onto the
parent. State must be derived, not stored so it can’t drift from
draw; names must already be i18n!-resolved.§fn synthetic_accessibility_rect(&self, path: &[usize]) -> Option<Rect>
fn synthetic_accessibility_rect(&self, path: &[usize]) -> Option<Rect>
AccessNode::children. The path is
its child-index path beneath this widget’s accessibility node. Returning
a rect lets AccessKit activation inject the same click as pointer input.§fn perform_action(
&mut self,
action: &Action,
_key_path: &[u64],
_state: &mut Edits<'_>,
_root: &(dyn Any + 'static),
) -> bool
fn perform_action( &mut self, action: &Action, _key_path: &[u64], _state: &mut Edits<'_>, _root: &(dyn Any + 'static), ) -> bool
Action on this
widget, or on one of its synthetic accessibility nodes. May mutate
the CRDT like handle_event. Read more§fn needs_animation_frame(&self) -> bool
fn needs_animation_frame(&self) -> bool
App polls this in Event::AboutToWait; without it a curve would
freeze until an unrelated event woke it.§fn next_wake_deadline(&self) -> Option<Instant>
fn next_wake_deadline(&self) -> Option<Instant>
§fn text_review(&self) -> Option<(usize, String)>
fn text_review(&self) -> Option<(usize, String)>
(caret_byte, text), byte offset on a char boundary. The host diffs
this before/after an event so caret-only moves (arrows, Home/End)
get announced, not just typing.§fn native_input_snapshot(
&self,
_state: &(dyn Any + 'static),
_path: &(dyn Any + 'static),
) -> Option<Value>
fn native_input_snapshot( &self, _state: &(dyn Any + 'static), _path: &(dyn Any + 'static), ) -> Option<Value>
§fn view_only_scroll(&self, _event: &WindowEvent) -> bool
fn view_only_scroll(&self, _event: &WindowEvent) -> bool
sync. The runner still lays out, paints and refreshes accessibility
geometry; unknown handlers stay on the full path.§fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn apply_primary_vertical_scroll( &mut self, _action: PrimaryScrollAction, ) -> PrimaryScrollResult
§fn callback_binding(&self) -> Option<CallbackBinding>
fn callback_binding(&self) -> Option<CallbackBinding>
§fn has_separate_document_owner(&self) -> bool
fn has_separate_document_owner(&self) -> bool
§fn history_owner(&self) -> Option<HistoryOwner>
fn history_owner(&self) -> Option<HistoryOwner>
§fn record_owners(&self) -> Vec<HistoryOwner>
fn record_owners(&self) -> Vec<HistoryOwner>
crate::record::person). They take no part in this
widget’s history or controls.§fn mount_native_views(&mut self, host: &NativeViewHost<'_>)
fn mount_native_views(&mut self, host: &NativeViewHost<'_>)
§fn unmount_native_views(&mut self)
fn unmount_native_views(&mut self)
§fn native_view_frame_start(&mut self)
fn native_view_frame_start(&mut self)
§fn set_platform_conventions(&mut self, conventions: PlatformConventions)
fn set_platform_conventions(&mut self, conventions: PlatformConventions)
§fn set_window_bar_control(&mut self, in_bar: bool)
fn set_window_bar_control(&mut self, in_bar: bool)
§fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
edits;
the host syncs again when the document changed. The default settles the returned children.§fn layout_info(&self) -> Option<LayoutInfo>
fn layout_info(&self) -> Option<LayoutInfo>
None means the widget has no such policy; ordinary manual widgets remain
valid. Values are available after build/settlement and carry real origins.§fn adjust_layout_style(
&mut self,
_taffy: &mut TaffyTree,
_node: NodeId,
_text: &mut TextRenderer,
) -> bool
fn adjust_layout_style( &mut self, _taffy: &mut TaffyTree, _node: NodeId, _text: &mut TextRenderer, ) -> bool
§fn observe_physical_input(&mut self, _input: PhysicalInput)
fn observe_physical_input(&mut self, _input: PhysicalInput)
§fn for_each_child_in_clip(&self, visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_child_in_clip(&self, visitor: &mut dyn FnMut(&dyn Widget))
Self::for_each_child that may paint inside the layout_clip in
effect: what a scroll view’s damage and copy plan need. Every child by default; a long
column visits only those near the clip, so a frame costs what is shown, not what the column
holds.§fn for_each_hosted_child(&self, _visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_hosted_child(&self, _visitor: &mut dyn FnMut(&dyn Widget))
Self::children lists, so what is walked
there keeps the paths, sibling indices and registry entries it had.§fn for_each_layout_child(&self, _visitor: &mut dyn FnMut(&dyn Widget)) -> bool
fn for_each_layout_child(&self, _visitor: &mut dyn FnMut(&dyn Widget)) -> bool
Self::build_layout gives a layout node,
also those Self::for_each_child keeps from routing (a hidden
pane, a title, a spacer). A retained layout is checked against this
walk before it is called through again, so a widget that replaced a
child without reporting it gets a new layout instead of a call into
freed memory. A child missing here cannot be checked, so debug builds
stop on it. A wrapper that stands for its inner widget’s node visits
the inner widget itself. Read more§fn window_slot(&self, _id: String) -> Option<ToolbarAction>
fn window_slot(&self, _id: String) -> Option<ToolbarAction>
id
(crate::window_toolbar::ToolbarAction): a button’s icon and name.
None for anything that is not a button.§fn stands_for(&self, address: *const ()) -> bool
fn stands_for(&self, address: *const ()) -> bool
address, or stands in the tree
for it: a Decorator stands for every widget it wraps, so a
scroller drawn inside one is found where the decorator is
(crate::scroll_copy::offer).§fn focus_reveal_context(&self) -> Option<Rect>
fn focus_reveal_context(&self) -> Option<Rect>
§fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
§fn test_rects(&self) -> Vec<(String, Rect)>
fn test_rects(&self) -> Vec<(String, Rect)>
Widget::get_rect; zero-area entries are dropped.§fn child_clip_rect(&self) -> Option<Rect>
fn child_clip_rect(&self) -> Option<Rect>
§fn snap_points(&self, axis: ScrollAxis, out: &mut Vec<f32>)
fn snap_points(&self, axis: ScrollAxis, out: &mut Vec<f32>)
axis that this widget, as a scroll view’s content,
offers it to settle on, measured from its own leading edge: a board’s
lanes (crate::widget::Board). None leaves a scroller stopping
wherever the hand left it.§fn take_action_palette_request(&mut self) -> Option<ActionAddress>
fn take_action_palette_request(&mut self) -> Option<ActionAddress>
resources().§fn take_search_request(&mut self) -> bool
fn take_search_request(&mut self) -> bool
§fn claims_raw_touch(&self, _point: Point) -> bool
fn claims_raw_touch(&self, _point: Point) -> bool
point (logical coords, same space as Widget::get_rect). Read more§fn touch_claim(&self, _point: Point) -> TouchClaim
fn touch_claim(&self, _point: Point) -> TouchClaim
point (logical coords)
means here, when a drag moves something rather than scrolling. Read more§fn tooltip(&self) -> Option<&str>
fn tooltip(&self) -> Option<&str>
crate::widget::tooltip::TooltipHost),
hit-tested like cursor_shape so containers
need not forward it. An icon-only control should also use this as
its accessible name.§fn tooltip_side(&self) -> TooltipSide
fn tooltip_side(&self) -> TooltipSide
§fn is_default_keyboard_focus(&self) -> bool
fn is_default_keyboard_focus(&self) -> bool
§fn keyboard_input_scope(&self) -> Option<u64>
fn keyboard_input_scope(&self) -> Option<u64>
§fn set_full_bleed(&mut self, _full_bleed: bool)
fn set_full_bleed(&mut self, _full_bleed: bool)
§fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
None leaves the menu to stand under
the focused widget’s own box.§fn traps_focus(&self) -> bool
fn traps_focus(&self) -> bool
true, the host restricts Tab/directional
focus to this subtree (wrapping at the ends) and restores the prior
focus once it goes back to false. Default false.§fn scopes_keyboard_focus(&self) -> bool
fn scopes_keyboard_focus(&self) -> bool
Self::traps_focus it moves no focus when it starts or ends, and
pointer input is unaffected. Default false.§fn take_app_activation(&mut self) -> Option<u64>
fn take_app_activation(&mut self) -> Option<u64>
Self::accessibility with its synthetic children shared, for a
widget that keeps them between frames: each child it did not change
is handed over as the very Arc of the last frame, which the
semantic tree takes as unchanged without copying or comparing it. Read more§fn accessibility_root(&self) -> Option<AccessNode>
fn accessibility_root(&self) -> Option<AccessNode>
Self::accessibility’s own node with its children left empty:
its role, identity (semantic_key) and state. Focus capture and focus
order read only these, for every node on every frame, so a widget
whose node carries a large subtree (a document exporting its every
block) answers without building it. An override must equal
accessibility() with children cleared.§fn focus_synthetic_accessibility(&mut self, _path: &[usize]) -> bool
fn focus_synthetic_accessibility(&mut self, _path: &[usize]) -> bool
§fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>
fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>
children entry beneath a
synthetic child returned by accessibility.
The returned index addresses AccessNode::children for this frame.
Collections use this to place a real interactive row delegate inside
its virtual ListItem/TreeItem instead of exporting a duplicate.§fn accessibility_child_path(&self, child_index: usize) -> Option<Vec<usize>>
fn accessibility_child_path(&self, child_index: usize) -> Option<Vec<usize>>
children entry beneath a
nested path of synthetic children returned by
accessibility. Read more§fn accessibility_represents_child(&self, _child_index: usize) -> bool
fn accessibility_represents_child(&self, _child_index: usize) -> bool
children entry is already
represented in this widget’s own synthetic
accessibility tree, so the bridge must not
export it a second time. A host that publishes a child’s semantics
itself (to add its own controls inside the same dialog) answers true
for that child; assistive technology then sees one copy, not two.§fn lays_out_child(&self, _child_index: usize) -> bool
fn lays_out_child(&self, _child_index: usize) -> bool
§fn accessibility_child_description(&self, _child_index: usize) -> Option<String>
fn accessibility_child_description(&self, _child_index: usize) -> Option<String>
children entry to
assistive technology, when this widget holds the words for it: a
row’s secondary line is its trailing switch’s description. The
bridge sets it as that child’s node’s description unless the child
describes itself.§fn is_enabled(&self) -> bool
fn is_enabled(&self) -> bool
false) widget is excluded from focus traversal, must
reject input in handle_event, and renders dimmed (see
DISABLED_ALPHA).§fn ime_requires_deferred_ack(&self) -> bool
fn ime_requires_deferred_ack(&self) -> bool
§fn ime_refuses_ordinary_commits(&self) -> bool
fn ime_refuses_ordinary_commits(&self) -> bool
§fn start_deferred_text(&mut self) -> Option<Receipt>
fn start_deferred_text(&mut self) -> Option<Receipt>
§fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>
fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>
§fn presented(&self) -> bool
fn presented(&self) -> bool
true; false only for a widget standing in for a window’s
content whose first frame has not drawn. Must latch: once true,
never false again for the same content.§fn arrives_from(&self) -> Source
fn arrives_from(&self) -> Source
presented: this device (an app starting here),
another device or a host. A frame from this device may hold the
window’s first frame up to one frame budget; any other reserves the
window’s place and says where it comes from after a while.§fn arrival_progress(&self) -> Option<Progress>
fn arrival_progress(&self) -> Option<Progress>
§fn arrival_shape(&self) -> SkeletonShape
fn arrival_shape(&self) -> SkeletonShape
§fn on_external_event(
&mut self,
_payload: &str,
_state: &mut Edits<'_>,
_root: &(dyn Any + 'static),
)
fn on_external_event( &mut self, _payload: &str, _state: &mut Edits<'_>, _root: &(dyn Any + 'static), )
crate::app::UserEvent::External (e.g. a worker thread streaming
output into a status log). Default no-op; the App redraws and
re-syncs after dispatch, so mutating state here is enough.crate::gesture::NavGestureRecognizer and delivered to the whole
tree; return true once consumed. Default forwards to children, so
a widget that owns history becomes swipe-navigable for free.Self::on_nav_gesture would consume now. A widget
that owns history overrides this beside on_nav_gesture.§fn take_focus_reset(&mut self) -> bool
fn take_focus_reset(&mut self) -> bool
crate::app::App::autofocus_on_structure_change;
a wizard raises it on step transitions.§fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>
fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>
§fn dev_route(&self) -> Option<RouteSnapshot>
fn dev_route(&self) -> Option<RouteSnapshot>
§fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool
fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool
route back. Returns whether a router in this subtree accepted it. Read more§fn appearance_intent(&self) -> Option<AppearanceIntent>
fn appearance_intent(&self) -> Option<AppearanceIntent>
crate::app::App::appearance_reconcile — how a settings pane
re-themes the running app live without a back-channel.
Level-triggered; the App recurses Self::children itself, so
containers need not forward it. First Some wins.§fn minimum_window_width(&self) -> Option<f64>
fn minimum_window_width(&self) -> Option<f64>
NavShell answers with one column
at a time). The host states it to the window system, so the desktop
stops a resize there. None: no opinion. The host walks the tree
itself (minimum_window_width), so containers need not forward
it; the first Some wins.§fn preferred_window_size(&self) -> Option<(f64, f64)>
fn preferred_window_size(&self) -> Option<(f64, f64)>
None: the
window is the user’s and the app lays itself out in whatever it gets.§fn set_motion_reduced(&mut self, reduced: bool)
fn set_motion_reduced(&mut self, reduced: bool)
§fn needs_idle_sync(&self) -> bool
fn needs_idle_sync(&self) -> bool
sync still needs to run on idle frames without input or
collab events — e.g. waiting out a document-adoption grace window.§fn disclosing(&self) -> Option<Disclosing>
fn disclosing(&self) -> Option<Disclosing>
motion::Disclosure: an in-window banner arriving or leaving), or a
content-sized container one moves in, how far what follows it is
drawn from where it is laid out. A moving band stands out of the
layout; its container places it (Self::place_disclosing) and
draws the widgets after it lower by transform, so they move with the
band’s edge instead of being laid out again every frame. None at
rest (the default).§fn place_disclosing(&mut self, _slot: Rect)
fn place_disclosing(&mut self, _slot: Rect)
Disclosing::Band) stands while it is
out of the layout: its slot’s top and width (slot’s height is
zero), set by its container after each layout.§fn is_band(&self) -> bool
fn is_band(&self) -> bool
widget::Disclosing). Its column leaves it out of its identity
across rebuilds.§fn note_placement(&mut self, _placement: Placement)
fn note_placement(&mut self, _placement: Placement)
§fn animation_detail(&self) -> Option<String>
fn animation_detail(&self) -> Option<String>
None when it has nothing
to add to its name and geometry.§fn holds_frame_until(&self, now: Instant) -> Option<Instant>
fn holds_frame_until(&self, now: Instant) -> Option<Instant>
crate::arriving): a local read that has
not answered and is still inside its frame budget. The host keeps
the frame on screen until then, or until the data lands, so the
person never sees the space empty and then filled. Containers
forward (the default does).§fn serve_deadline(&mut self, _now: Instant) -> bool
fn serve_deadline(&mut self, _now: Instant) -> bool
Self::next_wake_deadline) is
due at now: do the work it was for, and say whether anything
changed. The default says it did.§fn modal_capture(&self) -> Option<Rect>
fn modal_capture(&self) -> Option<Rect>
Some(rect) when this subtree holds an open modal, its panel box.
While any widget reports Some, the host suppresses its own global
focus shortcuts and swallows unhandled pointer presses so nothing
behind the modal is clickable. Containers MUST forward (the default
does, via first Some among children).§fn dismiss_presented_modal(&mut self) -> bool
fn dismiss_presented_modal(&mut self) -> bool
§fn presents_modal(&self) -> bool
fn presents_modal(&self) -> bool
Widget::dismiss_presented_modal.§fn take_structure_dirty(&mut self) -> bool
fn take_structure_dirty(&mut self) -> bool
§fn take_structure_change(&mut self) -> StructureChange
fn take_structure_change(&mut self) -> StructureChange
Self::take_structure_dirty, saying whether the frame’s damage can
still describe the rebuild (StructureChange::Described). Reading
clears what take_structure_dirty clears; the two must agree on
whether there is a change. The default is the flag, as
a StructureChange::Rebuild: only a widget that knows every pixel its
change touches lands in its own damage says less, and a container
forwards a child’s StructureChange::Described only by overriding
this.§fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
StructureChange::Children this widget or one under it
reported, in the retained layout tree, through remount (see
remount). Returns false when it cannot be
carried out in place: the host then rebuilds its tree, and the change
is carried out by Self::build_layout. A widget reports such a
change until either has carried it out. The default carries out its
children’s.§fn has_pending_visual_work(&self) -> bool
fn has_pending_visual_work(&self) -> bool
§fn has_transient_feedback(&self) -> bool
fn has_transient_feedback(&self) -> bool
§fn damage_covers_own_box(&self) -> bool
fn damage_covers_own_box(&self) -> bool
Self::collect_damage covers every pixel a relayout changed by
moving or resizing its layout box: a host that repaints where moved
widgets were and are may then leave this widget’s box to it (its
children’s boxes still count). A block editor that grew by a
paragraph says where its blocks were and are; the default does not
claim it.§fn mark_children_drawn(&mut self)
fn mark_children_drawn(&mut self)
§fn release_scene_cache(&mut self)
fn release_scene_cache(&mut self)
§fn composition_follows_allocation(&self) -> bool
fn composition_follows_allocation(&self) -> bool
take_structure_dirty themselves when a new allocation changes what
they show, keep the default: a resize re-solves the retained tree in
place instead of recomposing all of it.§fn paint_bounds(&self) -> Rect
fn paint_bounds(&self) -> Rect
draw_child
skips the draw when it misses the viewport. Override for widgets
that paint past their own rect.Auto Trait Implementations§
impl !Freeze for TextInput
impl !RefUnwindSafe for TextInput
impl !Send for TextInput
impl !Sync for TextInput
impl Unpin for TextInput
impl UnsafeUnpin for TextInput
impl !UnwindSafe for TextInput
Blanket Implementations§
§impl<T> AsDynWidget for Twhere
T: Widget,
impl<T> AsDynWidget for Twhere
T: Widget,
§fn as_dyn_widget(&self) -> &dyn Widget
fn as_dyn_widget(&self) -> &dyn Widget
§impl<T> AudiencePresentationWidgetExt for T
impl<T> AudiencePresentationWidgetExt for T
fn audience_presentation_request(&self) -> Option<AudiencePresentationRequest>
fn on_audience_presentation_changed(&mut self, active: bool)
fn draw_audience_presentation( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, rect: Rect, ) -> bool
fn handle_audience_presentation_event( &mut self, event: &WindowEvent, state: &mut Edits<'_>, path: &ExId, ) -> bool
fn on_audience_presentation_closed(&mut self)
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
§impl<T> CompleteContentWidgetExt for T
impl<T> CompleteContentWidgetExt for T
fn complete_content_size(&self) -> Option<Size>
fn draw_complete_content( &mut self, scene: &mut Scene, bounds: Rect, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> FloatingSurfaceWidgetExt for T
impl<T> FloatingSurfaceWidgetExt for T
fn on_floating_surface_focus_changed(&mut self, id: Option<&str>, focused: bool)
fn on_floating_surface_ime_source_changed(&mut self, id: Option<&str>)
fn on_floating_surface_event_source(&mut self, id: Option<&str>)
fn floating_surface_event( &mut self, id: &str, event: &WindowEvent, ctx: &mut EventCtx<'_>, ) -> bool
fn floating_surface_accessibility(&self, id: &str) -> Option<AccessNode>
fn perform_floating_surface_accessibility_action( &mut self, id: &str, target: &str, action: &Action, state: &mut Edits<'_>, path: &ExId, ) -> bool
fn floating_surface_ime(&self, id: &str) -> Option<(InputContent, Rect)>
fn take_floating_surface_request(&mut self) -> Option<FloatingSurfaceRequest>
fn take_capture_studio_request(&mut self) -> Option<CaptureMode>
fn take_floating_surface_source_updates(&mut self) -> Vec<(String, Rect)>
fn draw_floating_surfaces( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
fn draw_floating_surface( &mut self, id: &str, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool
fn floating_surface_presentations(&self) -> Vec<FloatingSurfacePresentation>
fn active_floating_surface_ids(&self) -> Vec<String>
fn set_floating_surface_bounds(&mut self, bounds: Rect)
fn on_floating_surface_host_message( &mut self, message: &FloatingSurfaceHostMessage, )
§impl<T> FullscreenWidgetExt for T
impl<T> FullscreenWidgetExt for T
fn fullscreen_intent(&self) -> Option<bool>
fn fullscreen_params(&self) -> FullscreenRequest
fn on_fullscreen_changed(&mut self, active: bool)
Source§impl<W> HostDelivery for W
impl<W> HostDelivery for W
Source§fn start_encoded(
&mut self,
kind: OperationKind,
type_id: &str,
payload: &[u8],
doc: &mut AutoCommit,
path: &ExId,
) -> Result<Option<Effected>, String>
fn start_encoded( &mut self, kind: OperationKind, type_id: &str, payload: &[u8], doc: &mut AutoCommit, path: &ExId, ) -> Result<Option<Effected>, String>
type_id, payload) of kind.Source§fn deliver_control(
&mut self,
kind: OperationKind,
control: &str,
doc: &mut AutoCommit,
path: &ObjId,
) -> Result<Option<Effected>, String>
fn deliver_control( &mut self, kind: OperationKind, control: &str, doc: &mut AutoCommit, path: &ObjId, ) -> Result<Option<Effected>, String>
control (its id,
as its tilo.control: resource names it).§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 more