pub trait Widget<Msg = Callback> {
Show 174 methods
// Required methods
fn style(&self) -> Style;
fn children(&self) -> &[Box<dyn Widget<Msg>>];
fn paint(
&self,
bounds: Rect,
status: Status,
theme: &Theme,
scene: &mut Scene,
);
fn on_click(&self) -> Option<Msg>;
// Provided methods
fn opaque(&self) -> bool { ... }
fn key(&self) -> Option<u64> { ... }
fn debug_name(&self) -> &'static str { ... }
fn semantics(&self) -> Option<SemanticsProperties> { ... }
fn describes(&self) -> Option<Description> { ... }
fn on_edit(&self, _edit: &mut Edit, _key: &Key) -> Option<Msg> { ... }
fn positional_click(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
_height: f32,
) -> Option<Msg> { ... }
fn cursor_icon(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
_height: f32,
) -> Option<Cursor> { ... }
fn cursor_at(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
_scroll_cursor: usize,
) -> Option<usize> { ... }
fn text_metrics(
&self,
_width: f32,
_cursor: usize,
) -> Option<(f32, f32, f32, f32)> { ... }
fn text_viewport(&self, _rect: Rect) -> Option<Rect> { ... }
fn caret_vertical(
&self,
_width: f32,
_cursor: usize,
_down: bool,
_page: bool,
_goal_x: Option<f32>,
) -> Option<(usize, f32)> { ... }
fn selected_text(&self, _edit: &Edit) -> Option<String> { ... }
fn text_value(&self) -> Option<&str> { ... }
fn selection_text(&self) -> Option<&str> { ... }
fn selection_hit(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
) -> Option<usize> { ... }
fn selection_grip(
&self,
_width: f32,
_index: usize,
_start: bool,
) -> Option<SelectionHandle> { ... }
fn area_toolbar(
&self,
_context: ToolbarContext,
) -> Option<Option<&dyn Widget<Msg>>> { ... }
fn region_toolbar(
&self,
_context: ToolbarContext,
_width: f32,
_range: (usize, usize),
) -> Option<(Rect, &dyn Widget<Msg>)> { ... }
fn takes_typing(&self) -> bool { ... }
fn replace_value(&self, _value: String) -> Option<Msg> { ... }
fn word_at(&self, _index: usize) -> Option<(usize, usize)> { ... }
fn selection_handles(
&self,
_width: f32,
_edit: &Edit,
_scroll_y: f32,
) -> Option<[SelectionHandle; 2]> { ... }
fn selection_toolbar(
&self,
_context: ToolbarContext,
) -> Option<&dyn Widget<Msg>> { ... }
fn selection_anchor(
&self,
_width: f32,
_edit: &Edit,
_scroll_y: f32,
) -> Option<Rect> { ... }
fn edit_action(&self) -> Option<EditAction> { ... }
fn shortcut_bindings(&self) -> &[(KeyStroke, Intent)] { ... }
fn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)] { ... }
fn action_bindings(&self) -> &[(Intent, Msg)] { ... }
fn action_listeners(&self) -> &[(Intent, Msg)] { ... }
fn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>> { ... }
fn focusable(&self) -> bool { ... }
fn autofocus(&self) -> bool { ... }
fn descendants_focusable(&self) -> bool { ... }
fn focus_skip_traversal(&self) -> bool { ... }
fn focus_order(&self) -> Option<f32> { ... }
fn focus_group(&self) -> bool { ... }
fn autofill_hints(&self) -> &[AutofillHint] { ... }
fn autofill_group(&self) -> bool { ... }
fn draws_own_focus(&self) -> bool { ... }
fn draggable(&self) -> bool { ... }
fn drag_track(&self) -> DragTrack { ... }
fn on_drag(&self, _fraction: f32) -> Option<Msg> { ... }
fn on_drag_start(&self, _fraction: f32) -> Option<Msg> { ... }
fn on_drag_end(&self, _fraction: f32) -> Option<Msg> { ... }
fn on_drag_delta(&self, _dx: f32) -> Option<Msg> { ... }
fn hero_tag(&self) -> Option<u64> { ... }
fn drag_payload(&self) -> Option<u64> { ... }
fn drag_needs_long_press(&self) -> bool { ... }
fn drag_ghost_opacity(&self) -> f32 { ... }
fn on_dropped(&self, _accepted: bool) -> Option<Msg> { ... }
fn drop_zone(&self) -> bool { ... }
fn accepts_drag(&self, _payload: u64) -> bool { ... }
fn on_drop(&self, _payload: u64) -> Option<Msg> { ... }
fn reorder_index(&self) -> Option<usize> { ... }
fn on_reorder(&self, _to: usize) -> Option<Msg> { ... }
fn reorder_axis(&self) -> ReorderAxis { ... }
fn reorder_inserts(&self) -> bool { ... }
fn reorder_draggable(&self) -> bool { ... }
fn reorder_droppable(&self) -> bool { ... }
fn reorder_announcement(&self, _to: usize) -> Option<String> { ... }
fn announce(&self) -> Option<String> { ... }
fn stack(&self) -> bool { ... }
fn sticky_header(&self) -> bool { ... }
fn custom_layout(&self) -> Option<CustomLayout<'_>> { ... }
fn continuous(&self) -> bool { ... }
fn repaint_boundary(&self) -> bool { ... }
fn scroll_content(&self) -> Option<&dyn Widget<Msg>> { ... }
fn virtual_list(&self, _viewport: Size) -> Option<VirtualList<'_, Msg>> { ... }
fn page_view(&self) -> Option<PagedView<'_, Msg>> { ... }
fn on_page_changed(&self, _page: usize) -> Option<Msg> { ... }
fn on_scroll(&self, _position: ScrollPosition) -> Option<Msg> { ... }
fn scroll_grain(&self) -> f32 { ... }
fn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)> { ... }
fn overflow_box(&self) -> Option<Overflow> { ... }
fn constraints_transform(&self) -> Option<ConstraintsTransform> { ... }
fn animated_size(&self) -> Option<SizeAnimation> { ... }
fn size_factor(&self) -> Option<(f32, f32)> { ... }
fn clips_to_box(&self) -> bool { ... }
fn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>> { ... }
fn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>> { ... }
fn scroll_axis(&self) -> Axis { ... }
fn scroll_physics(&self) -> Option<ScrollPhysics> { ... }
fn scrollbars(&self) -> Option<Scrollbars> { ... }
fn thumb_visibility(&self) -> Option<bool> { ... }
fn ime(&self) -> Ime { ... }
fn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)> { ... }
fn overlay_dismiss(&self) -> Option<Msg> { ... }
fn overlay_scrim(&self, _theme: &Theme) -> Option<Color> { ... }
fn overlay_traps_focus(&self) -> bool { ... }
fn anim_target(&self) -> Option<f32> { ... }
fn anim_transform(&self) -> Option<TransformValues> { ... }
fn anim_duration(&self) -> f32 { ... }
fn anim_curve(&self) -> Curve { ... }
fn opacity_group(&self) -> Option<f32> { ... }
fn anim_color(&self) -> Option<Color> { ... }
fn anim_size(&self) -> Option<Size> { ... }
fn anim_radius(&self) -> Option<BorderRadius> { ... }
fn anim_padding(&self) -> Option<Insets> { ... }
fn anim_offset(&self) -> Option<(f32, f32)> { ... }
fn anim_pins(&self) -> Option<Positioning> { ... }
fn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)> { ... }
fn anim_text_style(&self) -> Option<TextStyle> { ... }
fn alignment_geometry(&self) -> Option<AlignmentGeometry> { ... }
fn transform_translate(&self) -> Option<(f32, f32)> { ... }
fn translate_fraction(&self) -> Option<(f32, f32)> { ... }
fn transform_scale(&self) -> Option<(f32, f32, Alignment)> { ... }
fn transform_rotate(&self) -> Option<(f32, Alignment)> { ... }
fn clip_shape(&self) -> Option<ClipShape> { ... }
fn style_themed(&self, _theme: &Theme) -> Style { ... }
fn theme_override(&self, _inherited: &Theme) -> Option<Box<Theme>> { ... }
fn media_override(&self, _inherited: MediaQuery) -> Option<MediaQuery> { ... }
fn scaffold_override(&self) -> Option<ScaffoldInfo> { ... }
fn scroll_behavior_override(&self) -> Option<ScrollBehavior> { ... }
fn build_themed(&self, _theme: &Theme) { ... }
fn build_in(&self, _id: WidgetId, _runtime: &Runtime, theme: &Theme) { ... }
fn expand(&self, _id: WidgetId, _runtime: &Runtime, _theme: &Theme) { ... }
fn switches(&self) -> bool { ... }
fn system_ui_style(&self) -> Option<SystemUiOverlayStyle> { ... }
fn ink(&self, _theme: &Theme) -> Option<InkStyle> { ... }
fn foreground(&self, _theme: &Theme) -> Option<BoxDecoration> { ... }
fn layer_filter(&self, _cx: FilterContext) -> Option<LayerFilter> { ... }
fn backdrop_group(&self) -> bool { ... }
fn text_baseline(&self, _theme: &Theme) -> Option<f32> { ... }
fn ignores_baseline(&self) -> bool { ... }
fn fill_axes(&self, _theme: &Theme) -> FillAxes { ... }
fn soft_extent(&self) -> FillAxes { ... }
fn main_axis_floor(&self, _theme: &Theme) -> Option<f32> { ... }
fn tile_shape(&self) -> Option<f32> { ... }
fn positioned(&self) -> Option<Positioning> { ... }
fn stack_fit(&self) -> StackFit { ... }
fn stack_measured(&self) -> bool { ... }
fn stack_clips(&self) -> bool { ... }
fn stack_direction(&self) -> Option<TextDirection> { ... }
fn stack_visible(&self) -> Option<usize> { ... }
fn keep_visible(&self, _size: Size, _theme: &Theme) -> Option<KeepVisible> { ... }
fn scroll_reverse(&self) -> bool { ... }
fn scroll_padding(&self) -> Insets { ... }
fn baseline_target(&self) -> Option<f32> { ... }
fn clip_path(&self) -> Option<&Path> { ... }
fn dismissible(&self) -> Option<DismissSpec> { ... }
fn on_dismissed(&self, _direction: DismissDirection) -> Option<Msg> { ... }
fn sheet(&self) -> Option<&SheetSpec> { ... }
fn on_sheet_dismissed(&self) -> Option<Msg> { ... }
fn refresh(&self) -> Option<RefreshSpec> { ... }
fn on_refresh(&self) -> Option<Msg> { ... }
fn barrier(&self) -> Option<ModalBarrier> { ... }
fn interactive(&self) -> Option<(f32, f32)> { ... }
fn fitted(&self) -> Option<BoxFit> { ... }
fn rotated_quarter_turns(&self) -> Option<i32> { ... }
fn navigator(&self) -> Option<(f32, bool)> { ... }
fn navigator_gesture(&self) -> bool { ... }
fn navigator_clips(&self) -> bool { ... }
fn navigator_retained(&self) -> usize { ... }
fn on_long_press(&self) -> Option<Msg> { ... }
fn on_double_tap(&self) -> Option<Msg> { ... }
fn on_secondary_tap(&self) -> Option<Msg> { ... }
fn pointer_listener(&self) -> bool { ... }
fn on_pointer_event(&self, _event: ListenerEvent) -> Vec<Msg> { ... }
fn hover_region(&self) -> Option<HoverRegion> { ... }
fn on_hover_event(&self, _event: HoverEvent) -> Option<Msg> { ... }
fn pan_axis(&self) -> Option<PanAxis> { ... }
fn on_pan(&self, _event: PanEvent) -> Option<Msg> { ... }
fn wants_title_bar(&self) -> bool { ... }
fn title_bar_role(&self) -> Option<TitleBarRole> { ... }
fn pan_value(
&self,
_event: PanEvent,
_value: f32,
_rtl: bool,
) -> Option<f32> { ... }
fn on_value_release(&self, _value: f32) -> Option<Msg> { ... }
fn on_key(&self, _key: &Key) -> KeyResponse<Msg> { ... }
fn measure(&self, _theme: &Theme) -> Option<MeasureFn<'_>> { ... }
fn measure_key(&self, _theme: &Theme) -> Option<u64> { ... }
}Expand description
A widget: a node of the tree that is laid out by Widget::style, painted by
Widget::paint and asked what a click means by Widget::on_click; Msg is the
message it emits when the reader interacts with it.
Only those four are required. Everything else — focus, scrolling, editing, semantics, the hooks a container uses to build its children late — has a default that does nothing, so a widget implements what it takes part in and no more.
Required Methods§
Provided Methods§
Sourcefn opaque(&self) -> bool
fn opaque(&self) -> bool
Whether a press that lands on this widget and on nothing inside it stops here.
An ordinary widget is transparent to a press it has no message for: the press carries on to whatever is behind. That is right for a label on a card and wrong for a surface — a floating panel, a sheet, a bar — where the thing behind is the page and the press reaching it means the panel is dismissed by a click on its own padding, or on a row that said it was unavailable.
It is registered before the widget’s children, so anything inside still wins;
all this catches is what nothing inside claimed. false by default, because a
widget that stops presses it does not use is the surprising one.
This is not crate::AbsorbPointer, which discards the whole subtree’s targets.
Here the subtree keeps every one of them and only the gaps between them are
closed.
Sourcefn key(&self) -> Option<u64>
fn key(&self) -> Option<u64>
Stable identity key (independent of the position among siblings).
None = positional identity. See crate::Keyed.
Sourcefn debug_name(&self) -> &'static str
fn debug_name(&self) -> &'static str
Short name of the widget — for the inspector and diagnostic dumps.
Defaults to the name of the concrete type, without module path or
generics (each implementation gets its own monomorphised copy of this
default body). Transparent wrappers (Box, crate::Keyed…) delegate
to their content.
Sourcefn semantics(&self) -> Option<SemanticsProperties>
fn semantics(&self) -> Option<SemanticsProperties>
The widget’s accessibility annotation (role, label, value, state),
exposed to assistive technologies through the AccessKit tree. None =
no semantics of its own (a layout container — its children, though,
may have some). See frus_core::SemanticsProperties.
Sourcefn describes(&self) -> Option<Description>
fn describes(&self) -> Option<Description>
What this widget says about its child’s subtree, when it knows something the
child cannot know about itself — the crate::Semantics wrapper, and nothing else
so far.
Widget::semantics is a widget answering for itself and covers the ordinary
case. This covers the one it cannot: a caller handed an already-built widget, with
no way in. Read in one place in the walk, the way a
ModalBarrier is — the subtree is walked exactly as
usual and what it produced is reconciled afterwards, so a widget deep inside
annotates itself without knowing anything is speaking for it.
Sourcefn on_edit(&self, _edit: &mut Edit, _key: &Key) -> Option<Msg>
fn on_edit(&self, _edit: &mut Edit, _key: &Key) -> Option<Msg>
Applies a key to the focused widget: mutates the edit state (cursor/selection) and returns a message if the value changes.
Sourcefn positional_click(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
_height: f32,
) -> Option<Msg>
fn positional_click( &self, _local_x: f32, _local_y: f32, _width: f32, _height: f32, ) -> Option<Msg>
Positional click: a message emitted according to where the click landed (local
coordinates from the widget’s top-left corner, within the width × height box), taking
priority over on_click. For clickable sub-regions — e.g. the
suffix icon of a crate::TextField (clear / reveal) or a chart point
(milestone 221). None (the default) = no sub-region; the shell falls back to on_click.
Sourcefn cursor_icon(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
_height: f32,
) -> Option<Cursor>
fn cursor_icon( &self, _local_x: f32, _local_y: f32, _width: f32, _height: f32, ) -> Option<Cursor>
Shape of the system cursor wanted at the local position (local_x, local_y) inside
the widget’s width × height box (milestone 205): Some(Cursor::Pointer) over a clickable
sub-region (a suffix icon…), None (the default) = no opinion, the shell keeps the default
cursor. Does not affect clicking; this is purely the pointer’s appearance on hover.
Sourcefn cursor_at(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
_scroll_cursor: usize,
) -> Option<usize>
fn cursor_at( &self, _local_x: f32, _local_y: f32, _width: f32, _scroll_cursor: usize, ) -> Option<usize>
Cursor index matching a local position (px from the widget’s top-left
corner) — for placing the caret on click. local_y picks the line in a
multi-line field (ignored on a single line).
width = the field’s width, scroll_cursor = the cursor from which to recompute
the current scroll (the same one the render used), so that a click lands right
even when the text is scrolled. None = not a text field.
Sourcefn text_metrics(
&self,
_width: f32,
_cursor: usize,
) -> Option<(f32, f32, f32, f32)>
fn text_metrics( &self, _width: f32, _cursor: usize, ) -> Option<(f32, f32, f32, f32)>
SingleChildScrollView metrics of a multi-line field, for a widget width and a cursor:
(content height, visible box height, caret top, caret height), in content
space (px). The shell uses them to register the scrollable region and to keep
the caret in view. None otherwise.
Sourcefn text_viewport(&self, _rect: Rect) -> Option<Rect>
fn text_viewport(&self, _rect: Rect) -> Option<Rect>
Frame (input box) of a multi-line field within its rect — the area where
the text scrolls, below the label. Used to place the scrollbar and the
scrollable region exactly on the box. None otherwise.
Sourcefn caret_vertical(
&self,
_width: f32,
_cursor: usize,
_down: bool,
_page: bool,
_goal_x: Option<f32>,
) -> Option<(usize, f32)>
fn caret_vertical( &self, _width: f32, _cursor: usize, _down: bool, _page: bool, _goal_x: Option<f32>, ) -> Option<(usize, f32)>
Moves the caret vertically in a multi-line field and returns
(new index, visual column used).
down: down (true) or up.page: jump by a page (the visible height) rather than by a line.goal_x: remembered target visual column (px) to preserve while crossing shorter lines;None= start from the current column. The returned value is the column to remember again for the next jump.- Line:
Noneif already on the first/last line (or not multi-line) — the shell then moves the focus instead. - Page: clamped to the field (it never leaves it);
Noneonly when not multi-line.
Sourcefn selected_text(&self, _edit: &Edit) -> Option<String>
fn selected_text(&self, _edit: &Edit) -> Option<String>
The currently selected text (for copy/cut).
Sourcefn text_value(&self) -> Option<&str>
fn text_value(&self) -> Option<&str>
The field’s whole value, if this widget is a text field — to give the
IME its input context (suggestions). None otherwise.
Sourcefn selection_text(&self) -> Option<&str>
fn selection_text(&self) -> Option<&str>
The words this widget shows, if it takes part in a
SelectionArea: a Text, and nothing that is
not made of words. The walk registers such a widget as a text stop when it is inside an
area, so that a selection can begin, end and pass through it.
Sourcefn selection_hit(
&self,
_local_x: f32,
_local_y: f32,
_width: f32,
) -> Option<usize>
fn selection_hit( &self, _local_x: f32, _local_y: f32, _width: f32, ) -> Option<usize>
The character boundary of selection_text nearest a local
position (px from the widget’s top-left corner) in a box width wide — the layout the
widget was drawn with, which is what a press is hit against.
Sourcefn selection_grip(
&self,
_width: f32,
_index: usize,
_start: bool,
) -> Option<SelectionHandle>
fn selection_grip( &self, _width: f32, _index: usize, _start: bool, ) -> Option<SelectionHandle>
The handle that hangs from character boundary index of this widget’s words — the
start handle when start, the end handle otherwise — in local coordinates, for a widget
width wide: where it is painted, and so where a finger takes it. None for anything
that is not a text.
Sourcefn area_toolbar(
&self,
_context: ToolbarContext,
) -> Option<Option<&dyn Widget<Msg>>>
fn area_toolbar( &self, _context: ToolbarContext, ) -> Option<Option<&dyn Widget<Msg>>>
The bar a SelectionArea offers over its selection, for
context, when the application has said what it holds
(SelectionArea::selection_toolbar): Some
of the bar, or Some(None) for no bar at all. None for anything else — and for an area
that was told nothing — whose texts then offer Copy and Select all.
Sourcefn region_toolbar(
&self,
_context: ToolbarContext,
_width: f32,
_range: (usize, usize),
) -> Option<(Rect, &dyn Widget<Msg>)>
fn region_toolbar( &self, _context: ToolbarContext, _width: f32, _range: (usize, usize), ) -> Option<(Rect, &dyn Widget<Msg>)>
The bar over the part of a selection area’s selection that lies in this widget —
range, in characters — for context, and the box it is placed against in local
coordinates, for a widget width wide. None for anything that is not a text, or when
the list for context is empty.
Sourcefn takes_typing(&self) -> bool
fn takes_typing(&self) -> bool
Whether this widget takes typing: a field that can be changed, which is what
the software keyboard is for. A text field that may only be read and selected — a
read_only one, a Text made
selectable — answers false: it has a caret and a
selection, and no use for a keyboard sliding up over the words being read.
Defaults to whether it holds a text value at all.
Sourcefn replace_value(&self, _value: String) -> Option<Msg>
fn replace_value(&self, _value: String) -> Option<Msg>
The message that puts value in this field: the one typing would have produced,
for a value the framework restores rather than the user typing it.
Undo needs it and nothing else does. The value is the application’s — a field owns its caret and not its text — so an undo cannot reach in and set what is on screen; it has to go back through a message like any other edit, or the next frame would paint the value the application still holds.
Sourcefn word_at(&self, _index: usize) -> Option<(usize, usize)>
fn word_at(&self, _index: usize) -> Option<(usize, usize)>
Range (start, end) of the word around the given index (for double-click).
Sourcefn selection_handles(
&self,
_width: f32,
_edit: &Edit,
_scroll_y: f32,
) -> Option<[SelectionHandle; 2]>
fn selection_handles( &self, _width: f32, _edit: &Edit, _scroll_y: f32, ) -> Option<[SelectionHandle; 2]>
The two handles of the selection in edit, start then end, for a field width
wide whose content is scrolled down by scroll_y — where they are painted, and
so where a finger takes them. None when there is no selection, or this is not
a text field.
Sourcefn selection_toolbar(
&self,
_context: ToolbarContext,
) -> Option<&dyn Widget<Msg>>
fn selection_toolbar( &self, _context: ToolbarContext, ) -> Option<&dyn Widget<Msg>>
The bar this field shows over its selection (Cut, Copy, Paste, Select all — see
crate::ToolbarItem) for context, or None when there is none to show: this is
not a text field, or the application’s list for that context is empty.
The runtime asks it when the shell has marked this field as showing its bar, and
floats the answer over everything, anchored on selection_anchor.
One bar per context, built once and kept — a bar is a widget the walk borrows for
the frame, and two different lists must not share an identity.
Sourcefn selection_anchor(
&self,
_width: f32,
_edit: &Edit,
_scroll_y: f32,
) -> Option<Rect>
fn selection_anchor( &self, _width: f32, _edit: &Edit, _scroll_y: f32, ) -> Option<Rect>
The box the bar is placed against, in the field’s local coordinates: the
selection’s, or the caret’s when nothing is selected. Like
selection_handles it is the paint’s own geometry.
Sourcefn edit_action(&self) -> Option<EditAction>
fn edit_action(&self) -> Option<EditAction>
The editing action pressing this widget performs on the focused field, for a
button of the bar that carries no message (see crate::EditAction).
Sourcefn shortcut_bindings(&self) -> &[(KeyStroke, Intent)]
fn shortcut_bindings(&self) -> &[(KeyStroke, Intent)]
Keystrokes this subtree binds to intents — see crate::Shortcuts.
Sourcefn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)]
fn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)]
Keystrokes this subtree binds straight to messages — see
crate::CallbackShortcuts.
Sourcefn action_bindings(&self) -> &[(Intent, Msg)]
fn action_bindings(&self) -> &[(Intent, Msg)]
Intents this subtree answers — see crate::Actions.
Sourcefn action_listeners(&self) -> &[(Intent, Msg)]
fn action_listeners(&self) -> &[(Intent, Msg)]
Intents this subtree watches without answering — see
crate::ActionListener.
Sourcefn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>>
fn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>>
Every keystroke reaching this subtree, handed to a closure — see
crate::KeyboardListener. None (the default) is not a listener.
Sourcefn autofocus(&self) -> bool
fn autofocus(&self) -> bool
If true, a focusable widget takes the focus when it appears: a menu’s first
row when the menu opens, a field on a screen made to type into (milestone 605). Where
the focus came from is remembered, and it goes back there when this one goes.
Sourcefn descendants_focusable(&self) -> bool
fn descendants_focusable(&self) -> bool
If false, nothing inside this subtree can take focus — the reference’s
ExcludeFocus. A dimmed panel behind a sheet is still drawn and still measured;
it simply stops being somewhere Tab can land.
Sourcefn focus_skip_traversal(&self) -> bool
fn focus_skip_traversal(&self) -> bool
If true, this subtree’s focus stops are skipped by Tab while remaining
focusable by a click — the reference’s ExcludeFocusTraversal. The two are
separate questions: a toolbar button may be reachable with the pointer and still
not belong in the keyboard’s order.
Sourcefn focus_order(&self) -> Option<f32>
fn focus_order(&self) -> Option<f32>
A traversal order for this subtree’s focus stops, smallest first — the
reference’s NumericFocusOrder. None leaves them in tree order, which is where
everything sits until someone says otherwise.
Sourcefn focus_group(&self) -> bool
fn focus_group(&self) -> bool
If true, this subtree is a traversal group: an order set inside it is
resolved among its own members and nowhere else, so a reordered dialog does not
reshuffle the page behind it.
Sourcefn autofill_hints(&self) -> &[AutofillHint]
fn autofill_hints(&self) -> &[AutofillHint]
What this field is for, so the platform can fill it in — see
AutofillHint. Empty (the default) is a field that takes
no part in autofill at all.
A list, because a field can legitimately be more than one thing: a sign-in box taking an email address is the username and the email.
Sourcefn autofill_group(&self) -> bool
fn autofill_group(&self) -> bool
If true, this subtree’s fields are one form — the reference’s
AutofillGroup. A service shown a password with no username beside it has
nothing to save the pair under.
Sourcefn draws_own_focus(&self) -> bool
fn draws_own_focus(&self) -> bool
If true, the widget draws its focus indicator itself (the driver then
does not stroke the generic ring). E.g. TextField.
Sourcefn draggable(&self) -> bool
fn draggable(&self) -> bool
If true, the widget responds to pointer dragging (sliders, handles).
Sourcefn drag_track(&self) -> DragTrack
fn drag_track(&self) -> DragTrack
Where along a draggable widget its drag lands (milestone
648): how far in from each end the travel starts, and whether it runs from the
right in a right-to-left reading direction. The fraction on_drag
and its edges are given is measured along that travel. The default is the whole
width, left to right.
Sourcefn on_drag(&self, _fraction: f32) -> Option<Msg>
fn on_drag(&self, _fraction: f32) -> Option<Msg>
Message produced while dragging, fraction being the relative horizontal
position (0.0..=1.0) within the widget’s bounds.
Sourcefn on_drag_start(&self, _fraction: f32) -> Option<Msg>
fn on_drag_start(&self, _fraction: f32) -> Option<Msg>
Message produced when a value drag begins — on the press, before the
first on_drag.
With on_drag_end it brackets the stream: on_drag fires
on every pixel of the movement, and an application that saves to disk, seeks a
video or asks the network on each of those does it sixty times a second. The
bracket is what lets it do the cheap thing while the finger is down and the
expensive one when it lifts — and without an end there is no moment at which
to do it at all.
Not to be confused with on_dropped, which belongs to
drag-and-drop: that one moves a thing, this one changes a number.
Sourcefn on_drag_end(&self, _fraction: f32) -> Option<Msg>
fn on_drag_end(&self, _fraction: f32) -> Option<Msg>
Message produced when a value drag ends — on the release, with the fraction the pointer finished on.
See on_drag_start.
Sourcefn on_drag_delta(&self, _dx: f32) -> Option<Msg>
fn on_drag_delta(&self, _dx: f32) -> Option<Msg>
Message produced by a horizontal drag expressed as a delta: dx is the
movement (logical px) since the last event. For handles that accumulate
(column resizing), unlike on_drag (an absolute fraction,
e.g. a slider). The shell tries it before on_drag; a widget implements
only one of the two.
Sourcefn hero_tag(&self) -> Option<u64>
fn hero_tag(&self) -> Option<u64>
If this widget is a shared element, its tag. Two heroes with the same tag on
the two sides of a route transition are one thing in two places.
See crate::Hero.
Sourcefn drag_payload(&self) -> Option<u64>
fn drag_payload(&self) -> Option<u64>
If this widget can be picked up and dropped elsewhere, what it carries.
See crate::Draggable.
Sourcefn drag_needs_long_press(&self) -> bool
fn drag_needs_long_press(&self) -> bool
Does this item lift on a long press rather than on the first movement? The answer inside a scrollable, where a plain drag belongs to the scroll.
It is asked of both kinds of lift — a crate::Draggable carrying a payload, and a
crate::ReorderableList row carrying itself — because the question is the same
one: a list that stops scrolling is a worse bug than an item that does not move.
Sourcefn drag_ghost_opacity(&self) -> f32
fn drag_ghost_opacity(&self) -> f32
How solid the item left behind looks while a copy of it is being dragged.
Sourcefn on_dropped(&self, _accepted: bool) -> Option<Msg>
fn on_dropped(&self, _accepted: bool) -> Option<Msg>
Message sent when a drag of this item ends, true if a target took it.
Sourcefn drop_zone(&self) -> bool
fn drop_zone(&self) -> bool
Is this widget a drop target? See crate::DragTarget.
Sourcefn accepts_drag(&self, _payload: u64) -> bool
fn accepts_drag(&self, _payload: u64) -> bool
Would this target take payload? Only asked of a drop target.
Sourcefn on_drop(&self, _payload: u64) -> Option<Msg>
fn on_drop(&self, _payload: u64) -> Option<Msg>
Message sent when an accepted item is dropped on this target.
Sourcefn reorder_index(&self) -> Option<usize>
fn reorder_index(&self) -> Option<usize>
If this widget is a reorderable header, its column index. The shell uses it to identify the source column (on press) and the target column (under the pointer on release) of a reordering drag.
Sourcefn on_reorder(&self, _to: usize) -> Option<Msg>
fn on_reorder(&self, _to: usize) -> Option<Msg>
Message emitted when this header (the source) is dropped on column to.
The widget knows its own index and the on_reorder(from, to) callback.
Sourcefn reorder_axis(&self) -> ReorderAxis
fn reorder_axis(&self) -> ReorderAxis
Movement axis of this reorderable (default ReorderAxis::Horizontal): the shell
orients the drag preview (ghost + insertion indicator) accordingly. Kanban cards
return ReorderAxis::Vertical.
Sourcefn reorder_inserts(&self) -> bool
fn reorder_inserts(&self) -> bool
Is a horizontal reorderable dropped between its neighbours, like a list’s row,
rather than into the place of the one under the pointer, like a table’s column?
false by default, which is the table.
The two are different gestures, not one gesture on two axes. A column follows the
pointer with a continuous slide and takes the index of the column it lands on. A row
is inserted before or after the slot it is over — whichever half the pointer is in —
with an insertion line, a gap that opens there, and the nearest slot of its own list
when the pointer is over none. A widget that answers true gets the second.
Only asked of a horizontal reorderable: every vertical one is inserted between its neighbours already, and answering here changes nothing for it.
Sourcefn reorder_draggable(&self) -> bool
fn reorder_draggable(&self) -> bool
Can this reorderable be picked up as a drag source? true by default for every
reorderable. A target-only slot — the drop zone at the end of a Kanban column —
returns false: a card can be dropped there, not lifted from it (otherwise the
drag would raise an empty ghost that moves nothing).
Sourcefn reorder_droppable(&self) -> bool
fn reorder_droppable(&self) -> bool
Can this reorderable be dropped onto? true by default, and the mirror image of
reorder_draggable: a source-only grip — a list row’s
drag handle — returns false.
A handle is a small box inside a much larger row, and the drop is aimed at whatever is topmost under the pointer. Without this, carrying a row over another row’s handle would aim at the handle: the insertion line would be drawn across the grip instead of across the row, which is a promise about where the row is going that is not true.
Sourcefn reorder_announcement(&self, _to: usize) -> Option<String>
fn reorder_announcement(&self, _to: usize) -> Option<String>
What to say to a screen reader once this reorderable has been moved to to — the
spoken counterpart of the ghost, for someone who cannot see it land.
None leaves the shell its own wording, which can only speak of the axis: the index
a Kanban card is dropped at is a flat column × stride + position that means
nothing read out loud. A widget whose index is a position says so itself.
Sourcefn announce(&self) -> Option<String>
fn announce(&self) -> Option<String>
Text to announce to the screen reader when this widget is activated (mouse
click or Enter/Space) — a live region reads it out loud. Describes the effect the
activation produced (“Sorted by Name ascending”, “All rows selected”), for the
blind user who cannot perceive the visual change. None = nothing to announce
(the default).
Sourcefn stack(&self) -> bool
fn stack(&self) -> bool
If true, the widget is a stack: its children are superimposed layers
(the same box), rendered in order (the last one on top).
Sourcefn sticky_header(&self) -> bool
fn sticky_header(&self) -> bool
If true, the widget is a section with a sticky header
(crate::StickyHeader): its first child is painted, and takes taps, at the top of
what is visible of the section, over the second (milestone 602).
Sourcefn custom_layout(&self) -> Option<CustomLayout<'_>>
fn custom_layout(&self) -> Option<CustomLayout<'_>>
If the widget places its children with a function — a
crate::CustomMultiChildLayout — the function and one key per child. The children
are then laid out and placed in the walk, by the function, and not in this node’s
layout (milestone 601).
Sourcefn continuous(&self) -> bool
fn continuous(&self) -> bool
If true, the widget animates continuously (driven by time, not by a
target): the framework keeps redrawing. E.g. CircularProgressIndicator.
Sourcefn repaint_boundary(&self) -> bool
fn repaint_boundary(&self) -> bool
If true, this widget is a repaint boundary: its subtree is cached
(primitives + interaction maps) and reused as is as long as its geometry
and the interaction state of its descendants do not change — a widget
animating elsewhere no longer forces it to repaint.
See crate::Container::repaint_boundary and paintcache.rs.
Sourcefn scroll_content(&self) -> Option<&dyn Widget<Msg>>
fn scroll_content(&self) -> Option<&dyn Widget<Msg>>
If the widget is a scrollable container, returns its content.
Sourcefn virtual_list(&self, _viewport: Size) -> Option<VirtualList<'_, Msg>>
fn virtual_list(&self, _viewport: Size) -> Option<VirtualList<'_, Msg>>
If the widget is a virtualised list, returns its description (item count, height, factory). Only the visible items are built.
Sourcefn page_view(&self) -> Option<PagedView<'_, Msg>>
fn page_view(&self) -> Option<PagedView<'_, Msg>>
If the widget is a paged view, returns its description (page count, axis, factory). Like a virtualised list, only the visible pages are built.
Sourcefn on_page_changed(&self, _page: usize) -> Option<Msg>
fn on_page_changed(&self, _page: usize) -> Option<Msg>
Message sent by a paged view when the page on screen changes.
Sourcefn on_scroll(&self, _position: ScrollPosition) -> Option<Msg>
fn on_scroll(&self, _position: ScrollPosition) -> Option<Msg>
Message sent by a scroll region when its offset changes — the reading half
of crate::ScrollPosition.
Silent by default, and that is the answer to what it costs: a region nobody is
listening to reports nothing, so a fling over an ordinary list is exactly as
cheap as it was. A region somebody is listening to sends a message per frame
while it moves, because a bar that fades in as the page goes down needs every
frame of it — and a region that only wants to know when the end is near says so
through Widget::scroll_grain rather than by being reported less honestly.
Sourcefn scroll_grain(&self) -> f32
fn scroll_grain(&self) -> f32
How far this region must move before it says so again, in pixels; 0 — the
default — reports every change.
A grain suppresses the reports in between, never the last one: a region that comes to rest anywhere other than where it was last reported reports that, whatever the grain. Otherwise a coarse grain would leave the application believing a list was at 1 200 when it settled at 1 247, which is a worse answer than a slower one.
Sourcefn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)>
fn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)>
If the widget takes one axis from its content’s preferred size, returns
that axis and the step its measurement is rounded up to. See
crate::Intrinsic.
Sourcefn overflow_box(&self) -> Option<Overflow>
fn overflow_box(&self) -> Option<Overflow>
If the widget lays its child out to constraints of its own, which the
child may exceed, returns them. See crate::OverflowBox.
Sourcefn constraints_transform(&self) -> Option<ConstraintsTransform>
fn constraints_transform(&self) -> Option<ConstraintsTransform>
The box this widget gives its child as a function of the box it was offered,
with the child laid out in it separately and the box then sized to what came
back. None — the default — means the child shares this node’s layout, as
everything ordinary does. See crate::ConstraintsTransformBox.
Sourcefn animated_size(&self) -> Option<SizeAnimation>
fn animated_size(&self) -> Option<SizeAnimation>
If the box this widget’s constraints_transform makes
follows its child’s size over time rather than at once, how (milestone 594). See
crate::AnimatedSize.
Sourcefn size_factor(&self) -> Option<(f32, f32)>
fn size_factor(&self) -> Option<(f32, f32)>
If the box this widget’s constraints_transform makes
is a multiple of its child’s size — (across, down), 1 for as big as the child
— the multiples (milestones 596 and 597). See crate::SizeTransition and
crate::Aligned::width_factor.
Sourcefn clips_to_box(&self) -> bool
fn clips_to_box(&self) -> bool
Whether the box this widget’s constraints_transform
makes cuts its child to itself. A reveal does; an anchor with a factor lets its
child spill (milestone 597).
Sourcefn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>>
fn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>>
If the widget builds its content from its actual box, returns the
size → widget factory. The content is built on the fly: no retained state
and no overlay (like a virtualised list item).
Sourcefn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>>
fn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>>
If the widget draws something over its scroll region, returns the
offset → overlay factory. See crate::ScrollOverlay.
The region is this widget’s first child, so the offset the walk hands over is its
own child’s and nothing has to be named. Like a layout_builder’s content, the
overlay is built on the fly and has no retained state.
Sourcefn scroll_axis(&self) -> Axis
fn scroll_axis(&self) -> Axis
SingleChildScrollView axis (or axes), for a scrollable container.
Sourcefn scroll_physics(&self) -> Option<ScrollPhysics>
fn scroll_physics(&self) -> Option<ScrollPhysics>
The edge and fling behaviour of a scrollable container, when this widget
wants one in particular. None — the usual answer — leaves the choice to
the application, which defaults to what the platform does.
Sourcefn scrollbars(&self) -> Option<Scrollbars>
fn scrollbars(&self) -> Option<Scrollbars>
Whether this area draws a scrollbar, when it wants its own answer rather than
the application’s. None — the default — follows the application, which follows
the platform. See crate::Scrollbars.
Sourcefn thumb_visibility(&self) -> Option<bool>
fn thumb_visibility(&self) -> Option<bool>
Keep this area’s scrollbar on screen, instead of letting it fade away when
the area stops moving (scrollbar.dart:214).
None — the default — lets it fade, which is what a bar over content should do.
Some(true) pins it: for an area whose content is not obviously scrollable, or
one a reader is meant to be able to aim at without scrolling first.
Sourcefn ime(&self) -> Ime
fn ime(&self) -> Ime
What the software keyboard should be, when this widget is the focused editable one.
Only ever asked of the field that has focus — the platform layer finds it the same way it finds the caret — so a widget that is not editable never has to answer, and the default is the ordinary text keyboard with a Done key.
See crate::ime for what the two halves mean and why the mapping to the
platform’s numbers is tested rather than trusted.
Sourcefn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)>
fn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)>
If the widget is a portal, returns its floating content and its placement.
Sourcefn overlay_dismiss(&self) -> Option<Msg>
fn overlay_dismiss(&self) -> Option<Msg>
Message emitted when the scrim of a modal is clicked (dismissal), if any.
Sourcefn overlay_scrim(&self, _theme: &Theme) -> Option<Color>
fn overlay_scrim(&self, _theme: &Theme) -> Option<Color>
The colour of the scrim behind this widget’s modal overlay, when it wants one
in particular. None — the usual answer — leaves it to the scheme’s scrim
role at the framework’s own opacity.
The alpha is the caller’s: a scrim is the one colour whose transparency is the
whole point, so a fully opaque value here means an opaque scrim, and
Color::TRANSPARENT means none at all — an
overlay that darkens nothing, which the reference reaches by the same route.
Sourcefn overlay_traps_focus(&self) -> bool
fn overlay_traps_focus(&self) -> bool
If true, this widget’s anchored overlay (a menu…) traps focus: Tab and the
arrow keys cycle within its focusables while it is open (the keyboard pattern of menus).
Modal (scrimmed) overlays already trap by default; a tooltip or an autocomplete list
(focus stays on the field) do not. Default: false.
Sourcefn anim_target(&self) -> Option<f32>
fn anim_target(&self) -> Option<f32>
Target of the widget’s own animated value (e.g. 1.0 for a switch that is on,
0.0 for off). The runtime drives the retained value towards this target and
hands it back through Status::value. None = no animated value.
Sourcefn anim_transform(&self) -> Option<TransformValues>
fn anim_transform(&self) -> Option<TransformValues>
Target transform of an animated one (Transform::animated): the runtime
tweens the scales and the turn through anim_duration/anim_curve and hands the
interpolated value back through Runtime::anim_transform, which the paint walk
reads in place of the static transform_scale/transform_rotate. None = the
transform does not move.
The pivot is not part of it: see
TransformValues.
Sourcefn anim_duration(&self) -> f32
fn anim_duration(&self) -> f32
Duration (seconds) of the animated value’s transition (anim_target).
Default: the framework’s standard duration.
Sourcefn anim_curve(&self) -> Curve
fn anim_curve(&self) -> Curve
Easing curve of the animated value’s transition (anim_target).
Default: linear.
Sourcefn opacity_group(&self) -> Option<f32>
fn opacity_group(&self) -> Option<f32>
If the widget is an opacity group, returns the (target) opacity [0,1]
applied to its whole subtree as one: the paint walk wraps its primitives
in a composited layer at that opacity — no double-blending where they
overlap. None = not a group. Combined with anim_target, the opacity
animates (a group fade).
Sourcefn anim_color(&self) -> Option<Color>
fn anim_color(&self) -> Option<Color>
Target background colour of an animated background
(Container::animated_color): the runtime tweens it (through
anim_duration/anim_curve) and hands the interpolated value back in
Status::anim_color. None = no animated colour.
Sourcefn anim_size(&self) -> Option<Size>
fn anim_size(&self) -> Option<Size>
Target size of an animated size (Container::animated_size): the runtime
tweens it (through anim_duration/anim_curve) and the interpolated size is
injected at layout (see effective_style). None = fixed size.
Sourcefn anim_radius(&self) -> Option<BorderRadius>
fn anim_radius(&self) -> Option<BorderRadius>
Target corner radius of an animated radius (Container::animated_radius):
the runtime tweens it and hands the interpolated value back in
Status::anim_radius. None = fixed radius.
Sourcefn anim_padding(&self) -> Option<Insets>
fn anim_padding(&self) -> Option<Insets>
Target padding of an animated padding (Container::animated_padding):
the runtime tweens it and the interpolated padding is injected at layout
(see effective_style). None = fixed padding.
Sourcefn anim_offset(&self) -> Option<(f32, f32)>
fn anim_offset(&self) -> Option<(f32, f32)>
The pair of fractions this node’s offset rule is made of, animated: an
alignment’s two fractions, or a slide’s. None — the default — leaves the rule
reading the widget’s own numbers.
One quantity serves both rules because a node has one of them. See
crate::AnimatedAlign and crate::AnimatedSlide, each of which gives the
rule it animates a node of its own.
Sourcefn anim_pins(&self) -> Option<Positioning>
fn anim_pins(&self) -> Option<Positioning>
Target pins of an animated stack layer (crate::AnimatedPositioned): the
runtime tweens them and the interpolated pins are read where the stack lays its
layers out. None — the default — leaves Widget::positioned alone.
A pin that is unset does not animate: None on an edge is not nought there,
it is a box not pinned on that side at all, and moving between the two would be
interpolating between two arrangements rather than two values.
Sourcefn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)>
fn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)>
Target fractions of an animated share of the parent
(FractionallySizedBox::animated), as (width factor, height factor): the
runtime tweens them and the interpolated pair is injected at layout (see
effective_style), like the size and the padding. None = fixed factors.
An axis whose factor is unset follows its content, and the same rule applies: it does not travel to or from a factor, it changes what the axis is doing.
Sourcefn anim_text_style(&self) -> Option<TextStyle>
fn anim_text_style(&self) -> Option<TextStyle>
Target text style an animated subtree is heading for
(AnimatedDefaultTextStyle). None = the subtree inherits whatever it inherits.
The odd one out of the animated family: what the runtime tweens here is not this
node’s box or its paint but the theme everything below it reads, so the value
is consumed by the theme swap rather than by the node. That swap happens at four
points of the walk — the layout pass, the relayout fingerprint, the paint, and
crate::build_deferred — and they all go through crate::ui::scoped_theme
so that they cannot answer differently.
Sourcefn alignment_geometry(&self) -> Option<AlignmentGeometry>
fn alignment_geometry(&self) -> Option<AlignmentGeometry>
Alignment of the single child within the box: the walk offsets the child
through the free space according to the alignment’s fractions, resolved
against the reading direction (physical or directional — see
frus_core::AlignmentGeometry). Being continuous, a Tween<Alignment>
read in view() slides the child. None = default flex placement.
Sourcefn transform_translate(&self) -> Option<(f32, f32)>
fn transform_translate(&self) -> Option<(f32, f32)>
Paint offset (dx, dy) applied to the widget’s whole subtree: the render
and the hit-test are offset without touching layout (siblings do not move,
the child may overflow its box). Continuous → a Tween read in view() slides
the subtree. None = no offset. See crate::Transform.
Sourcefn translate_fraction(&self) -> Option<(f32, f32)>
fn translate_fraction(&self) -> Option<(f32, f32)>
Paint offset as a fraction of the child’s own size (fx, fy): (0.5, 0.0)
slides the subtree half its own width to the right. Added to
Widget::transform_translate, and offsetting the render and the hit-test the
same way, without touching layout. None = no offset.
A fraction rather than a number because the number is not known where the widget
is written: the child’s size is decided by the layout, and something that has to
slide exactly clear of itself — a panel off the edge, a badge half outside its
anchor — would otherwise have to be told a width it was never given. See
crate::FractionalTranslation.
Sourcefn transform_scale(&self) -> Option<(f32, f32, Alignment)>
fn transform_scale(&self) -> Option<(f32, f32, Alignment)>
Paint scaling (sx, sy, pivot) of the whole subtree: the render and the
hit-test are scaled — per axis — around the pivot (a
frus_core::Alignment within the box), without touching layout. Stays
axis-aligned (a scaled rect is still a rect). None = no scaling.
See crate::Transform.
Sourcefn transform_rotate(&self) -> Option<(f32, Alignment)>
fn transform_rotate(&self) -> Option<(f32, Alignment)>
Paint rotation (angle, pivot) of the whole subtree: the subtree is
painted rotated by angle radians (clockwise) around the pivot (a
frus_core::Alignment within the box), without touching layout. The
render goes through a rotated composited layer; the hit-test counter-rotates
the point. None = no rotation. See crate::Transform.
Sourcefn clip_shape(&self) -> Option<ClipShape>
fn clip_shape(&self) -> Option<ClipShape>
Shape clip of the whole subtree: the paint walk wraps its primitives in a
composited layer whose frus_core::ClipShape (rounded corners, ellipse)
modulates the alpha — whatever falls outside the shape is erased, edges
antialiased. None = no shape clip. See crate::ClipRRect,
crate::ClipOval.
Sourcefn style_themed(&self, _theme: &Theme) -> Style
fn style_themed(&self, _theme: &Theme) -> Style
The widget’s style once the theme has had its say — the layout half of the
caller ?? theme ?? framework chain.
Defaults to Widget::style, which is what almost every widget wants: only the
ones whose size or spacing a theme can set need to override this. It exists
because style has no theme and cannot be given one without touching every
implementation; a theme that could only reach paint would be able to recolour a
divider but not make one thin, which is the setting an application actually asks
for (milestone 309).
A transparent wrapper must forward this alongside style, or its child’s
themed size is silently dropped for the unthemed one.
Sourcefn theme_override(&self, _inherited: &Theme) -> Option<Box<Theme>>
fn theme_override(&self, _inherited: &Theme) -> Option<Box<Theme>>
The theme this widget imposes on itself and its subtree, given the one it
inherits. None — the default — means “whatever came down from above”, which is
what every widget but crate::Themed answers.
This is the third and last thing a theme needed to be usable: milestone 309 gave it per-widget defaults, and this makes those defaults scoped. A dark panel on a light page is one theme swapped for a subtree, not a colour written out by hand at every call site inside it.
It is honoured by layout as well as paint — the walk and the layout pass swap the ambient theme on the way down and restore it on the way out — so a subtree theme can change a divider’s height, not only its colour. A deferred overlay (a dialog, a drawer, a tooltip) is painted long after the walk has left the node that declared it, so it carries the theme it was declared under rather than the root’s.
Boxed because a Theme is a page and a half of tokens and this is asked of
every node, every frame: an Option<Box<_>> costs a word on the stack of a
recursion as deep as the tree, and the allocation happens only where a subtree
actually claims a theme.
Sourcefn media_override(&self, _inherited: MediaQuery) -> Option<MediaQuery>
fn media_override(&self, _inherited: MediaQuery) -> Option<MediaQuery>
The surface this widget imposes on itself and its subtree, given the one it
inherits. None — the default — means “whatever came down from above”, which is
what every widget but MediaScope answers.
The counterpart of Self::theme_override, and it exists for the same reason one
milestone later: a surface could until now only be narrowed where a widget is
constructed (SafeArea::build), and the widget that knows what to narrow is often
not the one doing the constructing. A shell hands its app bar’s slot the description
that slot should believe in; the bar then decides for itself whether to consume the
status bar, which is how the reference splits that job across two widgets.
Applied by the layout walk on the way down and held for the subtree, so anything
reading MediaQuery::of below this node sees it — including
a subtree deferred until Self::build_themed, which runs after the swap.
crate::build_deferred, the relayout fingerprint and the paint walk make the same
swap; the four staying in step is what keeps the cache and the picture honest.
Sourcefn scaffold_override(&self) -> Option<ScaffoldInfo>
fn scaffold_override(&self) -> Option<ScaffoldInfo>
The shell this widget imposes on its subtree: what a
Scaffold knows about itself and its slots do not.
The third of the inherited things, after the theme and the surface, and it exists
for the same reason as the second: a slot is handed to a shell already built, so
the widget that knows there is a drawer is never the one that has to draw the button
for it. The reference reads it from the context (Scaffold.of), which is how a bar
with no leading grows a menu button on a screen that has a menu and stays empty on
one that does not (app_bar.dart:1010).
None — the default — means “whatever came down from above”, which is what every
widget but ScaffoldScope answers. Applied by the same four
walks as Self::media_override, and for the same reason: an
AppBar is composed in Self::build_themed, which runs after the
swap, and the relayout fingerprint has to see what the composition saw.
Sourcefn scroll_behavior_override(&self) -> Option<ScrollBehavior>
fn scroll_behavior_override(&self) -> Option<ScrollBehavior>
The ScrollBehavior this widget puts in force for its
subtree, or None — the default — for whatever came down from above. Only
ScrollConfiguration answers otherwise. Applied by
the same four walks as Self::scaffold_override: the scrollables under it record
what it decides when they are registered (milestone 616).
Sourcefn build_themed(&self, _theme: &Theme)
fn build_themed(&self, _theme: &Theme)
Builds this widget’s subtree from the ambient theme, for the widgets that
defer that decision — see ThemeBuilder. Does nothing by
default, which is what all but a handful of widgets want.
Self::style_themed and Self::paint let a theme decide how a widget
looks. This is for the questions a theme answers earlier than that: whether
an application bar centres its title decides which children exist and in what
order, and by the time anything is being painted the composition has already been
made. A widget assembled by a builder — AppBar::new().build() — never sees a
theme at all.
Called by the layout pass on the way down, before Self::children is read,
under the theme of the subtree the node sits in. It takes &self like every other
hook, so an implementor needs interior mutability; that is safe here because a
widget tree is rebuilt from view rather than mutated, so “once per instance” and
“once per frame” are the same thing.
Sourcefn build_in(&self, _id: WidgetId, _runtime: &Runtime, theme: &Theme)
fn build_in(&self, _id: WidgetId, _runtime: &Runtime, theme: &Theme)
Self::build_themed, for the few widgets that also need who they are and
what the frame remembers to compose their subtree. An
AnimatedSwitcher keeps what it is letting go of in the
runtime, under its own identity, and that is reachable nowhere else before its
children are read.
The walks call this one, and its default is build_themed, so a deferred widget that
needs neither keeps implementing only that. A transparent wrapper must forward it
with the identity untouched — it has none of its own — or the widget inside is built
through build_themed and never learns where it is.
Sourcefn expand(&self, _id: WidgetId, _runtime: &Runtime, _theme: &Theme)
fn expand(&self, _id: WidgetId, _runtime: &Runtime, _theme: &Theme)
Builds what this node stands for, before anything else is asked of it.
A Component is a widget that is built into another, and what it
is built into decides everything the walk asks next — its theme scope, its surface,
its children. So the walks call this first, on the way down, before those questions
and before Self::build_in; by the time they are asked, the node answers as what it
built. Called under the theme of the enclosing scope, since the scope a node introduces
is not known until it is built.
Idempotent, and the default does nothing. A transparent wrapper must forward it
with the identity untouched, for the same reason as build_in.
Sourcefn switches(&self) -> bool
fn switches(&self) -> bool
Whether this node is an AnimatedSwitcher. An identity
is a position, so a switcher and the widget that comes to stand where it stood have
the same one: this is how the runtime tells the switcher still being there from its
having gone, and forgets what it kept for it.
Sourcefn system_ui_style(&self) -> Option<SystemUiOverlayStyle>
fn system_ui_style(&self) -> Option<SystemUiOverlayStyle>
What the system bars over this widget should look like — see
AnnotatedRegion. None for every widget but that one; a
transparent wrapper forwards it, or a keyed region would say nothing.
Sourcefn ink(&self, _theme: &Theme) -> Option<InkStyle>
fn ink(&self, _theme: &Theme) -> Option<InkStyle>
If the widget takes ink — the splash a tap leaves on a material surface —
the shape and colour to splash in. None = no ink, which is the default: a
widget has to ask.
The walk paints the ripples the runtime holds for this widget directly over
this widget’s own paint and under its children, which is where a material
surface puts them. A widget that draws its own content (a crate::Button
paints its label itself) therefore gets the ink over that content — at the
splash’s alpha, a tint rather than a veil. See crate::InkWell.
Sourcefn foreground(&self, _theme: &Theme) -> Option<BoxDecoration>
fn foreground(&self, _theme: &Theme) -> Option<BoxDecoration>
A decoration painted over this widget’s children rather than behind them:
the reference’s foregroundDecoration.
It is the one place in the walk where a widget paints after its own subtree,
and it exists because there is no other way to say it. A border over a
photograph, a wash across a tile that is disabled, a sheen over a card — every
one of them is a decoration whose whole point is that the content does not
cover it, and behind the content is exactly where Widget::paint puts one.
The box is this widget’s own, the same one paint is given. Inside any layer
this widget asks for: an opacity group fades it with everything else, a
transform carries it, and a shape clip holds it to the shape — which for a
decoration wearing that same radius changes nothing.
None is the default, and costs the walk one Option check per node.
Sourcefn layer_filter(&self, _cx: FilterContext) -> Option<LayerFilter>
fn layer_filter(&self, _cx: FilterContext) -> Option<LayerFilter>
The pixel effects this widget applies to its whole subtree: a blur, a colour transform, a mask, or a filter over what is painted underneath. The paint walk drains the subtree into a composited layer and hands the filter to the renderer, exactly as it does for an opacity group or a shape clip.
The FilterContext carries what only the walk knows — where the box ended
up, and which backdrop group encloses it. A widget that needs neither ignores
it.
None — the default — means no layer and no cost. See crate::ColorFiltered,
crate::ImageFiltered, crate::ShaderMask, crate::BackdropFilter.
Sourcefn backdrop_group(&self) -> bool
fn backdrop_group(&self) -> bool
true when this widget is a backdrop group: the backdrops below it that
ask to be shared are filtered once between them. See crate::BackdropGroup.
Sourcefn text_baseline(&self, _theme: &Theme) -> Option<f32>
fn text_baseline(&self, _theme: &Theme) -> Option<f32>
The widget’s own text baseline: the distance from the top of its box down
to the line its letters sit on. None — the default — means this widget has no
text of its own, and whatever is inside it answers instead.
It is what makes a price and its currency, or a heading and the note beside it,
sit on one line rather than merely in one row. See crate::Baseline and
Align::Baseline.
Sourcefn ignores_baseline(&self) -> bool
fn ignores_baseline(&self) -> bool
true when this subtree should be left out of a parent’s baseline
alignment: it has a baseline, and the parent is to pretend it does not. An icon
beside a label, where the label is what the row should line up on. See
crate::IgnoreBaseline.
Sourcefn fill_axes(&self, _theme: &Theme) -> FillAxes
fn fill_axes(&self, _theme: &Theme) -> FillAxes
The axes this widget asks to fill: on each, it takes the room the parent
leaves it rather than shrink-wrapping its children. FillAxes::NONE means
shrink-wrap on both.
MainAxisSize::Max on a crate::Row or a crate::Column is the reason it
exists, and there the axis is the widget’s own main one; a crate::TabBar asks
for the horizontal one, which is its cross axis; a full-screen shell asks for
FillAxes::BOTH.
It is a question about the parent, which is why it is asked rather than written
into the style: filling means growing when the parent runs the same way and
stretching when it runs across, and a widget cannot know what it was put inside.
The layout walk resolves it, where both are in view. Declaring width: 100%
instead does not work and cannot be made to — see FillAxes.
The theme is here for the same reason it is on Widget::measure: a text asks to
fill because it was told to align inside its box, and a subtree can hand that
alignment down. A hook blind to the theme would leave the one setting that arrives
by inheritance silently doing nothing.
Sourcefn soft_extent(&self) -> FillAxes
fn soft_extent(&self) -> FillAxes
The axes on which this widget’s size is only a default (milestone 590): the room on offer replaces it wherever the widget is asked to fill that axis and the layout can grant it — alone in a box, or across a row or a column. Where it cannot, along a line shared with other children, the default stands.
The reference gives a list, a page view or a field all the room offered, and has nothing to give when that room is unbounded: it stops with an error. A default that stands only there keeps the reference’s size wherever it has one, and something on the screen where it has none.
Sourcefn main_axis_floor(&self, _theme: &Theme) -> Option<f32>
fn main_axis_floor(&self, _theme: &Theme) -> Option<f32>
The width below which this widget must not be squeezed when its parent runs
horizontally — a line of text that would rather run past the end of a row than
be folded into a column of single words. None means squeeze freely.
It is asked rather than written into the style because the same number means two different things on the two axes. Down a column a box is handed a width and a floor would refuse it; along a row a box is asked how wide it wants to be, and this is the answer it will not go below. The reference draws the same line: a flex leaves its inflexible children an unbounded main axis and never squeezes them, while across it they take the width they are given.
It is handed the theme for the same reason Widget::style_themed is: the floor
is a measurement, and a text whose size comes from an inherited style measures
differently. A hook that decided a size without seeing the theme would answer for
a font nobody is drawing.
Sourcefn tile_shape(&self) -> Option<f32>
fn tile_shape(&self) -> Option<f32>
If this container gives all of its children the shape of a tile, the
width / height ratio to impose on each of them. None = each child keeps
its own shape.
A grid’s tiles are the same shape in the reference, and it is the grid that says so — the tile does not know how wide its column came out. Imposed during the walk, like the fill request and the shrink grant, because it needs the children’s layout nodes rather than their styles.
Sourcefn positioned(&self) -> Option<Positioning>
fn positioned(&self) -> Option<Positioning>
If this is a layer pinned against its crate::Stack’s edges
(crate::Positioned), what it pins. None = an ordinary layer, sized and
placed by the stack’s own fit and alignment.
Read by the stack rather than written into a style: an offset from an edge is not something the layout engine’s box model has a field for, and the number it resolves to depends on how big the stack came out.
Sourcefn stack_fit(&self) -> StackFit
fn stack_fit(&self) -> StackFit
How this stack sizes its unpinned layers (crate::StackFit). Unset,
Passthrough: each is handed the stack’s box, and
one with a size of its own keeps it. Meaningless unless Widget::stack is true.
Sourcefn stack_measured(&self) -> bool
fn stack_measured(&self) -> bool
Whether this stack is as big as its largest unpinned layer (milestone 639), as
crate::Stack is, rather than the size its own style says. Meaningless unless
Widget::stack is true.
Sourcefn stack_clips(&self) -> bool
fn stack_clips(&self) -> bool
Whether this stack cuts its layers at its edges. Unset, it does.
Sourcefn stack_direction(&self) -> Option<TextDirection>
fn stack_direction(&self) -> Option<TextDirection>
The reading direction this stack resolves its alignment and its layers’ start and end pins in, when it names one. Unset, the theme’s.
Sourcefn stack_visible(&self) -> Option<usize>
fn stack_visible(&self) -> Option<usize>
Which layer of this stack is shown: the one at that index paints and takes
input, and every other one is laid out and then silenced — not drawn, not
clickable, not read out. None, the default, shows all of them.
This is crate::IndexedStack, and it is a question for the walk rather than for
the widget: a layer that wrapped itself in something to stay quiet would no longer
be laid out the way a bare layer is, which is the one thing an indexed stack
promises. Meaningless unless Widget::stack is true.
Sourcefn keep_visible(&self, _size: Size, _theme: &Theme) -> Option<KeepVisible>
fn keep_visible(&self, _size: Size, _theme: &Theme) -> Option<KeepVisible>
The box this widget asks the scroll region around it to keep in view, in its own coordinates, with a key naming which box it is.
A tab bar wider than its window is what this is for: the eighth tab is off the side, and nothing about selecting it would otherwise bring it back. The reference scrolls its bar to the selected tab, and so does this.
The key is what makes the region act on a change rather than on every frame. The box moves as the region scrolls, so a region that chased it would pin the content in place and no finger could move it; the key changes only when the widget means a different box.
centre asks for the box in the middle of the window rather than merely inside
it — what a tab bar wants, since a selected tab flush against the edge looks like
the end of the row. Clamped either way, so the first tab stays at the start.
Sourcefn scroll_reverse(&self) -> bool
fn scroll_reverse(&self) -> bool
Whether this scrollable runs from the far end (crate::SingleChildScrollView::reverse):
the content is anchored to the end of the viewport and offsets are counted from
there. Meaningless unless Widget::scroll_content is Some.
Sourcefn scroll_padding(&self) -> Insets
fn scroll_padding(&self) -> Insets
The insets a scrollable area puts around its content, inside the viewport.
The padding scrolls with the content rather than shrinking the window onto it,
which is the reference’s SliverPadding and the only reading that is any use:
room at the end of a list is reachable by scrolling to it, room taken out of the
viewport is not. Read by both the scroll branch and the virtualised list.
Sourcefn baseline_target(&self) -> Option<f32>
fn baseline_target(&self) -> Option<f32>
If the widget positions its child by the child’s baseline (crate::Baseline),
the distance from the top of this box at which that baseline should land.
None = not a baseline box.
Sourcefn clip_path(&self) -> Option<&Path>
fn clip_path(&self) -> Option<&Path>
If the widget clips its child to an arbitrary path (ClipPath), returns the
path in local coordinates (origin at the box’s top-left corner). The walk
offsets it to the screen and wraps it in a layer whose mask (the path) erases
the outside. Takes priority over Widget::clip_shape. None = no path clip.
See crate::ClipPath.
Sourcefn dismissible(&self) -> Option<DismissSpec>
fn dismissible(&self) -> Option<DismissSpec>
If the widget is a dismissible item (crate::Dismissible), its
configuration for this frame. The shell gives a mostly-sideways drag on it to
the dismissal and a mostly-up-and-down one to the enclosing scrollable. None =
not dismissible.
Sourcefn on_dismissed(&self, _direction: DismissDirection) -> Option<Msg>
fn on_dismissed(&self, _direction: DismissDirection) -> Option<Msg>
The message a dismissed item dispatches, once it has flown out and its gap
has closed. None = the swipe is shown but removes nothing.
Sourcefn sheet(&self) -> Option<&SheetSpec>
fn sheet(&self) -> Option<&SheetSpec>
If the widget is the moving panel of a crate::DraggableScrollableSheet, its
configuration for this frame. The layout makes it as tall as the retained height,
and the shell shares a finger on it between the sheet and the scroll areas inside.
None = not a sheet.
Sourcefn on_sheet_dismissed(&self) -> Option<Msg>
fn on_sheet_dismissed(&self) -> Option<Msg>
The message a sheet dispatches once it has been lowered to nothing. None = it
cannot be dismissed, or says nothing when it is.
Sourcefn refresh(&self) -> Option<RefreshSpec>
fn refresh(&self) -> Option<RefreshSpec>
If the widget is a refresh area (crate::RefreshIndicator), its configuration for
this frame. Any scrollable inside it routes the movement its physics refuses at
the top edge into the pull, instead of into the overscroll glow. None = not a
refresh area.
Sourcefn on_refresh(&self) -> Option<Msg>
fn on_refresh(&self) -> Option<Msg>
The message a refresh area dispatches when an armed pull is released. None =
the pull is shown but asks for nothing, which is what an area still waiting for
its on_refresh looks like.
Sourcefn barrier(&self) -> Option<ModalBarrier>
fn barrier(&self) -> Option<ModalBarrier>
What the widget withholds from the frame on behalf of its whole subtree:
input targets, primitives, accessibility nodes. The walk visits the subtree
normally and then discards whatever it added to the selected registries, so a
target registered deep inside is caught just as surely as one at the top.
None = nothing withheld (the default). See crate::ModalBarrier,
crate::IgnorePointer, crate::AbsorbPointer, crate::Visibility,
crate::ExcludeSemantics.
Sourcefn interactive(&self) -> Option<(f32, f32)>
fn interactive(&self) -> Option<(f32, f32)>
If the widget is an interactive viewport (InteractiveViewer), returns its
scale bounds (min, max). The paint walk renders its child in a transformed
layer (retained scale + translation, clipped to the viewport); the shell routes
drag → pan and wheel/pinch → zoom. None = not an interactive viewport.
See crate::InteractiveViewer.
Sourcefn fitted(&self) -> Option<BoxFit>
fn fitted(&self) -> Option<BoxFit>
If the widget fits its child to its box (FittedBox), returns the
frus_core::BoxFit: the walk measures the child at its natural size, scales
it according to the fit and centres it (composited layer, hit-test through
M⁻¹). None = not a fitter. See crate::FittedBox.
Sourcefn rotated_quarter_turns(&self) -> Option<i32>
fn rotated_quarter_turns(&self) -> Option<i32>
If the widget rotates its child by quarter turns (RotatedBox), returns
the number of quarters. Unlike Transform, this affects layout: the box
swaps its dimensions for an odd number. None = not a RotatedBox.
See crate::RotatedBox.
If the widget is a screen navigator, returns (progress, push?). Its children
([screen] or [outgoing, incoming]) are rendered full-window with a sliding
transition.
Whether a finger drives the navigator’s transition — a back
gesture — so that it follows the finger linearly (milestone 620).
Whether a navigator clips its pages to its own box.
true, which is the reference’s default (Clip.hardEdge) and the only sane one:
a screen sliding in comes from outside the box and has to stop at its edge.
Consulted only inside the navigator branch of the walk, so it costs nothing for every other widget.
How many of a navigator’s first children are kept but not shown: the pages under
the one on show. They are built, so what their components hold survives, and they are
not laid out, drawn or given input. 0, the default, is a navigator that shows every
page it holds.
Sourcefn on_long_press(&self) -> Option<Msg>
fn on_long_press(&self) -> Option<Msg>
Message emitted by a long press (a press held ~500 ms without movement).
The long press pre-empts the click: the release that follows does not emit
on_click.
Sourcefn on_double_tap(&self) -> Option<Msg>
fn on_double_tap(&self) -> Option<Msg>
Message emitted by a double tap: two taps on this widget in quick succession
(within 300 ms and 100 px of each other, the reference’s numbers). While one is
possible, a first tap’s on_click waits out those 300 ms, so that
the second tap of a double tap is not also a tap.
Sourcefn on_secondary_tap(&self) -> Option<Msg>
fn on_secondary_tap(&self) -> Option<Msg>
Message emitted by a secondary tap: a click of the secondary mouse button, usually the right one.
Sourcefn pointer_listener(&self) -> bool
fn pointer_listener(&self) -> bool
Whether this widget hears the pointer’s raw events (milestone 586): a press inside it, and then that pointer wherever it goes until it lifts; and a mouse’s hover.
Sourcefn on_pointer_event(&self, _event: ListenerEvent) -> Vec<Msg>
fn on_pointer_event(&self, _event: ListenerEvent) -> Vec<Msg>
The messages for one raw event of the pointer, on a widget that is a
pointer_listener. Several, when listeners wrap each other at
the same place.
Sourcefn hover_region(&self) -> Option<HoverRegion>
fn hover_region(&self) -> Option<HoverRegion>
Whether this widget is a region the mouse enters and leaves (milestone 583), and
how: the cursor it asks for while the pointer is over it, and whether it hides the
regions behind it. None for anything that is not one.
Sourcefn on_hover_event(&self, _event: HoverEvent) -> Option<Msg>
fn on_hover_event(&self, _event: HoverEvent) -> Option<Msg>
Message for the pointer entering, moving over or leaving this region — one whose
hover_region is set.
Sourcefn pan_axis(&self) -> Option<PanAxis>
fn pan_axis(&self) -> Option<PanAxis>
Which way this widget takes a drag, if it takes one at all (milestone 582): the
shell then reports it through on_pan. Inside a scroll, a drag along
the scroll’s axis stays the scroll’s unless this axis claims it.
Sourcefn on_pan(&self, _event: PanEvent) -> Option<Msg>
fn on_pan(&self, _event: PanEvent) -> Option<Msg>
Message for one moment of a drag — its start, a movement, its end — on a widget whose
pan_axis is set.
Sourcefn wants_title_bar(&self) -> bool
fn wants_title_bar(&self) -> bool
Whether this widget wants the title bar’s line for itself (milestone 640): a
WindowMenuBar’s row. The shell gives it the line where the
system allows it.
Sourcefn title_bar_role(&self) -> Option<TitleBarRole>
fn title_bar_role(&self) -> Option<TitleBarRole>
What this widget is to the system on the title bar’s line, which acts on it: the window’s icon or its three buttons (milestone 640).
Sourcefn pan_value(&self, _event: PanEvent, _value: f32, _rtl: bool) -> Option<f32>
fn pan_value(&self, _event: PanEvent, _value: f32, _rtl: bool) -> Option<f32>
A drag that moves this widget’s own animated value (anim_target) — a
switch’s thumb following the finger (milestone 638). Given a moment of the drag, the
value now and whether the text runs right to left, the value to hold it at; None
leaves it alone. The shell holds the value there while the finger is down, and when
it lifts lets it settle from there, asking on_value_release what that means.
Sourcefn on_value_release(&self, _value: f32) -> Option<Msg>
fn on_value_release(&self, _value: f32) -> Option<Msg>
Message for a drag that moved this widget’s value letting go at value — a switch
flips when its thumb was let go past half way (milestone 638).
Sourcefn on_key(&self, _key: &Key) -> KeyResponse<Msg>
fn on_key(&self, _key: &Key) -> KeyResponse<Msg>
Key received while bubbling leaf→root: the focused widget gets it first,
then each ancestor as long as the response is Ignored. (E.g. an OverlayPortal
consumes Escape to close itself.)
Sourcefn measure(&self, _theme: &Theme) -> Option<MeasureFn<'_>>
fn measure(&self, _theme: &Theme) -> Option<MeasureFn<'_>>
Measure under constraints: for a widget whose size depends on the space
offered (a paragraph that wraps…), returns the closure wired into taffy.
None = size fixed by style(). Contract: must be Some if and only if
Widget::measure_key is.
The theme comes in because the measurement has to agree with the paint. A text that takes its size from an inherited style must be measured at that size too; measured at one size and drawn at another, every box on the screen is the wrong height at once, and nothing in the picture says which of the two numbers is wrong.
Sourcefn measure_key(&self, _theme: &Theme) -> Option<u64>
fn measure_key(&self, _theme: &Theme) -> Option<u64>
Fingerprint of the content Widget::measure depends on (text, style…),
mixed into the relayout fingerprint: without it, two different contents with
the same style would be conflated by the cache and would keep a stale
geometry. Contract: Some if and only if measure() is.
Whatever the theme contributes to the measurement belongs in here as well — a cache key that ignores half of its inputs is a stale layout waiting for the subtree’s style to change.
Trait Implementations§
Source§impl<Msg> Widget<Msg> for Box<dyn Widget<Msg>>
Lets an already boxed widget be composed where an impl Widget is expected
(e.g. Flex::child). Delegates everything to the contained widget.
impl<Msg> Widget<Msg> for Box<dyn Widget<Msg>>
Lets an already boxed widget be composed where an impl Widget is expected
(e.g. Flex::child). Delegates everything to the contained widget.
Source§fn style_themed(&self, theme: &Theme) -> Style
fn style_themed(&self, theme: &Theme) -> Style
caller ?? theme ?? framework chain. Read moreSource§fn theme_override(&self, inherited: &Theme) -> Option<Box<Theme>>
fn theme_override(&self, inherited: &Theme) -> Option<Box<Theme>>
None — the default — means “whatever came down from above”, which is
what every widget but crate::Themed answers. Read moreSource§fn media_override(&self, inherited: MediaQuery) -> Option<MediaQuery>
fn media_override(&self, inherited: MediaQuery) -> Option<MediaQuery>
None — the default — means “whatever came down from above”, which is
what every widget but MediaScope answers. Read moreSource§fn scaffold_override(&self) -> Option<ScaffoldInfo>
fn scaffold_override(&self) -> Option<ScaffoldInfo>
Source§fn scroll_behavior_override(&self) -> Option<ScrollBehavior>
fn scroll_behavior_override(&self) -> Option<ScrollBehavior>
ScrollBehavior this widget puts in force for its
subtree, or None — the default — for whatever came down from above. Only
ScrollConfiguration answers otherwise. Applied by
the same four walks as Self::scaffold_override: the scrollables under it record
what it decides when they are registered (milestone 616).Source§fn build_themed(&self, theme: &Theme)
fn build_themed(&self, theme: &Theme)
ThemeBuilder. Does nothing by
default, which is what all but a handful of widgets want. Read moreSource§fn build_in(&self, id: WidgetId, runtime: &Runtime, theme: &Theme)
fn build_in(&self, id: WidgetId, runtime: &Runtime, theme: &Theme)
Self::build_themed, for the few widgets that also need who they are and
what the frame remembers to compose their subtree. An
AnimatedSwitcher keeps what it is letting go of in the
runtime, under its own identity, and that is reachable nowhere else before its
children are read. Read moreSource§fn expand(&self, id: WidgetId, runtime: &Runtime, theme: &Theme)
fn expand(&self, id: WidgetId, runtime: &Runtime, theme: &Theme)
Source§fn switches(&self) -> bool
fn switches(&self) -> bool
AnimatedSwitcher. An identity
is a position, so a switcher and the widget that comes to stand where it stood have
the same one: this is how the runtime tells the switcher still being there from its
having gone, and forgets what it kept for it.Source§fn system_ui_style(&self) -> Option<SystemUiOverlayStyle>
fn system_ui_style(&self) -> Option<SystemUiOverlayStyle>
AnnotatedRegion. None for every widget but that one; a
transparent wrapper forwards it, or a keyed region would say nothing.Source§fn repaint_boundary(&self) -> bool
fn repaint_boundary(&self) -> bool
true, this widget is a repaint boundary: its subtree is cached
(primitives + interaction maps) and reused as is as long as its geometry
and the interaction state of its descendants do not change — a widget
animating elsewhere no longer forces it to repaint.
See crate::Container::repaint_boundary and paintcache.rs.Source§fn debug_name(&self) -> &'static str
fn debug_name(&self) -> &'static str
Box, crate::Keyed…) delegate
to their content.Source§fn semantics(&self) -> Option<SemanticsProperties>
fn semantics(&self) -> Option<SemanticsProperties>
None =
no semantics of its own (a layout container — its children, though,
may have some). See frus_core::SemanticsProperties.Source§fn describes(&self) -> Option<Description>
fn describes(&self) -> Option<Description>
crate::Semantics wrapper, and nothing else
so far. Read moreSource§fn paint(&self, bounds: Rect, status: Status, theme: &Theme, scene: &mut Scene)
fn paint(&self, bounds: Rect, status: Status, theme: &Theme, scene: &mut Scene)
Source§fn opaque(&self) -> bool
fn opaque(&self) -> bool
Source§fn positional_click(
&self,
local_x: f32,
local_y: f32,
width: f32,
height: f32,
) -> Option<Msg>
fn positional_click( &self, local_x: f32, local_y: f32, width: f32, height: f32, ) -> Option<Msg>
width × height box), taking
priority over on_click. For clickable sub-regions — e.g. the
suffix icon of a crate::TextField (clear / reveal) or a chart point
(milestone 221). None (the default) = no sub-region; the shell falls back to on_click.Source§fn cursor_icon(
&self,
local_x: f32,
local_y: f32,
width: f32,
height: f32,
) -> Option<Cursor>
fn cursor_icon( &self, local_x: f32, local_y: f32, width: f32, height: f32, ) -> Option<Cursor>
(local_x, local_y) inside
the widget’s width × height box (milestone 205): Some(Cursor::Pointer) over a clickable
sub-region (a suffix icon…), None (the default) = no opinion, the shell keeps the default
cursor. Does not affect clicking; this is purely the pointer’s appearance on hover.Source§fn key(&self) -> Option<u64>
fn key(&self) -> Option<u64>
None = positional identity. See crate::Keyed.Source§fn on_edit(&self, edit: &mut Edit, key: &Key) -> Option<Msg>
fn on_edit(&self, edit: &mut Edit, key: &Key) -> Option<Msg>
Source§fn cursor_at(
&self,
local_x: f32,
local_y: f32,
width: f32,
scroll_cursor: usize,
) -> Option<usize>
fn cursor_at( &self, local_x: f32, local_y: f32, width: f32, scroll_cursor: usize, ) -> Option<usize>
local_y picks the line in a
multi-line field (ignored on a single line). Read moreSource§fn text_metrics(
&self,
width: f32,
cursor: usize,
) -> Option<(f32, f32, f32, f32)>
fn text_metrics( &self, width: f32, cursor: usize, ) -> Option<(f32, f32, f32, f32)>
(content height, visible box height, caret top, caret height), in content
space (px). The shell uses them to register the scrollable region and to keep
the caret in view. None otherwise.Source§fn text_viewport(&self, rect: Rect) -> Option<Rect>
fn text_viewport(&self, rect: Rect) -> Option<Rect>
rect — the area where
the text scrolls, below the label. Used to place the scrollbar and the
scrollable region exactly on the box. None otherwise.Source§fn caret_vertical(
&self,
width: f32,
cursor: usize,
down: bool,
page: bool,
goal_x: Option<f32>,
) -> Option<(usize, f32)>
fn caret_vertical( &self, width: f32, cursor: usize, down: bool, page: bool, goal_x: Option<f32>, ) -> Option<(usize, f32)>
(new index, visual column used). Read moreSource§fn selected_text(&self, edit: &Edit) -> Option<String>
fn selected_text(&self, edit: &Edit) -> Option<String>
Source§fn text_value(&self) -> Option<&str>
fn text_value(&self) -> Option<&str>
None otherwise.Source§fn takes_typing(&self) -> bool
fn takes_typing(&self) -> bool
read_only one, a Text made
selectable — answers false: it has a caret and a
selection, and no use for a keyboard sliding up over the words being read. Read moreSource§fn selection_text(&self) -> Option<&str>
fn selection_text(&self) -> Option<&str>
SelectionArea: a Text, and nothing that is
not made of words. The walk registers such a widget as a text stop when it is inside an
area, so that a selection can begin, end and pass through it.Source§fn region_toolbar(
&self,
context: ToolbarContext,
width: f32,
range: (usize, usize),
) -> Option<(Rect, &dyn Widget<Msg>)>
fn region_toolbar( &self, context: ToolbarContext, width: f32, range: (usize, usize), ) -> Option<(Rect, &dyn Widget<Msg>)>
range, in characters — for context, and the box it is placed against in local
coordinates, for a widget width wide. None for anything that is not a text, or when
the list for context is empty.Source§fn selection_grip(
&self,
width: f32,
index: usize,
start: bool,
) -> Option<SelectionHandle>
fn selection_grip( &self, width: f32, index: usize, start: bool, ) -> Option<SelectionHandle>
index of this widget’s words — the
start handle when start, the end handle otherwise — in local coordinates, for a widget
width wide: where it is painted, and so where a finger takes it. None for anything
that is not a text.Source§fn area_toolbar(
&self,
context: ToolbarContext,
) -> Option<Option<&dyn Widget<Msg>>>
fn area_toolbar( &self, context: ToolbarContext, ) -> Option<Option<&dyn Widget<Msg>>>
SelectionArea offers over its selection, for
context, when the application has said what it holds
(SelectionArea::selection_toolbar): Some
of the bar, or Some(None) for no bar at all. None for anything else — and for an area
that was told nothing — whose texts then offer Copy and Select all.Source§fn selection_hit(&self, local_x: f32, local_y: f32, width: f32) -> Option<usize>
fn selection_hit(&self, local_x: f32, local_y: f32, width: f32) -> Option<usize>
selection_text nearest a local
position (px from the widget’s top-left corner) in a box width wide — the layout the
widget was drawn with, which is what a press is hit against.Source§fn replace_value(&self, value: String) -> Option<Msg>
fn replace_value(&self, value: String) -> Option<Msg>
value in this field: the one typing would have produced,
for a value the framework restores rather than the user typing it. Read moreSource§fn word_at(&self, index: usize) -> Option<(usize, usize)>
fn word_at(&self, index: usize) -> Option<(usize, usize)>
(start, end) of the word around the given index (for double-click).Source§fn selection_handles(
&self,
width: f32,
edit: &Edit,
scroll_y: f32,
) -> Option<[SelectionHandle; 2]>
fn selection_handles( &self, width: f32, edit: &Edit, scroll_y: f32, ) -> Option<[SelectionHandle; 2]>
edit, start then end, for a field width
wide whose content is scrolled down by scroll_y — where they are painted, and
so where a finger takes them. None when there is no selection, or this is not
a text field.Source§fn selection_toolbar(&self, context: ToolbarContext) -> Option<&dyn Widget<Msg>>
fn selection_toolbar(&self, context: ToolbarContext) -> Option<&dyn Widget<Msg>>
crate::ToolbarItem) for context, or None when there is none to show: this is
not a text field, or the application’s list for that context is empty. Read moreSource§fn selection_anchor(
&self,
width: f32,
edit: &Edit,
scroll_y: f32,
) -> Option<Rect>
fn selection_anchor( &self, width: f32, edit: &Edit, scroll_y: f32, ) -> Option<Rect>
selection_handles it is the paint’s own geometry.Source§fn edit_action(&self) -> Option<EditAction>
fn edit_action(&self) -> Option<EditAction>
crate::EditAction).Source§fn autofocus(&self) -> bool
fn autofocus(&self) -> bool
true, a focusable widget takes the focus when it appears: a menu’s first
row when the menu opens, a field on a screen made to type into (milestone 605). Where
the focus came from is remembered, and it goes back there when this one goes.Source§fn shortcut_bindings(&self) -> &[(KeyStroke, Intent)]
fn shortcut_bindings(&self) -> &[(KeyStroke, Intent)]
crate::Shortcuts.Source§fn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)]
fn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)]
crate::CallbackShortcuts.Source§fn action_bindings(&self) -> &[(Intent, Msg)]
fn action_bindings(&self) -> &[(Intent, Msg)]
crate::Actions.Source§fn action_listeners(&self) -> &[(Intent, Msg)]
fn action_listeners(&self) -> &[(Intent, Msg)]
crate::ActionListener.Source§fn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>>
fn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>>
crate::KeyboardListener. None (the default) is not a listener.Source§fn descendants_focusable(&self) -> bool
fn descendants_focusable(&self) -> bool
false, nothing inside this subtree can take focus — the reference’s
ExcludeFocus. A dimmed panel behind a sheet is still drawn and still measured;
it simply stops being somewhere Tab can land.Source§fn focus_skip_traversal(&self) -> bool
fn focus_skip_traversal(&self) -> bool
true, this subtree’s focus stops are skipped by Tab while remaining
focusable by a click — the reference’s ExcludeFocusTraversal. The two are
separate questions: a toolbar button may be reachable with the pointer and still
not belong in the keyboard’s order.Source§fn focus_order(&self) -> Option<f32>
fn focus_order(&self) -> Option<f32>
NumericFocusOrder. None leaves them in tree order, which is where
everything sits until someone says otherwise.Source§fn focus_group(&self) -> bool
fn focus_group(&self) -> bool
true, this subtree is a traversal group: an order set inside it is
resolved among its own members and nowhere else, so a reordered dialog does not
reshuffle the page behind it.Source§fn autofill_hints(&self) -> &[AutofillHint]
fn autofill_hints(&self) -> &[AutofillHint]
AutofillHint. Empty (the default) is a field that takes
no part in autofill at all. Read moreSource§fn autofill_group(&self) -> bool
fn autofill_group(&self) -> bool
true, this subtree’s fields are one form — the reference’s
AutofillGroup. A service shown a password with no username beside it has
nothing to save the pair under.Source§fn draws_own_focus(&self) -> bool
fn draws_own_focus(&self) -> bool
true, the widget draws its focus indicator itself (the driver then
does not stroke the generic ring). E.g. TextField.Source§fn draggable(&self) -> bool
fn draggable(&self) -> bool
true, the widget responds to pointer dragging (sliders, handles).Source§fn drag_track(&self) -> DragTrack
fn drag_track(&self) -> DragTrack
draggable widget its drag lands (milestone
648): how far in from each end the travel starts, and whether it runs from the
right in a right-to-left reading direction. The fraction on_drag
and its edges are given is measured along that travel. The default is the whole
width, left to right.Source§fn on_drag(&self, fraction: f32) -> Option<Msg>
fn on_drag(&self, fraction: f32) -> Option<Msg>
fraction being the relative horizontal
position (0.0..=1.0) within the widget’s bounds.Source§fn on_drag_start(&self, fraction: f32) -> Option<Msg>
fn on_drag_start(&self, fraction: f32) -> Option<Msg>
Source§fn on_drag_end(&self, fraction: f32) -> Option<Msg>
fn on_drag_end(&self, fraction: f32) -> Option<Msg>
Source§fn on_drag_delta(&self, dx: f32) -> Option<Msg>
fn on_drag_delta(&self, dx: f32) -> Option<Msg>
dx is the
movement (logical px) since the last event. For handles that accumulate
(column resizing), unlike on_drag (an absolute fraction,
e.g. a slider). The shell tries it before on_drag; a widget implements
only one of the two.Source§fn reorder_index(&self) -> Option<usize>
fn reorder_index(&self) -> Option<usize>
Source§fn on_reorder(&self, to: usize) -> Option<Msg>
fn on_reorder(&self, to: usize) -> Option<Msg>
to.
The widget knows its own index and the on_reorder(from, to) callback.Source§fn reorder_draggable(&self) -> bool
fn reorder_draggable(&self) -> bool
true by default for every
reorderable. A target-only slot — the drop zone at the end of a Kanban column —
returns false: a card can be dropped there, not lifted from it (otherwise the
drag would raise an empty ghost that moves nothing).Source§fn reorder_droppable(&self) -> bool
fn reorder_droppable(&self) -> bool
true by default, and the mirror image of
reorder_draggable: a source-only grip — a list row’s
drag handle — returns false. Read moreSource§fn reorder_announcement(&self, to: usize) -> Option<String>
fn reorder_announcement(&self, to: usize) -> Option<String>
to — the
spoken counterpart of the ghost, for someone who cannot see it land. Read moreSource§fn reorder_axis(&self) -> ReorderAxis
fn reorder_axis(&self) -> ReorderAxis
ReorderAxis::Horizontal): the shell
orients the drag preview (ghost + insertion indicator) accordingly. Kanban cards
return ReorderAxis::Vertical.Source§fn reorder_inserts(&self) -> bool
fn reorder_inserts(&self) -> bool
false by default, which is the table. Read moreSource§fn announce(&self) -> Option<String>
fn announce(&self) -> Option<String>
None = nothing to announce
(the default).Source§fn stack(&self) -> bool
fn stack(&self) -> bool
true, the widget is a stack: its children are superimposed layers
(the same box), rendered in order (the last one on top).Source§fn sticky_header(&self) -> bool
fn sticky_header(&self) -> bool
true, the widget is a section with a sticky header
(crate::StickyHeader): its first child is painted, and takes taps, at the top of
what is visible of the section, over the second (milestone 602).Source§fn custom_layout(&self) -> Option<CustomLayout<'_>>
fn custom_layout(&self) -> Option<CustomLayout<'_>>
crate::CustomMultiChildLayout — the function and one key per child. The children
are then laid out and placed in the walk, by the function, and not in this node’s
layout (milestone 601).Source§fn continuous(&self) -> bool
fn continuous(&self) -> bool
true, the widget animates continuously (driven by time, not by a
target): the framework keeps redrawing. E.g. CircularProgressIndicator.Source§fn scroll_content(&self) -> Option<&dyn Widget<Msg>>
fn scroll_content(&self) -> Option<&dyn Widget<Msg>>
Source§fn virtual_list(&self, viewport: Size) -> Option<VirtualList<'_, Msg>>
fn virtual_list(&self, viewport: Size) -> Option<VirtualList<'_, Msg>>
Source§fn page_view(&self) -> Option<PagedView<'_, Msg>>
fn page_view(&self) -> Option<PagedView<'_, Msg>>
Source§fn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)>
fn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)>
crate::Intrinsic.Source§fn overflow_box(&self) -> Option<Overflow>
fn overflow_box(&self) -> Option<Overflow>
crate::OverflowBox.Source§fn constraints_transform(&self) -> Option<ConstraintsTransform>
fn constraints_transform(&self) -> Option<ConstraintsTransform>
None — the default — means the child shares this node’s layout, as
everything ordinary does. See crate::ConstraintsTransformBox.Source§fn animated_size(&self) -> Option<SizeAnimation>
fn animated_size(&self) -> Option<SizeAnimation>
constraints_transform makes
follows its child’s size over time rather than at once, how (milestone 594). See
crate::AnimatedSize.Source§fn size_factor(&self) -> Option<(f32, f32)>
fn size_factor(&self) -> Option<(f32, f32)>
constraints_transform makes
is a multiple of its child’s size — (across, down), 1 for as big as the child
— the multiples (milestones 596 and 597). See crate::SizeTransition and
crate::Aligned::width_factor.Source§fn clips_to_box(&self) -> bool
fn clips_to_box(&self) -> bool
constraints_transform
makes cuts its child to itself. A reveal does; an anchor with a factor lets its
child spill (milestone 597).Source§fn hero_tag(&self) -> Option<u64>
fn hero_tag(&self) -> Option<u64>
crate::Hero.Source§fn drag_payload(&self) -> Option<u64>
fn drag_payload(&self) -> Option<u64>
crate::Draggable.Source§fn drag_needs_long_press(&self) -> bool
fn drag_needs_long_press(&self) -> bool
Source§fn drag_ghost_opacity(&self) -> f32
fn drag_ghost_opacity(&self) -> f32
Source§fn on_dropped(&self, accepted: bool) -> Option<Msg>
fn on_dropped(&self, accepted: bool) -> Option<Msg>
true if a target took it.Source§fn drop_zone(&self) -> bool
fn drop_zone(&self) -> bool
crate::DragTarget.Source§fn accepts_drag(&self, payload: u64) -> bool
fn accepts_drag(&self, payload: u64) -> bool
payload? Only asked of a drop target.Source§fn on_drop(&self, payload: u64) -> Option<Msg>
fn on_drop(&self, payload: u64) -> Option<Msg>
Source§fn on_page_changed(&self, page: usize) -> Option<Msg>
fn on_page_changed(&self, page: usize) -> Option<Msg>
Source§fn on_scroll(&self, position: ScrollPosition) -> Option<Msg>
fn on_scroll(&self, position: ScrollPosition) -> Option<Msg>
crate::ScrollPosition. Read moreSource§fn scroll_grain(&self) -> f32
fn scroll_grain(&self) -> f32
0 — the
default — reports every change. Read moreSource§fn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>>
fn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>>
size → widget factory. The content is built on the fly: no retained state
and no overlay (like a virtualised list item).Source§fn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>>
fn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>>
offset → overlay factory. See crate::ScrollOverlay. Read moreSource§fn scroll_axis(&self) -> Axis
fn scroll_axis(&self) -> Axis
Source§fn scroll_physics(&self) -> Option<ScrollPhysics>
fn scroll_physics(&self) -> Option<ScrollPhysics>
None — the usual answer — leaves the choice to
the application, which defaults to what the platform does.Source§fn scrollbars(&self) -> Option<Scrollbars>
fn scrollbars(&self) -> Option<Scrollbars>
None — the default — follows the application, which follows
the platform. See crate::Scrollbars.Source§fn thumb_visibility(&self) -> Option<bool>
fn thumb_visibility(&self) -> Option<bool>
scrollbar.dart:214). Read moreSource§fn ime(&self) -> Ime
fn ime(&self) -> Ime
Source§fn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)>
fn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)>
Source§fn overlay_dismiss(&self) -> Option<Msg>
fn overlay_dismiss(&self) -> Option<Msg>
Source§fn overlay_scrim(&self, theme: &Theme) -> Option<Color>
fn overlay_scrim(&self, theme: &Theme) -> Option<Color>
None — the usual answer — leaves it to the scheme’s scrim
role at the framework’s own opacity. Read moreSource§fn overlay_traps_focus(&self) -> bool
fn overlay_traps_focus(&self) -> bool
true, this widget’s anchored overlay (a menu…) traps focus: Tab and the
arrow keys cycle within its focusables while it is open (the keyboard pattern of menus).
Modal (scrimmed) overlays already trap by default; a tooltip or an autocomplete list
(focus stays on the field) do not. Default: false.Source§fn anim_target(&self) -> Option<f32>
fn anim_target(&self) -> Option<f32>
1.0 for a switch that is on,
0.0 for off). The runtime drives the retained value towards this target and
hands it back through Status::value. None = no animated value.Source§fn anim_transform(&self) -> Option<TransformValues>
fn anim_transform(&self) -> Option<TransformValues>
Transform::animated): the runtime
tweens the scales and the turn through anim_duration/anim_curve and hands the
interpolated value back through Runtime::anim_transform, which the paint walk
reads in place of the static transform_scale/transform_rotate. None = the
transform does not move. Read moreSource§fn anim_duration(&self) -> f32
fn anim_duration(&self) -> f32
anim_target).
Default: the framework’s standard duration.Source§fn anim_curve(&self) -> Curve
fn anim_curve(&self) -> Curve
anim_target).
Default: linear.Source§fn opacity_group(&self) -> Option<f32>
fn opacity_group(&self) -> Option<f32>
[0,1]
applied to its whole subtree as one: the paint walk wraps its primitives
in a composited layer at that opacity — no double-blending where they
overlap. None = not a group. Combined with anim_target, the opacity
animates (a group fade).Source§fn anim_color(&self) -> Option<Color>
fn anim_color(&self) -> Option<Color>
Container::animated_color): the runtime tweens it (through
anim_duration/anim_curve) and hands the interpolated value back in
Status::anim_color. None = no animated colour.Source§fn anim_size(&self) -> Option<Size>
fn anim_size(&self) -> Option<Size>
Container::animated_size): the runtime
tweens it (through anim_duration/anim_curve) and the interpolated size is
injected at layout (see effective_style). None = fixed size.Source§fn anim_radius(&self) -> Option<BorderRadius>
fn anim_radius(&self) -> Option<BorderRadius>
Container::animated_radius):
the runtime tweens it and hands the interpolated value back in
Status::anim_radius. None = fixed radius.Source§fn anim_padding(&self) -> Option<Insets>
fn anim_padding(&self) -> Option<Insets>
Container::animated_padding):
the runtime tweens it and the interpolated padding is injected at layout
(see effective_style). None = fixed padding.Source§fn anim_offset(&self) -> Option<(f32, f32)>
fn anim_offset(&self) -> Option<(f32, f32)>
None — the default — leaves the rule
reading the widget’s own numbers. Read moreSource§fn anim_pins(&self) -> Option<Positioning>
fn anim_pins(&self) -> Option<Positioning>
crate::AnimatedPositioned): the
runtime tweens them and the interpolated pins are read where the stack lays its
layers out. None — the default — leaves Widget::positioned alone. Read moreSource§fn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)>
fn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)>
FractionallySizedBox::animated), as (width factor, height factor): the
runtime tweens them and the interpolated pair is injected at layout (see
effective_style), like the size and the padding. None = fixed factors. Read moreSource§fn anim_text_style(&self) -> Option<TextStyle>
fn anim_text_style(&self) -> Option<TextStyle>
AnimatedDefaultTextStyle). None = the subtree inherits whatever it inherits. Read moreSource§fn alignment_geometry(&self) -> Option<AlignmentGeometry>
fn alignment_geometry(&self) -> Option<AlignmentGeometry>
frus_core::AlignmentGeometry). Being continuous, a Tween<Alignment>
read in view() slides the child. None = default flex placement.Source§fn transform_translate(&self) -> Option<(f32, f32)>
fn transform_translate(&self) -> Option<(f32, f32)>
(dx, dy) applied to the widget’s whole subtree: the render
and the hit-test are offset without touching layout (siblings do not move,
the child may overflow its box). Continuous → a Tween read in view() slides
the subtree. None = no offset. See crate::Transform.Source§fn translate_fraction(&self) -> Option<(f32, f32)>
fn translate_fraction(&self) -> Option<(f32, f32)>
(fx, fy): (0.5, 0.0)
slides the subtree half its own width to the right. Added to
Widget::transform_translate, and offsetting the render and the hit-test the
same way, without touching layout. None = no offset. Read moreSource§fn transform_scale(&self) -> Option<(f32, f32, Alignment)>
fn transform_scale(&self) -> Option<(f32, f32, Alignment)>
(sx, sy, pivot) of the whole subtree: the render and the
hit-test are scaled — per axis — around the pivot (a
frus_core::Alignment within the box), without touching layout. Stays
axis-aligned (a scaled rect is still a rect). None = no scaling.
See crate::Transform.Source§fn transform_rotate(&self) -> Option<(f32, Alignment)>
fn transform_rotate(&self) -> Option<(f32, Alignment)>
(angle, pivot) of the whole subtree: the subtree is
painted rotated by angle radians (clockwise) around the pivot (a
frus_core::Alignment within the box), without touching layout. The
render goes through a rotated composited layer; the hit-test counter-rotates
the point. None = no rotation. See crate::Transform.Source§fn clip_shape(&self) -> Option<ClipShape>
fn clip_shape(&self) -> Option<ClipShape>
frus_core::ClipShape (rounded corners, ellipse)
modulates the alpha — whatever falls outside the shape is erased, edges
antialiased. None = no shape clip. See crate::ClipRRect,
crate::ClipOval.Source§fn clip_path(&self) -> Option<&Path>
fn clip_path(&self) -> Option<&Path>
ClipPath), returns the
path in local coordinates (origin at the box’s top-left corner). The walk
offsets it to the screen and wraps it in a layer whose mask (the path) erases
the outside. Takes priority over Widget::clip_shape. None = no path clip.
See crate::ClipPath.Source§fn layer_filter(&self, cx: FilterContext) -> Option<LayerFilter>
fn layer_filter(&self, cx: FilterContext) -> Option<LayerFilter>
Source§fn text_baseline(&self, theme: &Theme) -> Option<f32>
fn text_baseline(&self, theme: &Theme) -> Option<f32>
None — the default — means this widget has no
text of its own, and whatever is inside it answers instead. Read moreSource§fn ignores_baseline(&self) -> bool
fn ignores_baseline(&self) -> bool
true when this subtree should be left out of a parent’s baseline
alignment: it has a baseline, and the parent is to pretend it does not. An icon
beside a label, where the label is what the row should line up on. See
crate::IgnoreBaseline.Source§fn baseline_target(&self) -> Option<f32>
fn baseline_target(&self) -> Option<f32>
crate::Baseline),
the distance from the top of this box at which that baseline should land.
None = not a baseline box.Source§fn fill_axes(&self, theme: &Theme) -> FillAxes
fn fill_axes(&self, theme: &Theme) -> FillAxes
FillAxes::NONE means
shrink-wrap on both. Read moreSource§fn soft_extent(&self) -> FillAxes
fn soft_extent(&self) -> FillAxes
Source§fn main_axis_floor(&self, theme: &Theme) -> Option<f32>
fn main_axis_floor(&self, theme: &Theme) -> Option<f32>
None means squeeze freely. Read moreSource§fn tile_shape(&self) -> Option<f32>
fn tile_shape(&self) -> Option<f32>
width / height ratio to impose on each of them. None = each child keeps
its own shape. Read moreSource§fn positioned(&self) -> Option<Positioning>
fn positioned(&self) -> Option<Positioning>
crate::Stack’s edges
(crate::Positioned), what it pins. None = an ordinary layer, sized and
placed by the stack’s own fit and alignment. Read moreSource§fn stack_fit(&self) -> StackFit
fn stack_fit(&self) -> StackFit
crate::StackFit). Unset,
Passthrough: each is handed the stack’s box, and
one with a size of its own keeps it. Meaningless unless Widget::stack is true.Source§fn stack_measured(&self) -> bool
fn stack_measured(&self) -> bool
crate::Stack is, rather than the size its own style says. Meaningless unless
Widget::stack is true.Source§fn stack_clips(&self) -> bool
fn stack_clips(&self) -> bool
Source§fn stack_direction(&self) -> Option<TextDirection>
fn stack_direction(&self) -> Option<TextDirection>
Source§fn stack_visible(&self) -> Option<usize>
fn stack_visible(&self) -> Option<usize>
None, the default, shows all of them. Read moreSource§fn scroll_reverse(&self) -> bool
fn scroll_reverse(&self) -> bool
crate::SingleChildScrollView::reverse):
the content is anchored to the end of the viewport and offsets are counted from
there. Meaningless unless Widget::scroll_content is Some.Source§fn keep_visible(&self, size: Size, theme: &Theme) -> Option<KeepVisible>
fn keep_visible(&self, size: Size, theme: &Theme) -> Option<KeepVisible>
Source§fn scroll_padding(&self) -> Insets
fn scroll_padding(&self) -> Insets
Source§fn backdrop_group(&self) -> bool
fn backdrop_group(&self) -> bool
true when this widget is a backdrop group: the backdrops below it that
ask to be shared are filtered once between them. See crate::BackdropGroup.Source§fn ink(&self, theme: &Theme) -> Option<InkStyle>
fn ink(&self, theme: &Theme) -> Option<InkStyle>
None = no ink, which is the default: a
widget has to ask. Read moreSource§fn foreground(&self, theme: &Theme) -> Option<BoxDecoration>
fn foreground(&self, theme: &Theme) -> Option<BoxDecoration>
foregroundDecoration. Read moreSource§fn barrier(&self) -> Option<ModalBarrier>
fn barrier(&self) -> Option<ModalBarrier>
None = nothing withheld (the default). See crate::ModalBarrier,
crate::IgnorePointer, crate::AbsorbPointer, crate::Visibility,
crate::ExcludeSemantics.Source§fn dismissible(&self) -> Option<DismissSpec>
fn dismissible(&self) -> Option<DismissSpec>
crate::Dismissible), its
configuration for this frame. The shell gives a mostly-sideways drag on it to
the dismissal and a mostly-up-and-down one to the enclosing scrollable. None =
not dismissible.Source§fn on_dismissed(&self, direction: DismissDirection) -> Option<Msg>
fn on_dismissed(&self, direction: DismissDirection) -> Option<Msg>
None = the swipe is shown but removes nothing.Source§fn sheet(&self) -> Option<&SheetSpec>
fn sheet(&self) -> Option<&SheetSpec>
crate::DraggableScrollableSheet, its
configuration for this frame. The layout makes it as tall as the retained height,
and the shell shares a finger on it between the sheet and the scroll areas inside.
None = not a sheet.Source§fn on_sheet_dismissed(&self) -> Option<Msg>
fn on_sheet_dismissed(&self) -> Option<Msg>
None = it
cannot be dismissed, or says nothing when it is.Source§fn refresh(&self) -> Option<RefreshSpec>
fn refresh(&self) -> Option<RefreshSpec>
crate::RefreshIndicator), its configuration for
this frame. Any scrollable inside it routes the movement its physics refuses at
the top edge into the pull, instead of into the overscroll glow. None = not a
refresh area.Source§fn on_refresh(&self) -> Option<Msg>
fn on_refresh(&self) -> Option<Msg>
None =
the pull is shown but asks for nothing, which is what an area still waiting for
its on_refresh looks like.Source§fn interactive(&self) -> Option<(f32, f32)>
fn interactive(&self) -> Option<(f32, f32)>
InteractiveViewer), returns its
scale bounds (min, max). The paint walk renders its child in a transformed
layer (retained scale + translation, clipped to the viewport); the shell routes
drag → pan and wheel/pinch → zoom. None = not an interactive viewport.
See crate::InteractiveViewer.Source§fn fitted(&self) -> Option<BoxFit>
fn fitted(&self) -> Option<BoxFit>
FittedBox), returns the
frus_core::BoxFit: the walk measures the child at its natural size, scales
it according to the fit and centres it (composited layer, hit-test through
M⁻¹). None = not a fitter. See crate::FittedBox.Source§fn rotated_quarter_turns(&self) -> Option<i32>
fn rotated_quarter_turns(&self) -> Option<i32>
RotatedBox), returns
the number of quarters. Unlike Transform, this affects layout: the box
swaps its dimensions for an odd number. None = not a RotatedBox.
See crate::RotatedBox.(progress, push?). Its children
([screen] or [outgoing, incoming]) are rendered full-window with a sliding
transition.navigator’s transition — a back
gesture — so that it follows the finger linearly (milestone 620).0, the default, is a navigator that shows every
page it holds.Source§fn measure(&self, theme: &Theme) -> Option<MeasureFn<'_>>
fn measure(&self, theme: &Theme) -> Option<MeasureFn<'_>>
None = size fixed by style(). Contract: must be Some if and only if
Widget::measure_key is. Read moreSource§fn measure_key(&self, theme: &Theme) -> Option<u64>
fn measure_key(&self, theme: &Theme) -> Option<u64>
Widget::measure depends on (text, style…),
mixed into the relayout fingerprint: without it, two different contents with
the same style would be conflated by the cache and would keep a stale
geometry. Contract: Some if and only if measure() is. Read moreSource§fn on_long_press(&self) -> Option<Msg>
fn on_long_press(&self) -> Option<Msg>
on_click.Source§fn on_double_tap(&self) -> Option<Msg>
fn on_double_tap(&self) -> Option<Msg>
on_click waits out those 300 ms, so that
the second tap of a double tap is not also a tap.Source§fn on_secondary_tap(&self) -> Option<Msg>
fn on_secondary_tap(&self) -> Option<Msg>
Source§fn pan_axis(&self) -> Option<PanAxis>
fn pan_axis(&self) -> Option<PanAxis>
on_pan. Inside a scroll, a drag along
the scroll’s axis stays the scroll’s unless this axis claims it.Source§fn hover_region(&self) -> Option<HoverRegion>
fn hover_region(&self) -> Option<HoverRegion>
None for anything that is not one.Source§fn pointer_listener(&self) -> bool
fn pointer_listener(&self) -> bool
Source§fn on_pointer_event(&self, event: ListenerEvent) -> Vec<Msg>
fn on_pointer_event(&self, event: ListenerEvent) -> Vec<Msg>
pointer_listener. Several, when listeners wrap each other at
the same place.Source§fn on_hover_event(&self, event: HoverEvent) -> Option<Msg>
fn on_hover_event(&self, event: HoverEvent) -> Option<Msg>
hover_region is set.Source§fn on_pan(&self, event: PanEvent) -> Option<Msg>
fn on_pan(&self, event: PanEvent) -> Option<Msg>
pan_axis is set.Source§fn wants_title_bar(&self) -> bool
fn wants_title_bar(&self) -> bool
WindowMenuBar’s row. The shell gives it the line where the
system allows it.Source§fn title_bar_role(&self) -> Option<TitleBarRole>
fn title_bar_role(&self) -> Option<TitleBarRole>
Source§fn pan_value(&self, event: PanEvent, value: f32, rtl: bool) -> Option<f32>
fn pan_value(&self, event: PanEvent, value: f32, rtl: bool) -> Option<f32>
anim_target) — a
switch’s thumb following the finger (milestone 638). Given a moment of the drag, the
value now and whether the text runs right to left, the value to hold it at; None
leaves it alone. The shell holds the value there while the finger is down, and when
it lifts lets it settle from there, asking on_value_release what that means.Source§fn on_value_release(&self, value: f32) -> Option<Msg>
fn on_value_release(&self, value: f32) -> Option<Msg>
value — a switch
flips when its thumb was let go past half way (milestone 638).Source§fn on_key(&self, key: &Key) -> KeyResponse<Msg>
fn on_key(&self, key: &Key) -> KeyResponse<Msg>
Ignored. (E.g. an OverlayPortal
consumes Escape to close itself.)Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl<Msg> Widget<Msg> for Box<dyn Widget<Msg>>
Lets an already boxed widget be composed where an impl Widget is expected
(e.g. Flex::child). Delegates everything to the contained widget.
impl<Msg> Widget<Msg> for Box<dyn Widget<Msg>>
Lets an already boxed widget be composed where an impl Widget is expected
(e.g. Flex::child). Delegates everything to the contained widget.
fn style(&self) -> Style
fn style_themed(&self, theme: &Theme) -> Style
fn theme_override(&self, inherited: &Theme) -> Option<Box<Theme>>
fn media_override(&self, inherited: MediaQuery) -> Option<MediaQuery>
fn scaffold_override(&self) -> Option<ScaffoldInfo>
fn scroll_behavior_override(&self) -> Option<ScrollBehavior>
fn build_themed(&self, theme: &Theme)
fn build_in(&self, id: WidgetId, runtime: &Runtime, theme: &Theme)
fn expand(&self, id: WidgetId, runtime: &Runtime, theme: &Theme)
fn switches(&self) -> bool
fn system_ui_style(&self) -> Option<SystemUiOverlayStyle>
fn repaint_boundary(&self) -> bool
fn debug_name(&self) -> &'static str
fn semantics(&self) -> Option<SemanticsProperties>
fn describes(&self) -> Option<Description>
fn children(&self) -> &[Box<dyn Widget<Msg>>]
fn paint(&self, bounds: Rect, status: Status, theme: &Theme, scene: &mut Scene)
fn on_click(&self) -> Option<Msg>
fn opaque(&self) -> bool
fn positional_click( &self, local_x: f32, local_y: f32, width: f32, height: f32, ) -> Option<Msg>
fn cursor_icon( &self, local_x: f32, local_y: f32, width: f32, height: f32, ) -> Option<Cursor>
fn key(&self) -> Option<u64>
fn on_edit(&self, edit: &mut Edit, key: &Key) -> Option<Msg>
fn cursor_at( &self, local_x: f32, local_y: f32, width: f32, scroll_cursor: usize, ) -> Option<usize>
fn text_metrics( &self, width: f32, cursor: usize, ) -> Option<(f32, f32, f32, f32)>
fn text_viewport(&self, rect: Rect) -> Option<Rect>
fn caret_vertical( &self, width: f32, cursor: usize, down: bool, page: bool, goal_x: Option<f32>, ) -> Option<(usize, f32)>
fn selected_text(&self, edit: &Edit) -> Option<String>
fn text_value(&self) -> Option<&str>
fn takes_typing(&self) -> bool
fn selection_text(&self) -> Option<&str>
fn region_toolbar( &self, context: ToolbarContext, width: f32, range: (usize, usize), ) -> Option<(Rect, &dyn Widget<Msg>)>
fn selection_grip( &self, width: f32, index: usize, start: bool, ) -> Option<SelectionHandle>
fn area_toolbar( &self, context: ToolbarContext, ) -> Option<Option<&dyn Widget<Msg>>>
fn selection_hit(&self, local_x: f32, local_y: f32, width: f32) -> Option<usize>
fn replace_value(&self, value: String) -> Option<Msg>
fn word_at(&self, index: usize) -> Option<(usize, usize)>
fn selection_handles( &self, width: f32, edit: &Edit, scroll_y: f32, ) -> Option<[SelectionHandle; 2]>
fn selection_toolbar(&self, context: ToolbarContext) -> Option<&dyn Widget<Msg>>
fn selection_anchor( &self, width: f32, edit: &Edit, scroll_y: f32, ) -> Option<Rect>
fn edit_action(&self) -> Option<EditAction>
fn focusable(&self) -> bool
fn autofocus(&self) -> bool
fn shortcut_bindings(&self) -> &[(KeyStroke, Intent)]
fn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)]
fn action_bindings(&self) -> &[(Intent, Msg)]
fn action_listeners(&self) -> &[(Intent, Msg)]
fn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>>
fn descendants_focusable(&self) -> bool
fn focus_skip_traversal(&self) -> bool
fn focus_order(&self) -> Option<f32>
fn focus_group(&self) -> bool
fn autofill_hints(&self) -> &[AutofillHint]
fn autofill_group(&self) -> bool
fn draws_own_focus(&self) -> bool
fn draggable(&self) -> bool
fn drag_track(&self) -> DragTrack
fn on_drag(&self, fraction: f32) -> Option<Msg>
fn on_drag_start(&self, fraction: f32) -> Option<Msg>
fn on_drag_end(&self, fraction: f32) -> Option<Msg>
fn on_drag_delta(&self, dx: f32) -> Option<Msg>
fn reorder_index(&self) -> Option<usize>
fn on_reorder(&self, to: usize) -> Option<Msg>
fn reorder_draggable(&self) -> bool
fn reorder_droppable(&self) -> bool
fn reorder_announcement(&self, to: usize) -> Option<String>
fn reorder_axis(&self) -> ReorderAxis
fn reorder_inserts(&self) -> bool
fn announce(&self) -> Option<String>
fn stack(&self) -> bool
fn sticky_header(&self) -> bool
fn custom_layout(&self) -> Option<CustomLayout<'_>>
fn continuous(&self) -> bool
fn scroll_content(&self) -> Option<&dyn Widget<Msg>>
fn virtual_list(&self, viewport: Size) -> Option<VirtualList<'_, Msg>>
fn page_view(&self) -> Option<PagedView<'_, Msg>>
fn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)>
fn overflow_box(&self) -> Option<Overflow>
fn constraints_transform(&self) -> Option<ConstraintsTransform>
fn animated_size(&self) -> Option<SizeAnimation>
fn size_factor(&self) -> Option<(f32, f32)>
fn clips_to_box(&self) -> bool
fn hero_tag(&self) -> Option<u64>
fn drag_payload(&self) -> Option<u64>
fn drag_needs_long_press(&self) -> bool
fn drag_ghost_opacity(&self) -> f32
fn on_dropped(&self, accepted: bool) -> Option<Msg>
fn drop_zone(&self) -> bool
fn accepts_drag(&self, payload: u64) -> bool
fn on_drop(&self, payload: u64) -> Option<Msg>
fn on_page_changed(&self, page: usize) -> Option<Msg>
fn on_scroll(&self, position: ScrollPosition) -> Option<Msg>
fn scroll_grain(&self) -> f32
fn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>>
fn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>>
fn scroll_axis(&self) -> Axis
fn scroll_physics(&self) -> Option<ScrollPhysics>
fn scrollbars(&self) -> Option<Scrollbars>
fn thumb_visibility(&self) -> Option<bool>
fn ime(&self) -> Ime
fn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)>
fn overlay_dismiss(&self) -> Option<Msg>
fn overlay_scrim(&self, theme: &Theme) -> Option<Color>
fn overlay_traps_focus(&self) -> bool
fn anim_target(&self) -> Option<f32>
fn anim_transform(&self) -> Option<TransformValues>
fn anim_duration(&self) -> f32
fn anim_curve(&self) -> Curve
fn opacity_group(&self) -> Option<f32>
fn anim_color(&self) -> Option<Color>
fn anim_size(&self) -> Option<Size>
fn anim_radius(&self) -> Option<BorderRadius>
fn anim_padding(&self) -> Option<Insets>
fn anim_offset(&self) -> Option<(f32, f32)>
fn anim_pins(&self) -> Option<Positioning>
fn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)>
fn anim_text_style(&self) -> Option<TextStyle>
fn alignment_geometry(&self) -> Option<AlignmentGeometry>
fn transform_translate(&self) -> Option<(f32, f32)>
fn translate_fraction(&self) -> Option<(f32, f32)>
fn transform_scale(&self) -> Option<(f32, f32, Alignment)>
fn transform_rotate(&self) -> Option<(f32, Alignment)>
fn clip_shape(&self) -> Option<ClipShape>
fn clip_path(&self) -> Option<&Path>
fn layer_filter(&self, cx: FilterContext) -> Option<LayerFilter>
fn text_baseline(&self, theme: &Theme) -> Option<f32>
fn ignores_baseline(&self) -> bool
fn baseline_target(&self) -> Option<f32>
fn fill_axes(&self, theme: &Theme) -> FillAxes
fn soft_extent(&self) -> FillAxes
fn main_axis_floor(&self, theme: &Theme) -> Option<f32>
fn tile_shape(&self) -> Option<f32>
fn positioned(&self) -> Option<Positioning>
fn stack_fit(&self) -> StackFit
fn stack_measured(&self) -> bool
fn stack_clips(&self) -> bool
fn stack_direction(&self) -> Option<TextDirection>
fn stack_visible(&self) -> Option<usize>
fn scroll_reverse(&self) -> bool
fn keep_visible(&self, size: Size, theme: &Theme) -> Option<KeepVisible>
fn scroll_padding(&self) -> Insets
fn backdrop_group(&self) -> bool
fn ink(&self, theme: &Theme) -> Option<InkStyle>
fn foreground(&self, theme: &Theme) -> Option<BoxDecoration>
fn barrier(&self) -> Option<ModalBarrier>
fn dismissible(&self) -> Option<DismissSpec>
fn on_dismissed(&self, direction: DismissDirection) -> Option<Msg>
fn sheet(&self) -> Option<&SheetSpec>
fn on_sheet_dismissed(&self) -> Option<Msg>
fn refresh(&self) -> Option<RefreshSpec>
fn on_refresh(&self) -> Option<Msg>
fn interactive(&self) -> Option<(f32, f32)>
fn fitted(&self) -> Option<BoxFit>
fn rotated_quarter_turns(&self) -> Option<i32>
fn measure(&self, theme: &Theme) -> Option<MeasureFn<'_>>
fn measure_key(&self, theme: &Theme) -> Option<u64>
fn on_long_press(&self) -> Option<Msg>
fn on_double_tap(&self) -> Option<Msg>
fn on_secondary_tap(&self) -> Option<Msg>
fn pan_axis(&self) -> Option<PanAxis>
fn hover_region(&self) -> Option<HoverRegion>
fn pointer_listener(&self) -> bool
fn on_pointer_event(&self, event: ListenerEvent) -> Vec<Msg>
fn on_hover_event(&self, event: HoverEvent) -> Option<Msg>
fn on_pan(&self, event: PanEvent) -> Option<Msg>
fn wants_title_bar(&self) -> bool
fn title_bar_role(&self) -> Option<TitleBarRole>
fn pan_value(&self, event: PanEvent, value: f32, rtl: bool) -> Option<f32>
fn on_value_release(&self, value: f32) -> Option<Msg>
fn on_key(&self, key: &Key) -> KeyResponse<Msg>
Implementors§
impl<Msg: 'static> Widget<Msg> for OverflowBar<Msg>
impl<Msg: 'static> Widget<Msg> for ScrollOverlay<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for AnimatedContainer<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for AnimatedCrossFade<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for AnimatedFractionallySizedBox<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for AnimatedOpacity<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for AnimatedPadding<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for AnimatedSwitcher<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for BackButton<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for BottomAppBar<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for Button<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for CheckboxListTile<Msg>
The three Widget implementations, written out rather than produced by a macro.
They are three near-identical copies and a macro would say them once, which is what
this module did until the crate’s own guard failed on it: milestone 322’s
every_control_with_an_enabled_flag_honours_all_four reads the source of every
module carrying an enabled flag and checks that each of the four hooks consults it.
A hook inside a macro_rules! body is text the guard cannot parse, so the macro put
this module in the one place the net does not reach.
A safety net a widget can hide from is a net with a hole in it. Three copies is the cheaper of the two prices.
impl<Msg: Clone + 'static> Widget<Msg> for Chip<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for CloseButton<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ColorPicker<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ColoredBox<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for DataTable<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for DecoratedBox<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for DraggableScrollableSheet<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for Drawer<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for DrawerButton<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for DrawerHeader<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for EndDrawerButton<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ExpansionPanelList<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ExpansionTile<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for GridTile<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for GridTileBar<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for GridView<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ListTile<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ListWheel<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for Opacity<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for RadioListTile<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for RangeSlider<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ReorderableList<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for SearchAnchor<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for SearchBar<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for SwitchListTile<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for Text
impl<Msg: Clone + 'static> Widget<Msg> for TextField<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ThemeBuilder<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for ToggleButtons<Msg>
impl<Msg: Clone + 'static> Widget<Msg> for UserAccountsDrawerHeader<Msg>
impl<Msg: Clone> Widget<Msg> for AbsorbPointer<Msg>
impl<Msg: Clone> Widget<Msg> for ActionListener<Msg>
impl<Msg: Clone> Widget<Msg> for Actions<Msg>
impl<Msg: Clone> Widget<Msg> for Aligned<Msg>
impl<Msg: Clone> Widget<Msg> for AnimatedAlign<Msg>
Everything is the Aligned it is, which moves its anchor.