Struct Scrollable
pub struct Scrollable { /* private fields */ }Implementations§
§impl Scrollable
impl Scrollable
pub fn thumb_rect(&self, axis: ScrollAxis) -> Option<Rect>
pub fn thumb_rect(&self, axis: ScrollAxis) -> Option<Rect>
ScrollAxis::Both has no single thumb and always returns None.
§impl Scrollable
impl Scrollable
pub fn into_widget(self) -> Box<dyn Widget>
pub fn into_widget(self) -> Box<dyn Widget>
Box this widget in the SDK so thin apps reuse its shared implementation. This keeps the widget’s vtable instantiation out of the app.
pub fn new(axis: ScrollAxis) -> Scrollable
pub fn new_vertical() -> Scrollable
pub fn new_horizontal() -> Scrollable
pub fn following_end(self) -> Scrollable
pub fn following_end(self) -> Scrollable
Open at the end of the content and stay there while it grows, unless the person scrolled away from the end: a conversation’s transcript, whose newest message is last.
pub fn child_mut(&mut self) -> Option<&mut Box<dyn Widget>>
pub fn child_mut(&mut self) -> Option<&mut Box<dyn Widget>>
The content, to change it in place and keep the scroll position.
pub fn with_child(self, c: Box<dyn Widget>) -> Scrollable
pub fn replace_child(&mut self, c: Box<dyn Widget>) -> Option<Box<dyn Widget>>
pub fn replace_child(&mut self, c: Box<dyn Widget>) -> Option<Box<dyn Widget>>
Show c instead of the content, which it returns, keeping the scroll position. A
change the frame’s damage describes: the new content draws itself whole, and the host
repaints where the boxes it moved were and are.
pub fn with_content_min_viewport_height(self) -> Scrollable
pub fn with_content_min_viewport_height(self) -> Scrollable
Let auto-height content fill at least the measured viewport height, retaining its intrinsic height when it overflows. This does not change an explicitly sized child’s authored height. Ordinary form fields stay content-sized unless their Scrollable opts in.
Adds a presentational single-child wrapper to normal widget traversal; the content keeps its identity, focus and action bindings. Where the scroll view’s height comes from its content rather than its parent, there is no viewport to fill and the content keeps its own height.
pub fn with_content_min_viewport_width(self) -> Scrollable
pub fn with_content_min_viewport_width(self) -> Scrollable
Keep content that only scrolls sideways at least as wide as the viewport: a row whose children share its width by weight fills the view when they fit, and still grows past it, to scroll, when their own least widths need more room.
pub fn with_semantic_key(self, key: impl Into<String>) -> Scrollable
pub fn with_semantic_key(self, key: impl Into<String>) -> Scrollable
Give the scroll group a stable semantic key, so the controls it scrolls keep durable identities and stay reachable as actions.
pub fn with_label(self, label: impl Into<String>) -> Scrollable
pub fn with_label(self, label: impl Into<String>) -> Scrollable
Name the scroll region for assistive technology: what Tab announces when the region overflows and becomes a keyboard stop.
pub fn with_scrollbar(self, show: bool) -> Scrollable
pub fn with_scrollbar(self, show: bool) -> Scrollable
The bar still auto-hides per-axis whenever content fits regardless
of this flag; false suppresses it unconditionally.
pub fn with_stable_vertical_gutter(self) -> Scrollable
pub fn with_stable_vertical_gutter(self) -> Scrollable
Keep the themed vertical scrollbar lane when content fits, so sibling pages use the same content width across an overflow transition. The scrollbar itself still appears only when scrolling is possible.
pub fn without_sequential_focus(self) -> Scrollable
pub fn without_sequential_focus(self) -> Scrollable
Keep scrolling, pointer bars, wheel input and descendant focus intact, but skip the viewport itself in sequential Tab traversal.
pub fn always_visible(self) -> Scrollable
pub fn with_height(self, px: f32) -> Scrollable
pub fn with_max_height(self, px: f32) -> Scrollable
pub fn with_max_height(self, px: f32) -> Scrollable
Keep the viewport only as tall as its content up to px. Overflowing
content remains scrollable, while a short page keeps an intrinsic,
compact surface rather than a large empty pane.
pub fn fit_content_height(self) -> Scrollable
pub fn fit_content_height(self) -> Scrollable
Keep the viewport as tall as its content and let it shrink only when
its parent runs out of room, so the content scrolls just in a window
too short to show it. with_max_height without a number.
pub fn set_max_height(&mut self, px: f32)
pub fn set_max_height(&mut self, px: f32)
Resize a content-sized viewport without replacing its child/editor. The shared measured solver updates the retained node’s constraint.
pub fn fill_parent_height(self) -> Scrollable
pub fn fill_parent_height(self) -> Scrollable
Take the height the parent leaves: the rest of a column under a fixed bar, the whole of a grid row or a fixed-height container, including at the root of a window whose content has a max width.
pub fn with_edge_fade(self) -> Scrollable
pub fn with_edge_fade(self) -> Scrollable
Fade the content out at an edge while more of it can scroll in from
there (ui::surface::content_edge_fade against the ground it is
drawn on), so a cut-off line reads as “more below” rather than as
clipped. Nothing fades at an edge the content has reached.
pub fn with_persisted_offset(self, cell: Rc<Cell<(f32, f32)>>) -> Scrollable
pub fn with_persisted_offset(self, cell: Rc<Cell<(f32, f32)>>) -> Scrollable
The seeded offset is clamped to the content and viewport the first layout resolves, before the content is placed, so a restored offset past the end of shorter content never shows a blank frame.
pub fn with_cursor(self, cursor: Point) -> Scrollable
pub fn with_cursor(self, cursor: Point) -> Scrollable
Seed the most recent pointer position when rebuilding a retained view.
Mouse wheel and button events do not carry a position. A parent that recreates its scrollable every frame must therefore carry its last cursor into the replacement, otherwise a still click or wheel after a rebuild is incorrectly treated as being outside the viewport.
pub fn with_bottom_content_inset(self, px: f32) -> Scrollable
pub fn with_bottom_content_inset(self, px: f32) -> Scrollable
Reserve a clean bottom edge inside the viewport for a sticky-footer separation. Content is clipped above this lane and the effective viewport used by scrolling shrinks by the same amount, so the final content remains reachable.
pub fn with_compact_bottom_content_inset(
self,
max_viewport_height: f32,
px: f32,
) -> Scrollable
pub fn with_compact_bottom_content_inset( self, max_viewport_height: f32, px: f32, ) -> Scrollable
Reserve a larger clean bottom edge only for a compact resolved viewport. This is evaluated after layout, so callers need not guess how a max-height dialog will shrink on a short display.
pub fn content_viewport_rect(&self) -> Rect
pub fn content_viewport_rect(&self) -> Rect
The actual interactive/paint viewport after any active sticky-footer separation has been reserved.
pub fn set_content_size(&mut self, w: f32, h: f32)
pub fn set_viewport_size(&mut self, w: f32, h: f32)
pub fn offset_x(&self) -> f32
pub fn offset_y(&self) -> f32
pub fn max_offset_y(&self) -> f32
pub fn set_offset_y(&mut self, y: f32)
pub fn vertical_overflows(&self) -> bool
pub fn horizontal_overflows(&self) -> bool
pub fn horizontal_overflows(&self) -> bool
Whether the content is wider than the viewport shows, so it scrolls sideways.
pub fn set_viewport_rect(&mut self, rect: Rect)
pub fn set_viewport_rect(&mut self, rect: Rect)
For a manually-driven (child-less) Scrollable, when the caller paints
content itself rather than through this widget’s draw. Pair with
Scrollable::set_content_size.
pub fn draw_bar_overlay( &self, scene: &mut Scene, transform: Affine, theme: &Theme, )
pub fn momentum_speed(&self) -> f32
pub fn scroll_by(&mut self, dx: f32, dy: f32)
pub fn scroll_by(&mut self, dx: f32, dy: f32)
Move the content by dx, dy: the hand (a wheel, a key, a bar
drag) or the caller takes over from any jump in progress.
pub fn fling(&mut self, vx: f32, vy: f32)
pub fn fling(&mut self, vx: f32, vy: f32)
Glide on at vx, vy (logical pixels per second, in content
space); zero stops a glide. Only along the axes this view scrolls:
a flick that wavers sideways in a list that scrolls up and down
glides up or down alone.
pub fn advance_momentum(&mut self, now: Instant)
pub fn advance_momentum(&mut self, now: Instant)
Advance a glide to now (the frame’s time): by the time since the
last step, or since the fling began — never by an idle gap before it.
pub fn tick(&mut self, dt: f32)
pub fn tick(&mut self, dt: f32)
Advance a glide by dt seconds (crate::virtual_viewport::glide_step).
pub fn with_focus_reveal(self) -> Scrollable
pub fn with_focus_reveal(self) -> Scrollable
Reveal newly focused controls while allowing manual scroll away from unchanged focus. Opt-in for form panels; ordinary scrolling is unchanged.
pub fn reveal_on_layout(&mut self, id: impl Into<String>)
pub fn reveal_on_layout(&mut self, id: impl Into<String>)
Show the descendant whose id is id (Widget::test_id) once a layout
has placed it, moving as little as it takes: what just arrived on a
surface the person pans (a place put on the desk) is where they can
see it. The latest asked wins; one never placed is never shown.
pub fn scroll_into_view(&mut self, x: f32, y: f32, w: f32, h: f32)
pub fn scroll_into_view(&mut self, x: f32, y: f32, w: f32, h: f32)
Show the content rect at x, y (w by h, in content
coordinates), moving as little as it takes. A jump the person’s hand
or key just asked for moves there (crate::motion::ScrollTo): it
glides when short and fades in at the target when long; one nobody
asked for (a sync, a restored view) or an agent’s lands at once.
pub fn scroll_into_view_at_once(&mut self, x: f32, y: f32, w: f32, h: f32)
pub fn scroll_into_view_at_once(&mut self, x: f32, y: f32, w: f32, h: f32)
Self::scroll_into_view that lands at once: keyboard focus moving
to a control out of view while tabbing.
Trait Implementations§
§impl ActionControls for Scrollable
impl ActionControls for Scrollable
§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 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 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 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 has_pending_control_invocation(&self) -> bool
fn has_pending_control_invocation(&self) -> bool
§impl Described for Scrollable
impl Described for Scrollable
§fn set_props(&mut self, props: ScrollProps) -> bool
fn set_props(&mut self, props: ScrollProps) -> bool
The same scroll stays, and keeps its position, while its content changes in place.
type Props = ScrollProps
§fn from_props(_key: &str, props: ScrollProps) -> Scrollable
fn from_props(_key: &str, props: ScrollProps) -> Scrollable
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.§impl SlotViews for Scrollable
The content of the scroll: one view, or none.
impl SlotViews for Scrollable
The content of the scroll: one view, or none.
fn view_mut(&mut self, index: usize) -> Option<&mut Box<dyn Widget>>
fn insert(&mut self, _index: usize, view: Box<dyn Widget>)
fn remove(&mut self, _index: usize)
fn move_view(&mut self, _from: usize, _to: usize)
fn replace(&mut self, _index: usize, view: Box<dyn Widget>)
fn is_empty(&self) -> bool
§impl Widget for Scrollable
impl Widget for Scrollable
§fn layout_info(&self) -> Option<LayoutInfo>
fn layout_info(&self) -> Option<LayoutInfo>
Which way its content may go on past it.
§fn update(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static)) -> bool
fn update(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static)) -> bool
A glide in progress advances here, once per frame, and moves only
this view: like a wheel that only pans
(crate::widget::note_view_only_pan) it is no change of the model,
so it does not report one; reporting it synced the app and
republished its resources on every frame of every fling. The host
places the content where the glide took it
(crate::widget::note_layout_moved).
§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))
Its content under what the view shows of it: a long column below visits only the children near the viewport.
§fn is_focusable(&self) -> bool
fn is_focusable(&self) -> bool
Non-overflowing wrappers stay out of the tab order.
§fn needs_redraw(&self) -> bool
fn needs_redraw(&self) -> bool
Wheel activity damages the viewport immediately. During the opaque hold the thumb stays unchanged; only the fade itself needs new damage.
§fn is_layout_dirty(&self) -> bool
fn is_layout_dirty(&self) -> bool
A scroll demands apply_layout even though nothing changed size.
§fn layout_needs_measure(&self) -> bool
fn layout_needs_measure(&self) -> bool
scroll_dirty alone must NOT force a full compute_layout — only a
measure-dirty descendant does — or every scroll frame
re-solves the whole content tree.
§fn accessibility(&self) -> Option<AccessNode>
fn accessibility(&self) -> Option<AccessNode>
The meaningful label belongs to whatever it wraps; a region that
becomes a keyboard stop carries its own (Self::with_label).
§fn take_structure_change(&mut self) -> StructureChange
fn take_structure_change(&mut self) -> StructureChange
The view adds no structure of its own but a content replaced in place, which is described: a change its content can describe (a long list mounting the rows a scroll brought near) stays described.
§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 primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn apply_primary_vertical_scroll( &mut self, action: PrimaryScrollAction, ) -> PrimaryScrollResult
§fn child_clip_rect(&self) -> Option<Rect>
fn child_clip_rect(&self) -> Option<Rect>
§fn sync(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static))
fn sync(&mut self, s: &(dyn Any + 'static), p: &(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 build_layout( &mut self, taffy: &mut TaffyTree, theme: &Theme, node_map: &mut HashMap<NodeId, *mut dyn Widget>, ) -> NodeId
§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 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 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 name(&self) -> &'static str
fn set_focus(&mut self, focused: bool)
fn is_focused(&self) -> bool
fn wants_pointer_capture(&self) -> 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 until an unrelated event woke it.§fn next_wake_deadline(&self) -> Option<Instant>
fn next_wake_deadline(&self) -> Option<Instant>
§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 get_rect(&self) -> Rect
fn get_rect(&self) -> Rect
§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 take_structure_dirty(&mut self) -> bool
fn take_structure_dirty(&mut self) -> bool
§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 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_interaction_environment(&mut self, environment: InteractionEnvironment)
fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
§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 measure( &mut self, _known: Size<Option<f32>>, _available: Size<AvailableSpace>, _text_renderer: &mut TextRenderer, ) -> Size<f32>
§fn observe_physical_input(&mut self, _input: PhysicalInput)
fn observe_physical_input(&mut self, _input: PhysicalInput)
§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 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 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 test_rects(&self) -> Vec<(String, Rect)>
fn test_rects(&self) -> Vec<(String, Rect)>
Widget::get_rect; zero-area entries are dropped.§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 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 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 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_full_bleed(&mut self, _full_bleed: bool)
fn set_full_bleed(&mut self, _full_bleed: 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 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 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 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>
§fn take_focus_request(&mut self) -> Option<String>
fn take_focus_request(&mut self) -> Option<String>
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 moreSelf::accessibility reports this subtree hidden, for a
host that asks it of every node to prune focus traversal. Widgets
whose node is costly to build (text values, per-block children, a
translated name) answer without building it: the focus walk asks
every widget in the window on every recomputation. Any override must
agree with accessibility(); debug builds check it in the walk.§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 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 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 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 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 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 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 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 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 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 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.§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 Scrollable
impl !RefUnwindSafe for Scrollable
impl !Send for Scrollable
impl !Sync for Scrollable
impl Unpin for Scrollable
impl UnsafeUnpin for Scrollable
impl !UnwindSafe for Scrollable
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