Struct TabBar
pub struct TabBar {
pub pending_drag: Option<DragPayload>,
pub pending_reorder: Option<(usize, usize)>,
pub pending_close: Option<u64>,
pub pending_max: Option<u64>,
pub pending_search: Option<u64>,
pub pending_new_tab: Option<()>,
pub pending_detach: Option<(u64, Point)>,
/* private fields */
}Fields§
§pending_drag: Option<DragPayload>§pending_reorder: Option<(usize, usize)>§pending_close: Option<u64>§pending_max: Option<u64>§pending_search: Option<u64>§pending_new_tab: Option<()>§pending_detach: Option<(u64, Point)>(tab_id, release_point) when a drag is released outside this bar’s rect,
for a parent (e.g. GroupRow) to resolve the drop target.
Implementations§
§impl TabBar
impl TabBar
pub const SOURCE_PILL_DIM_ALPHA: f32 = 0.35
pub const SOURCE_PILL_DIM_ALPHA: f32 = 0.35
Source pill’s opacity while the drag-ghost is visible; low enough to read as inactive but the slot still holds its place (no neighbour reflow).
pub const GHOST_PILL_ALPHA: f32 = 0.5
pub const GHOST_PILL_ALPHA: f32 = 0.5
The handle is visibly lifted but remains translucent enough for a drop target to stay legible beneath it.
pub fn new( group_id_tag: &str, tabs: Vec<TabDescriptor>, active_id: u64, ) -> TabBar
pub fn closable(self, closable: bool) -> TabBar
pub fn closable(self, closable: bool) -> TabBar
Whether tabs close from the strip (default true). Without it no
close control is drawn, reserved or announced.
pub fn without_new_tab(self) -> TabBar
pub fn without_new_tab(self) -> TabBar
No new-tab control at the end of the strip.
pub fn set_mark(&mut self, id: u64, mark: Option<TabMark>)
pub fn set_mark(&mut self, id: u64, mark: Option<TabMark>)
Mark what tab id’s content is doing, or clear the mark.
pub fn mark_rect(&self, id: u64) -> Option<Rect>
pub fn mark_rect(&self, id: u64) -> Option<Rect>
Where tab id’s mark is painted, for hit-testing and tests.
pub fn take_mark_click(&mut self) -> Option<(u64, TabMark)>
pub fn take_mark_click(&mut self) -> Option<(u64, TabMark)>
A click on a tab’s sound mark, once: the host mutes or unmutes it.
pub fn set_group_focused(&mut self, focused: bool)
pub fn set_group_focused(&mut self, focused: bool)
The host shows which window group has keyboard input: the active tab of the focused group carries a keyline in your colour, the focus colour, and the others carry the lift alone.
pub fn force_settled_for_tests(&mut self)
pub fn force_settled_for_tests(&mut self)
Pin transient pill geometry at its resting state for deterministic integration screenshots. This does not alter production animation; it only removes wall-clock sampling from visual regression tests.
pub fn is_settled_for_tests(&self) -> bool
pub fn is_settled_for_tests(&self) -> bool
Report whether a retained tab row has reached a static resting state. Visual tests use this after one layout pass instead of assuming that a fixed sleep covers every nested curve.
pub fn hold_hover_intent_at(&mut self, at: Duration) -> bool
pub fn hold_hover_intent_at(&mut self, at: Duration) -> bool
Test/shot clock control for the pointer-intent dwell. Production input
still arms this exclusively through on_cursor_moved.
pub fn hold_reveal_at(&mut self, at: Duration) -> bool
pub fn hold_reveal_at(&mut self, at: Duration) -> bool
Hold every in-flight reveal curve at milliseconds along it. The curve runs
on wall time and an offscreen frame costs more wall time than the whole
curve lasts, so a capture that only steps frames would see just the
endpoints — same escape as GroupRow::hold_shift_at. Returns whether any
curve was running to sample.
pub fn visible_title(
&mut self,
i: usize,
tr: &mut TextRenderer,
theme: &Theme,
) -> Option<String>
pub fn visible_title( &mut self, i: usize, tr: &mut TextRenderer, theme: &Theme, ) -> Option<String>
Elides with an ellipsis when the pill is too narrow — a plain clip-rect used
to slice the last glyph in half instead. None for a pinned pill.
pub fn tabs(&self) -> &[TabDescriptor]
pub fn tabs_mut(&mut self) -> &mut Vec<TabDescriptor>
pub fn active_id(&self) -> u64
pub fn set_active(&mut self, id: u64)
pub fn take_activation(&mut self) -> Option<u64>
pub fn take_activation(&mut self) -> Option<u64>
Drain the tab selected by pointer, keyboard, or accessibility input. Programmatic reconciliation deliberately does not populate this edge.
pub fn is_pinned(&self, id: u64) -> bool
pub fn pin(&mut self, id: u64)
pub fn pin(&mut self, id: u64)
Caller ensures the tab exists; a stale entry is tolerated (filtered at
render time) but should be cleaned up via unpin when the tab is removed.
pub fn unpin(&mut self, id: u64)
pub fn toggle_pin(&mut self, id: u64)
pub fn set_icon(&mut self, id: u64, icon: Option<AppImage>) -> bool
pub fn set_icon(&mut self, id: u64, icon: Option<AppImage>) -> bool
Replace tab id’s artwork. true when that changed what it paints.
pub fn set_accent(&mut self, id: u64, color: AlphaColor<Srgb>)
pub fn set_accent(&mut self, id: u64, color: AlphaColor<Srgb>)
Tint id’s leading marker. A tab with no app_kind paints a filled dot
in the leading slot; one with both tints its app glyph instead. Pass a
colour read off the Theme — see Self::accent_ids.
pub fn clear_accent(&mut self, id: u64)
pub fn clear_accent(&mut self, id: u64)
Drop id’s leading accent, giving the pill its leading zone back.
pub fn accent(&self, id: u64) -> Option<AlphaColor<Srgb>>
pub fn accent(&self, id: u64) -> Option<AlphaColor<Srgb>>
The accent set for id, if any.
pub fn set_modified(&mut self, id: u64, modified: bool)
pub fn set_modified(&mut self, id: u64, modified: bool)
Mark id as holding unsaved changes, or clear the mark.
pub fn is_modified(&self, id: u64) -> bool
pub fn is_modified(&self, id: u64) -> bool
True if id is currently marked as holding unsaved changes.
pub fn set_show_maximize(&mut self, show: bool)
pub fn set_show_maximize(&mut self, show: bool)
Offer, or withhold, the hover-reveal maximize chip. Defaults to offered
— see Self::show_maximize for when to turn it off.
pub fn remove_tab(&mut self, id: u64) -> Option<usize>
pub fn start_closing(&mut self, id: u64) -> bool
pub fn start_closing(&mut self, id: u64) -> bool
Active-id shifts to the neighbour immediately so the user never sees a
“ghost active” frame during the fade. Idempotent on a tab already in
closing_tabs — restarting the curve would pop the pill back to full
opacity, worse than letting it finish.
pub fn cancel_close(&mut self, id: u64) -> bool
pub fn cancel_close(&mut self, id: u64) -> bool
Restore a requested close whose host still owns the live tab. No metadata or focus is lost while the client asks for a save decision.
pub fn finalize_close(&mut self, id: u64) -> bool
pub fn finalize_close(&mut self, id: u64) -> bool
Called by WindowGroup once its own fade-out has elapsed.
pub fn has_closing(&self) -> bool
pub fn is_closing(&self, id: u64) -> bool
pub fn is_closing(&self, id: u64) -> bool
True if id is mid close-fade — already gone from the live tab list
but still rendering its CLOSE_FADE_MS animation. A caller that
reconciles pills against its own model checks this before
re-inserting a still-open item, so cancelling a close (e.g. answering
“no” to a discard-unsaved-changes prompt) doesn’t pop a duplicate
pill mid-fade.
pub fn reorder(&mut self, from: usize, to: usize)
pub fn cancel_drag(&mut self) -> bool
pub fn cancel_drag(&mut self) -> bool
Abandon a pending or lifted tab without turning its release into a drop.
pub fn drag_in_flight(&self) -> bool
pub fn take_reorder(&mut self) -> Option<(usize, usize)>
pub fn take_close(&mut self) -> Option<u64>
pub fn close_rect_for_tests(&self, tab_id: u64) -> Option<Rect>
pub fn take_max(&mut self) -> Option<u64>
pub fn take_search(&mut self) -> Option<u64>
pub fn take_new_tab(&mut self) -> Option<()>
pub fn new_tab_rect(&self) -> Rect
pub fn new_tab_rect(&self) -> Rect
Rect::ZERO when the pills have filled the bar and the chip is suppressed.
pub fn take_detach(&mut self) -> Option<(u64, Point)>
pub fn bar_rect(&self) -> Rect
pub fn tab_rects(&self) -> &[Rect]
pub fn inset_left(&mut self, px: f64)
pub fn inset_left(&mut self, px: f64)
Shifts the bar’s whole painted region — background, pills, hit rects —
right by px, after apply_layout has already fit the row. A host
drawing its own control over the bar’s left corner (e.g. an overlay
sidebar’s hamburger toggle) reserves room for it here, rather than
teaching the fit itself about a chip this widget doesn’t know exists.
No-op past a px that would collapse the bar.
pub fn max_rects(&self) -> &[Rect]
pub fn max_rects(&self) -> &[Rect]
Gated cfg(any(test, debug_assertions)) rather than cfg(test) so
integration tests in other crates (which link the release-shaped lib) can
resolve the chip from live geometry, matching WindowGroup::bar_for_tests.
pub fn search_rects(&self) -> &[Rect]
pub fn action_hit_rect(&self, chip: Rect) -> Rect
pub fn action_hit_rect(&self, chip: Rect) -> Rect
The pointer target of a maximize/search chip: at least the theme’s
minimum pointer target on a side (HIG §9.6: 32 px), centred on the
chip’s glyph rect, and never outside the bar. The painted chip stays
ACTION_W wide and the pill widths the layout pins do not move, so
neighbouring targets inside one pill overlap; a hover or press in an
overlap resolves by priority — close, then maximize, then search —
which keeps the close target its full 32 px. Rect::ZERO for a
chip the reveal has not placed.
pub fn drop_index_for(&self, release_point: Point) -> usize
pub fn drop_index_for(&self, release_point: Point) -> usize
Insert before the first pill whose horizontal midpoint is past
release_point.x; append if past every midpoint.
pub fn insert_tab(&mut self, idx: usize, desc: TabDescriptor)
pub fn insert_tab(&mut self, idx: usize, desc: TabDescriptor)
Used by cross-group drag routing in GroupRow::handle_event to splice a
detached tab into the target bar without forcing a full rebuild.
pub fn set_external_drag_hover(&mut self, cursor: Option<Point>)
pub fn set_external_drag_hover(&mut self, cursor: Option<Point>)
Called by GroupRow::handle_event for every sibling bar while a child
group’s tab drag is in flight. No-op while this bar has its own
pending_drag in flight — the own-bar CursorMoved branch already drives
hover_drop_idx, and the parent’s fan-out shouldn’t fight with it.
Trait Implementations§
§impl Widget for TabBar
impl Widget for TabBar
§fn test_rects(&self) -> Vec<(String, Rect)>
fn test_rects(&self) -> Vec<(String, Rect)>
So a scenario clicks the rect the renderer actually painted, not a guessed coordinate. The zero-area case (chip suppressed) is filtered out by the registry.
§fn is_layout_dirty(&self) -> bool
fn is_layout_dirty(&self) -> bool
A fixed-height strip sized by its parent: only its first layout is a size change. Tab additions and removals are structural.
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,
tr: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw( &mut self, scene: &mut Scene, transform: Affine, tr: &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 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 perform_semantic_action(
&mut self,
target: &str,
action: &Action,
_state: &mut Edits<'_>,
_path: &(dyn Any + 'static),
) -> bool
fn perform_semantic_action( &mut self, target: &str, action: &Action, _state: &mut Edits<'_>, _path: &(dyn Any + 'static), ) -> bool
target is the opaque stable value supplied through
AccessNode::with_action_target. Read more§fn get_rect(&self) -> Rect
fn get_rect(&self) -> Rect
fn is_focusable(&self) -> bool
fn set_focus(&mut self, focused: bool)
fn is_focused(&self) -> bool
fn wants_pointer_capture(&self) -> bool
§fn set_motion_reduced(&mut self, reduced: bool)
fn set_motion_reduced(&mut self, reduced: bool)
§fn needs_animation_frame(&self) -> bool
fn needs_animation_frame(&self) -> bool
App polls this in Event::AboutToWait; without it a curve would
freeze partway until an unrelated event woke it again.§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 synchronization/publication 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 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 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_interaction_environment(&mut self, environment: InteractionEnvironment)
fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
§fn sync(&mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static))
fn sync(&mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static))
Widget::children_mut returns; a widget overrides it only to
read state of its own, or to sync children it does not expose there.§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
Widget::children_mut returns, without short-circuiting, so a
container never freezes its descendants at build-time state; a widget
overrides it to check state of its own and then forward.§fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
edits (a resource’s
dispatcher); the host syncs again when the document changed. The
default settles the children Widget::children_mut returns.fn measure( &mut self, _known: Size<Option<f32>>, _available: Size<AvailableSpace>, _text_renderer: &mut TextRenderer, ) -> Size<f32>
§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 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 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 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 as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
§fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
§fn child_clip_rect(&self) -> Option<Rect>
fn child_clip_rect(&self) -> Option<Rect>
§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 cursor_shape(&self, _point: Point) -> Option<CursorIcon>
fn cursor_shape(&self, _point: Point) -> Option<CursorIcon>
point is logical coords, same space as Widget::get_rect;
None defers to the default arrow. The host hit-tests the whole
tree via node_map and picks the smallest-area claim, so containers
need not override this.§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 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 tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
§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_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 focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
§fn wants_tab_input(&self) -> bool
fn wants_tab_input(&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 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 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 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 perform_action(
&mut self,
_action: &Action,
_key_path: &[u64],
_state: &mut Edits<'_>,
_path: &(dyn Any + 'static),
) -> bool
fn perform_action( &mut self, _action: &Action, _key_path: &[u64], _state: &mut Edits<'_>, _path: &(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 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 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 ime_purpose(&self) -> Option<ImePurpose>
fn ime_purpose(&self) -> Option<ImePurpose>
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 presented(&self) -> bool
fn presented(&self) -> bool
true; the exception is a widget standing in for a process
that has started but not drawn. Must latch: once true, never
false again for the same content, or an un-presenting widget would
make a window vanish mid-resize. What shows meanwhile is decided by
Widget::opening.§fn opening(&self) -> bool
fn opening(&self) -> bool
presented, that showing nothing would read as
broken. Delayed so a fast open never flashes an indicator.§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 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 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 take_committed_action(&mut self) -> Option<Vec<ChangeHash>>
fn take_committed_action(&mut self) -> Option<Vec<ChangeHash>>
tilo_actions action its
ActionSpec exports, it reports the
document heads captured just before here, so the host can record
one undo boundary the same way a palette dispatch does. Rising-edge:
reading MUST clear it.§fn keeps_undo_step_open(&self) -> bool
fn keeps_undo_step_open(&self) -> bool
§fn set_undo_status(&mut self, _status: &mut dyn FnMut() -> UndoStatus)
fn set_undo_status(&mut self, _status: &mut dyn FnMut() -> UndoStatus)
§fn take_undo_request(&mut self) -> Option<UndoRequest>
fn take_undo_request(&mut self) -> Option<UndoRequest>
§fn handle_local_undo_request(&mut self, request: UndoRequest) -> bool
fn handle_local_undo_request(&mut self, request: UndoRequest) -> bool
§fn apply_room_action(
&mut self,
_doc: &mut Edits<'_>,
_type_id: &str,
_payload: &[u8],
) -> bool
fn apply_room_action( &mut self, _doc: &mut Edits<'_>, _type_id: &str, _payload: &[u8], ) -> bool
type_id is silently
declined, not an error.§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>
§fn semantic_readers(&self) -> &'static [RegisteredSemanticReader]
fn semantic_readers(&self) -> &'static [RegisteredSemanticReader]
§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>
§fn next_wake_deadline(&self) -> Option<Instant>
fn next_wake_deadline(&self) -> Option<Instant>
needs_animation_frame, this keeps
the event loop asleep until the requested instant and is appropriate
for filesystem/status polling rather than animation.§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 take_structure_dirty(&mut self) -> bool
fn take_structure_dirty(&mut self) -> bool
false. A container that changes its own child list sets its own flag
and ORs it with this traversal.§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 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 needs_redraw(&self) -> bool
fn needs_redraw(&self) -> bool
true (dirty every frame). Opt into incremental redraw by
tracking a dirty: bool, setting it in handle_event/sync, and
clearing it in mark_drawn(). Containers MUST forward: dirty iff any
descendant is.§fn collect_damage(&self, regions: &mut Vec<Rect>)
fn collect_damage(&self, regions: &mut Vec<Rect>)
§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_drawn(&mut self)
fn mark_drawn(&mut self)
dirty flag. Default forwards to children.§fn release_scene_cache(&mut self)
fn release_scene_cache(&mut self)
§fn layout_needs_measure(&self) -> bool
fn layout_needs_measure(&self) -> bool
layout_dirty frame needs taffy to re-solve sizes
(compute_layout) rather than just reposition already-solved boxes.
Scrollable is the motivating override: it translates its origin
in apply_layout without changing any taffy size, so re-solving on
every scroll frame is pure waste.§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.§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, )
draw
recursion, so anything emitted here composites above every sibling
regardless of tree order — the toolkit’s overlay mechanism for
content that escapes its layout box (an open Dropdown, a
popover). Default recurses children_mut.Auto Trait Implementations§
impl Freeze for TabBar
impl !RefUnwindSafe for TabBar
impl Send for TabBar
impl Sync for TabBar
impl Unpin for TabBar
impl UnsafeUnpin for TabBar
impl !UnwindSafe for TabBar
Blanket Implementations§
§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> DowncastSync for T
impl<T> DowncastSync for T
§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_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<(ImePurpose, 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>
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). Read more§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