Skip to main content

GridView

Struct GridView 

Source
pub struct GridView<T: 'static> { /* private fields */ }
Expand description

A virtualized 2D tile grid backed by a ListModel<T>.

Implementations§

Source§

impl<T: 'static> GridView<T>

Source

pub fn new( model: ListModel<T>, delegate: impl Fn(&TileContext<'_, T>) -> Box<dyn Widget> + 'static, ) -> Self

Create a grid backed by a ListModel<T>. The delegate builds the widget for each tile from a TileContext.

Source

pub fn from_source<S: ListDataSource<Item = T>>( source: S, delegate: impl Fn(&TileContext<'_, T>) -> Box<dyn Widget> + 'static, ) -> Self

Create a grid backed by any ListDataSource (large / external data).

Source

pub fn from_source_keyed<S: ListDataSource<Item = T>>( source: S, keyed: KeyedSelectionModel<S::Key>, delegate: impl Fn(&TileContext<'_, T>) -> Box<dyn Widget> + 'static, ) -> Self
where S::Key: ItemKey,

Create a grid backed by any ListDataSource with keyed selection.

The KeyedSelectionModel<S::Key> holds the selected items by the source’s key, not by position, so a selection survives the grid being sorted (by artist, by year), narrowed by a filter, or a lazy source sliding its loaded window: it stays on the same items. Clicks, Ctrl/⌘-clicks, Shift-clicks, the keyboard and the rubber band all write keys. An item the source no longer shows (removed, or filtered out here) leaves the selection, as in ListView.

on_selection_changed still reports indices: the positions the selected keys have when the selection changes. A sort moves them without changing the selection, so it does not fire. The view stays GridView<T>; the index↔key mapping is captured from the concrete source here. Mutually exclusive with selection (the last one set wins).

Source

pub fn enabled(self, enabled: impl Into<Prop<bool>>) -> Self

Enable or disable the whole view. A disabled view greys out and stops accepting focus / selection / keyboard input (arena-gated).

Source

pub fn sizing(self, sizing: impl Into<Prop<GridSizing>>) -> Self

Set the tile sizing / column-count policy.

Accepts a plain GridSizing (static) or a Signal<GridSizing> (reactive). A bound signal is observed at [BindingLevel::Rebuild]: when it changes, build() rebuilds the cached layout strategy and reflows — the internal scroll_y / focused_index / selection are field signals on the same widget instance, so they survive the rebuild (no scroll jump). This is the card-size-slider path; mirrors TabWidget::sizing.

Source

pub fn tile_size(self, width: f32, height: f32) -> Self

Sugar for GridSizing::Fixed — every tile is exactly width × height.

Source

pub fn column_count(self, count: usize, tile_height: f32) -> Self

Sugar for GridSizing::FixedColumnCount — exactly count columns.

Source

pub fn variable_row_heights(self, estimated: f32) -> Self

Switch to variable row heights: each row is sized to its tallest tile (SwiftUI LazyVGrid semantics). estimated seeds rows that haven’t been measured yet; the scroll position is anchored when an estimate is later corrected. Combine with item_height for exact heights.

Source

pub fn item_height(self, f: impl Fn(usize) -> f32 + 'static) -> Self

Supply an exact per-item natural height. Width-independent, so it doesn’t depend on the runtime column count: VariableRowGrid sizes each row to max(item_height(i)) over its items. Implies variable row heights, gives an exact scrollbar, and removes anchoring jitter.

Source

pub fn waterfall(self, estimated: f32) -> Self

Switch to a Pinterest-style waterfall: per-item variable heights flow into the currently-shortest column. Column count comes from the configured sizing; heights are auto-measured (or exact via item_height). estimated seeds unmeasured items.

Source

pub fn column_spacing(self, spacing: f32) -> Self

Horizontal gap between tiles (default 8).

Source

pub fn row_spacing(self, spacing: f32) -> Self

Vertical gap between tile rows (default 8).

Source

pub fn spacing(self, spacing: f32) -> Self

Set both column and row spacing.

Source

pub fn content_inset(self, inset: EdgeInsets) -> Self

Inset from the scroll-content edge to the tiles.

Source

pub fn min_columns(self, count: usize) -> Self

Never fewer than count columns (at least 1).

Bounds the count a GridSizing::Fixed or GridSizing::Adaptive derives from the width; ignored by GridSizing::FixedColumnCount, whose count is already the answer. When the width cannot afford count columns of the sizing’s width, the tiles narrow to share the width — the grid never overflows horizontally. The tile height is kept as the sizing gives it (a card gets narrower, not shorter), so a tile that must hold its aspect ratio sizes its own content from the width it is handed. If min_columns exceeds max_columns, the maximum wins.

Source

pub fn max_columns(self, count: usize) -> Self

Never more than count columns (at least 1), however wide the viewport.

Bounds the count a GridSizing::Fixed or GridSizing::Adaptive derives from the width; ignored by GridSizing::FixedColumnCount. Under Fixed the tiles keep their width and the leftover is placed by column_alignment; under Adaptive they stretch to share the width of the capped count, up to max_width.

Source

pub fn column_alignment(self, alignment: HAlignment) -> Self

Where the block of columns sits in the viewport when it is narrower than the content: [HAlignment::Leading] (the default, the tiles against the leading inset, leftover trailing), Center or Trailing. Leading and trailing swap in a right-to-left layout. Only the columns move: a section header and a detail_row band span the content width. The order of the columns within the block is the same in both directions.

Only a layout that leaves width over has anything to place: a GridSizing::Fixed grid, an Adaptive one with max_width, or any grid capped by max_columns.

Source

pub fn selection(self, sel: SelectionModel) -> Self

Set the index-based selection model (modes None / Single / Multi). It holds positions: for a selection that stays on its items through a sort or a filter, build the grid with from_source_keyed instead.

Source

pub fn on_selection_changed( self, f: impl Fn(&BTreeSet<usize>) + 'static, ) -> Self

Called whenever the selection set changes — including programmatic changes — with the new set of selected indices. For a keyed selection these are the positions its keys have at that moment.

Because it also fires for programmatic changes, it carries no input modifiers and no EventContext; for the modifiers held at the moment of input, use on_tile_activate, which receives one.

Source

pub fn marquee_selection(self, enabled: bool) -> Self

Enable / disable rubber-band marquee selection (default enabled; only active when the selection model is in Multi mode).

Source

pub fn wrap_navigation(self, enabled: bool) -> Self

Whether arrow navigation wraps across row/grid edges (default false).

Source

pub fn tab_traversal(self, traversal: GridTabTraversal) -> Self

How Tab moves out of (or within) the grid (default OutOfGrid).

Source

pub fn show_scrollbar(self, show: bool) -> Self

Suppress the internal scrollbar (mount your own via the signal accessors so it survives rebuilds).

Source

pub fn overscroll_behavior(self, behavior: OverscrollBehavior) -> Self

Scroll-chaining behavior at the boundary (default Chain).

Source

pub fn smooth_scrolling(self, enabled: bool) -> Self

Enable or disable animated wheel scrolling (enabled by default).

Source

pub fn smooth_scroll_duration(self, duration: Duration) -> Self

Duration of the smooth scroll animation (default 150 ms).

Source

pub fn scroll_bar_style(self, style: ScrollBarMode) -> Self

How the scroll bar is displayed (default Permanent). Overlay and Thin float the bar over the content instead of reserving a layout column, mirroring ScrollArea::scroll_bar_style.

Source

pub fn scroll_y_signal(&self) -> &Signal<f32>

The vertical scroll offset signal.

Source

pub fn max_scroll_y_signal(&self) -> &Signal<f32>

The maximum scroll offset signal (content_height - viewport_height).

Source

pub fn viewport_ratio_y_signal(&self) -> &Signal<f32>

The vertical viewport-to-content ratio signal (drives the thumb size).

Source

pub fn detail_visible_span_signal(&self) -> &Signal<Option<Range<f32>>>

The part of the open detail band that is on screen, in band-local coordinates: max(0, scroll_y − band.y) .. min(band.height, scroll_y + viewport_height − band.y), where band.y is the band’s top in the grid’s content. None while no band is open, and while the open band is entirely off screen.

Written by each layout after the scroll offset is clamped, and only when it changes, so an observer is not told of a scroll that leaves the band’s visible part as it was. Meant for a band holding far more than a viewport shows, hundreds of tracks say, that realizes only the rows in the span: a window of rows between two spacers, with no copy of the grid’s placement arithmetic. See the module docs, “A long band”.

Source

pub fn handle(&self) -> GridViewHandle

A GridViewHandle on this grid: scroll it to a tile, or to a tile and its detail band, from outside the widget.

Usable at once and for the grid’s whole life: a request made before the grid is mounted is applied at its first layout, and the handle keeps working through every rebuild. A request is applied by the layout, after it has measured the detail band and settled the scroll anchoring, so one made in the same turn as opening a band lands where the new layout puts the tile. Prefer it to scroll_to_index and ensure_index_visible, which compute the offset when they are called.

Source

pub fn ensure_index_visible(&self, index: usize, anchor: ScrollAnchor)

Bring index into view: nothing when the tile is already fully visible, otherwise a scroll per anchor, as scroll_to_index.

Computed at call time from the last layout’s geometry and clamped to its scroll range. Before the grid has been laid out there is no geometry and this does nothing, and a change of layout made in the same turn (a detail band opened above the tile) is not yet counted. GridViewHandle::ensure_index_visible has neither limit.

Source

pub fn scroll_to_index(&self, index: usize, anchor: ScrollAnchor)

Scroll to index, forcing its position in the viewport per anchor; ScrollAnchor::Auto scrolls the least that shows it.

Computed at call time, with the limits ensure_index_visible documents: it does nothing before the grid’s first layout. GridViewHandle::scroll_to_index has neither limit.

Source

pub fn sections<P: SectionProvider>(self, provider: P) -> Self

Group the flat model into sections, rendering a header above each section’s tile band. Sections compose with the uniform tile layout.

Source

pub fn section_header_delegate( self, f: impl Fn(usize, &str) -> Box<dyn Widget> + 'static, ) -> Self

Custom section-header widget builder (section_index, title). Without it a default bold-text header is used.

Source

pub fn section_header_height(self, height: f32) -> Self

Height of each section header row (default 28).

Source

pub fn pinned_section_headers(self, enabled: bool) -> Self

Keep the current section’s header pinned to the top while scrolling through it (SwiftUI pinnedViews:[.sectionHeaders]).

Source

pub fn a11y_label(self, label: impl Into<String>) -> Self

Accessible label for the grid container.

Source

pub fn style(self, style: impl GridViewStyle) -> Self

Per-call Tier-3 decoration style override (focus ring, marquee, insertion bar, pinned-header surface). Precedence: this override → theme.style_slots.grid_view → the stock RecipeGridViewStyle.

Source

pub fn empty_view(self, f: impl Fn() -> Box<dyn Widget> + 'static) -> Self

Widget shown when the model is empty.

Source

pub fn loading_view(self, f: impl Fn() -> Box<dyn Widget> + 'static) -> Self

Widget overlaid while is_loading reads true.

Source

pub fn is_loading(self, flag: impl Into<Prop<bool>>) -> Self

Reactive loading flag; when true the loading_view is shown above the grid.

Source

pub fn reorderable(self, enabled: bool) -> Self

Enable intra-grid drag reordering (and keyboard Alt+Arrow). The move is routed through the source’s accept_drop (a built-in ListModel reorders via move_item; an external source applies its own command).

Source

pub fn exportable(self, mode: DragTransferMode) -> Self
where T: Clone,

Make tiles droppable outside this view — on a DropTarget, another data view, or the OS.

A dragged tile (or the whole selection, when the pressed tile is part of a multi-selection) carries clones of its items in a public RowDragData<T>, so a foreign receiver can pull them out with payload.get_typed::<RowDragData<T>>() / DropTarget::on_drop_typed::<RowDragData<T>>() — no serialization. This also makes tiles a drag source even without reorderable.

mode chooses what happens to the origin rows once a foreign target accepts them: DragTransferMode::Move removes them (via the source’s on_drag_out, or on_rows_transferred_out), DragTransferMode::Copy leaves them. A same-view reorder is never a transfer, so mode never affects it. Requires T: Clone.

Source

pub fn export_external( self, f: impl Fn(&[T]) -> Vec<(String, Vec<u8>)> + 'static, ) -> Self
where T: Clone,

Additionally advertise the dragged tiles as MIME data so they can be dropped on a DropZone or exported to another application / window via the OS. f maps the dragged items to (mime_type, bytes) pairs (e.g. text/plain, text/uri-list, an app-specific application/x-…). Implies exportable (defaulting to DragTransferMode::Move if not already set). Requires T: Clone.

Source

pub fn on_rows_transferred_out( self, f: impl Fn(&[usize], &mut EventContext<'_>) + 'static, ) -> Self

Override how rows moved out to a foreign target are removed from this view. Receives the dragged rows’ indices (descending-safe) and the live context. Without this, an exportable Move drag removes them through the source’s on_drag_out (works out of the box for a ListModel).

Source

pub fn accept_foreign_rows(self, accept: bool) -> Self

Accept exported rows dropped from a different view or source without writing a custom ListDataSource. Pair with on_rows_received, which is handed the dropped items and the insertion index. (Same-view reorder is reorderable; a custom ListDataSource can still accept foreign drops through its can_accept/accept_drop instead.)

Source

pub fn on_rows_received( self, f: impl Fn(Vec<T>, usize, &mut EventContext<'_>) + 'static, ) -> Self

Handler for rows accepted via accept_foreign_rows: (items, insertion_index, ctx). Insert them into your model at the index.

Source

pub fn on_item_drop( self, f: impl Fn(DragPayload, usize, &mut EventContext<'_>) -> bool + 'static, ) -> Self

Accept external drops at a flat insertion index. Returns true when the drop is accepted.

Source

pub fn on_tile_activate( self, f: impl Fn(usize, &mut EventContext<'_>) + 'static, ) -> Self

Called when a tile is activated (a click per activate_on, or Enter on the focused tile) — the “open / default action”, distinct from selection.

Source

pub fn activate_on(self, mode: ActivateOn) -> Self

Choose single- vs double-click tile activation (default ActivateOn::DoubleClick). Enter activates in either mode.

Source

pub fn tile_context_menu( self, f: impl Fn(usize, Point, &mut EventContext<'_>) -> Option<Box<dyn Widget>> + 'static, ) -> Self

Per-tile context-menu factory: (index, pointer_position, ctx) → optional menu widget.

Source

pub fn type_ahead_label(self, f: impl Fn(usize) -> String + 'static) -> Self

Supply a per-item label for type-ahead navigation (typing letters jumps to the first matching item). Required to enable type-ahead.

Source

pub fn tile_a11y_label(self, f: impl Fn(usize) -> String + 'static) -> Self

Supply a per-item accessible name applied to each tile’s GridCell (Node::label), so a screen reader announces a concise item name in addition to the row/column position. Without it, the cell’s name is left to its contents.

Source

pub fn type_ahead_timeout(self, timeout: Duration) -> Self

Type-ahead reset timeout (default 500 ms; ZERO disables).

Source

pub fn expanded_index(self, expanded: Signal<Option<usize>>) -> Self

The disclosed tile: Some(index) opens a full-width band under the row holding tile index (see detail_row), None closes it. The grid writes it when a tile is activated (not for a tile with nothing to disclose), and follows writes made from outside. Without this the grid keeps its own signal.

Source

pub fn detail_row( self, f: impl Fn(&TileContext<'_, T>) -> Option<Box<dyn Widget>> + 'static, ) -> Self

The content of the detail band: the “album expansion” of a music library, a full-width band opened directly under the row that holds the activated tile.

f receives the disclosed tile’s TileContext, the same one the tile delegate gets, and returns the band’s content, or None when the tile has nothing to disclose. It is also asked when a tile is activated, to learn whether it has anything, and its answer dropped, so it should be cheap and have no side effects. The band pushes the following rows down, and stays under its tile when a resize changes the column count.

With a band, activating a tile (a click per activate_on, or Enter) opens it and scrolls it into view, and activating the open tile closes it; on_tile_activate still fires. A tile with nothing to disclose opens nothing. In a single selection, Enter also selects the tile whose band it opens, unless the application has an activation of its own; a multiple selection is left as it is. Space on the open tile closes it. ↓ from the open tile moves focus to the first focusable control in the band, scrolling it into view, and ↑ from there, when the control does not use it, returns to the tile. A band that closes with focus inside it hands focus back to the grid, on its tile. Arrows between tiles step over the band, and the rubber band selects no band.

The band follows its tile when the tile moves. A source with item keys is followed through a sort or a filter (a reset); a source without them is followed through inserts, removals and moves, and closes the band on a reset. A ListModel’s keys are its positions, which identify no item across a reset, so it counts as a source without keys here, through from_source as through new. The band closes when its tile is removed.

The band is measured height-for-width at the content width, or sized by detail_row_height. It works with the uniform grid, variable_row_heights and sections. A waterfall has no rows to put it under and ignores it. A band that opens, closes or moves above the viewport leaves the visible tiles where they are. Its content is rebuilt when the band moves to another tile, when its own tile’s item arrives from a lazy source, and when the grid’s rows change (an insert, a removal, a move, an update, a reset); a lazy source loading other windows leaves it as it is.

Accessibility: the band is a Role::Group, read after its tile’s row, named after its tile’s tile_a11y_label, or labelled by the tile, or, with the tile outside the realized window, “Details of item N” in the user’s language. A tile carries an expanded state, Expand / Collapse actions and, while open, a controls relation to the band. Without detail_row_when every tile does, one with nothing to disclose included, since knowing otherwise means building its band, and that one stays collapsed. The grid’s row and column counts and the tiles’ positions do not count the band.

Source

pub fn detail_row_when( self, f: impl Fn(&TileContext<'_, T>) -> bool + 'static, ) -> Self

Which tiles have a detail band, answered without building one: f receives the tile’s TileContext, as detail_row does, and returns false for a tile with nothing to disclose.

Such a tile is not a disclosure. Assistive technology hears no expanded state on it and is offered no Expand or Collapse, which it would be otherwise. Activating it opens nothing, detail_row is not asked for it, and expanded_index naming it opens no band.

f is asked as each tile is built: when it comes into the realized window, after a change to the data, and when its selectedness flips. Answer from the item, cheaply and with no side effects, and agree with detail_row: a tile f accepts and detail_row gives nothing for is offered as expandable, and opens nothing. A tile of a lazy source whose item has not arrived is offered until it does. Without detail_row, this does nothing.

Source

pub fn detail_row_height(self, f: impl Fn(usize) -> f32 + 'static) -> Self

The detail band’s height for the tile at index, instead of measuring it. See detail_row.

Trait Implementations§

Source§

impl<T: 'static> Debug for GridView<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: 'static> Widget for GridView<T>

Source§

fn context_menu_key_target(&self) -> Option<WidgetId>

The context-menu key opens the focused tile’s menu, not the grid’s.

A GridView is focusable and its tiles are not — the container owns focus and active_descendant above is what points assistive technology at the current tile. So the dispatcher’s default of “the focused widget” would open the grid’s own menu.

The tile the user means is the roving cursor, else the first selected tile. Only realized tiles have a widget, so a cursor scrolled outside the virtualization window resolves to nothing and the menu falls back to the grid — which is right, since there is no tile on screen for it to be about.

Source§

fn accessibility_children(&self) -> Option<Vec<WidgetId>>

Every child but the detail band, which the body pane presents among the tiles, after its own row (GridBodyPane::accessibility_children).

Source§

fn build(&mut self, ctx: &mut BuildContext<'_>) -> Vec<WidgetId>

Compose child widgets. Called once after the widget is placed in the arena, and again whenever the widget is marked for rebuild — a BindingLevel::Rebuild binding, rebuild_single_widget, or a density switch. A theme or locale switch does not rebuild: set_theme and set_locale mark layout + paint dirty and leave the built subtree standing, so anything derived from the theme or the locale must be read per pass or bound to a signal rather than captured here. Takes &mut self — store child IDs, signal handles, any state needed later. Returns the list of root child IDs (empty for leaf widgets).
Source§

fn layout_response( &self, proposal: SizeProposal, _ctx: &LayoutContext<'_>, ) -> LayoutResponse

Respond to the parent’s size proposal with this widget’s wanted size, grow/shrink weights, and compression floor (see [LayoutResponse]). Read more
Source§

fn place_children( &self, bounds: Rect, _proposal: SizeProposal, children: &mut [WidgetPlacement], ctx: &LayoutContext<'_>, )

Position children within the allocated bounds. Read more
Source§

fn accessibility(&self, builder: &mut AccessNodeBuilder)

Declare this widget’s accessibility identity.
Source§

fn as_any(&self) -> Option<&dyn Any>

Downcast hook. Default implementation returns None; concrete widgets override with Some(self) when they want to expose their concrete type to test-level introspection or reflection. The trait already bounds on std::any::Any so concrete types satisfy the 'static requirement.
Source§

fn children(&self) -> Vec<WidgetId>

Return the child widget IDs that this widget manages.
Source§

fn clips_children(&self) -> bool

Whether this widget clips its children to its bounds.
§

fn type_name(&self) -> &'static str

Concrete type name of this widget (e.g. "teksilo_widgets::button::Button"). The default implementation resolves at the impl site via std::any::type_name::<Self>(), so calls through &dyn Widget correctly dispatch to the monomorphized fn for the concrete type — getting the concrete name through the vtable without per-impl boilerplate. Read more
§

fn cacheable_layout(&self) -> bool

Whether this widget’s layout_response may be memoized by the per-pass layout cache. Defaults to true. Read more
§

fn paint(&self, _bounds: Rect, _canvas: &mut Canvas, _ctx: &PaintContext<'_>)

Draw the widget’s visual representation.
§

fn wants_after_paint(&self) -> bool

Whether this widget wants its after_paint hook to fire each frame. Returning false (the default) saves a virtual call per widget per frame for the vast majority of widgets that don’t aggregate descendant geometry. Read more
§

fn after_paint(&self, _view: &WidgetTreeView<'_>, _ctx: &PaintContext<'_>)

Called once per frame after this widget’s subtree has finished painting. Receives a read-only view of the layout-resolved arena so a parent can read its descendants’ final bounds — e.g. TitleBar aggregates its drag region and control-button rects into a single HitRegions payload for the Windows backend’s WM_NCHITTEST. Read more
§

fn wants_post_paint(&self) -> bool

Whether this widget wants its post_paint hook to fire each frame. Returning false (the default) saves a virtual call per widget per frame for the vast majority of widgets that don’t draw a foreground over their children. Read more
§

fn post_paint( &self, _bounds: Rect, _canvas: &mut Canvas, _ctx: &PaintContext<'_>, )

Draw a foreground layer over this widget’s children. Read more
§

fn wants_descendant_redirects(&self) -> bool

Whether this widget wants the AT walker to consult its a11y_redirect_descendant hook for every descendant during AT tree emission, not just its direct arena children. Read more
§

fn culls_children(&self) -> bool

Whether this widget decides, on every layout pass, which of its children exist at all. Read more
§

fn a11y_redirect_descendant( &self, _self_id: WidgetId, _descendant: WidgetId, ) -> Option<NodeId>

Optional redirection hook for AT-tree placement of a child. Read more
§

fn accessible_title_hint(&self) -> Option<String>

Suggest an accessible title to an enclosing container that wraps this widget as content — typically a modal / dialog shell that wants to propagate the inner content’s visible title as the shell’s own accessible name. Read more
§

fn accessible_title_node(&self) -> Option<WidgetId>

The widget that paints this one’s title, when it has one. Read more
§

fn initial_focus_hint(&self) -> Option<WidgetId>

Optional hint that directs initial focus to a specific descendant when this widget is the root of a deferred-built modal surface. Read more
§

fn accessibility_proxy(&self) -> Option<WidgetId>

The descendant whose accessibility node stands for this widget. Read more
§

fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>

Mutable counterpart of as_any. Default returns None; widgets that want to expose mutable state to tests (e.g. so a test can mutate a Scene inside a SceneView post-layout) override with Some(self). Should follow the same opt-in pattern as as_any: only widgets that opt into & introspection should opt into &mut.
§

fn focus_reveal_rect(&self, _bounds: Rect) -> Option<Rect>

The rectangle (in absolute tree coordinates) that best represents this widget when the framework reveals it into an ancestor scroll area on focus gain. Returning None (the default) reveals the widget’s whole bounds — correct for most controls. Read more
§

fn hit_shape(&self, _local_point: Point, _bounds: Rect) -> bool

Whether the point lies inside this widget’s actual shape, not just its rectangular bounds. Consulted by hit-testing right after the bounds check: returning false for a point that is inside the bounding box makes the widget transparent to the click there, so it falls through to whatever sibling is painted underneath (the same machinery as a fully pass-through node, but shape-aware). Read more
§

fn accepts_child_hit(&self, _child: WidgetId, _point: Point) -> bool

Veto a hit on one of this widget’s direct children, per point. Read more
§

fn hit_outset(&self, _kind: PointerKind, _tokens: &InputTokens) -> EdgeInsets

How far outside its own bounds this widget still absorbs a press, per edge, for the pointer that is asking. Read more
§

fn hit_slop(&self, _kind: PointerKind, _tokens: &InputTokens) -> Option<HitSlop>

This widget’s own say in the miss-only slop pass, overriding the density default for its node. Read more
§

fn hit_distance(&self, local_point: Point, bounds: Rect) -> Option<f32>

How far a missed press is from this widget’s actual silhouette, in the widget’s own bounds space. Read more
§

fn target_regions(&self, _bounds: Rect) -> Vec<TargetRegion>

The interactive sub-regions this widget paints inside its own single node — a scroll bar’s thumb, a slider’s knob, a header cell’s filter affordance. Read more
§

fn preserves_children_on_rebuild(&self) -> bool

How rebuild_single_widget treats this widget’s existing children when re-running its build(). Read more
§

fn tooltip_has_content(&self) -> bool

Whether this widget, used as tooltip content, currently has anything worth showing. Read more
§

fn declare_shortcuts(&self) -> Vec<Shortcut>

Declare the rebindable keyboard shortcuts this widget exposes, without installing handlers. The framework calls this at arena insertion time (before build()) and at certain lazy boundaries (e.g. Switcher walks declarations on its not-yet-mounted Pending slots), so settings UIs and the ShortcutRegistry see the keystrokes the moment the owning container mounts — even if build() hasn’t run. Read more
§

fn take_handler_set(&mut self) -> Option<HandlerSet>

Extract attached handler set from a WidgetWithHandlers wrapper. Called during arena insertion to transfer handlers to the WidgetNode. Default: returns None (no attached handlers).

Auto Trait Implementations§

§

impl<T> !Freeze for GridView<T>

§

impl<T> !RefUnwindSafe for GridView<T>

§

impl<T> !Send for GridView<T>

§

impl<T> !Sync for GridView<T>

§

impl<T> !UnwindSafe for GridView<T>

§

impl<T> Unpin for GridView<T>

§

impl<T> UnsafeUnpin for GridView<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<W> IntoTeksiChild for W
where W: Widget + 'static,

§

fn into_pending(self) -> PendingChild

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<W> WidgetBuilder for W
where W: Widget + 'static,

§

fn on_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_double_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_triple_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_long_press( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn accept_tap_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_tap. Default is [ButtonMask::PRIMARY]. Read more
§

fn accept_double_tap_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_double_tap. Default [ButtonMask::PRIMARY]. Read more
§

fn accept_triple_tap_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_triple_tap. Default [ButtonMask::PRIMARY]. Read more
§

fn accept_long_press_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_long_press. Default [ButtonMask::PRIMARY]. Read more
§

fn on_drag( self, f: impl FnMut(DragPhase, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_swipe( self, f: impl FnMut(SwipeDirection, f32, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_pinch( self, f: impl FnMut(PinchPhase, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_focus( self, f: impl FnMut(bool, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_key( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_key_preview( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

Strict-ancestor key preview. See [HandlerSet::on_key_preview].
§

fn on_pointer_event( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_hover( self, f: impl FnMut(bool, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_scroll( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_access_action( self, f: impl FnMut(Action, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn focusable(self, focusable: bool) -> WidgetWithHandlers<Self>

§

fn tab_index(self, index: i32) -> WidgetWithHandlers<Self>

§

fn cursor(self, cursor: CursorIcon) -> WidgetWithHandlers<Self>

§

fn clips_children_on(self, clips: bool) -> WidgetWithHandlers<Self>

§

fn ime_input(self, ctx: ImeContext) -> WidgetWithHandlers<Self>

Declare this node a text-input surface, enabling the OS input method (with ctx’s purpose) while it is focused. See [crate::ime].
§

fn event_pass_through(self, pass_through: bool) -> WidgetWithHandlers<Self>

Make the widget invisible to pointer hit-testing. See [HandlerSet::event_pass_through].
§

fn gesture_dead_zone(self, dead_zone: bool) -> WidgetWithHandlers<Self>

Mark this widget’s subtree a gesture dead zone. See [HandlerSet::gesture_dead_zone].
§

fn long_press_role(self, role: LongPressRole) -> WidgetWithHandlers<Self>

Select what a hold on this widget’s subtree means. See [HandlerSet::long_press_role].
§

fn touch_action(self, action: TouchAction) -> WidgetWithHandlers<Self>

Override what a direct pointer may do to this widget’s subtree. See [HandlerSet::touch_action].
§

fn scroll_container(self, axes: PanAxes) -> WidgetWithHandlers<Self>

Declare this widget a pan surface on axes, kinetic, direct pointers only. See [HandlerSet::scroll_container].
§

fn pan_claim(self, claim: PanClaim) -> WidgetWithHandlers<Self>

Declare this widget a pan surface with an explicit [PanClaim]. See [HandlerSet::pan_claim].
§

fn overscroll_behavior( self, behavior: OverscrollBehavior, ) -> WidgetWithHandlers<Self>

Whether this widget absorbs a boundary scroll or chains it outward. See [HandlerSet::overscroll_behavior].
§

fn drag_activation(self, activation: DragActivation) -> WidgetWithHandlers<Self>

Declare when a drag on this widget may begin relative to the press that starts it. See [HandlerSet::drag_activation].
§

fn multi_contact(self, policy: MultiContact) -> WidgetWithHandlers<Self>

Declare how many simultaneous contacts this widget serves. Default [MultiContact::First] — the second finger on a single-contact control is terminated there rather than reaching an ancestor.
§

fn keyboard_capture(self, capture: bool) -> WidgetWithHandlers<Self>

Mark this widget a keyboard capture surface (terminals, game viewports): while focused, KeyDowns bypass shortcut resolution. See [HandlerSet::keyboard_capture].
§

fn hit_transparent(self, transparent: bool) -> WidgetWithHandlers<Self>

Make this widget and its whole subtree invisible to pointer hit-testing (decorative overlays). See [HandlerSet::hit_transparent].
§

fn hit_slop(self, slop: HitSlop) -> WidgetWithHandlers<Self>

Override the miss-only hit slop for this node. See [HandlerSet::hit_slop].
§

fn no_hit_slop(self) -> WidgetWithHandlers<Self>

Take this node out of both hit-widening mechanisms — no slop outset and no Widget::hit_outset. See [HandlerSet::no_hit_slop].
§

fn context_menu( self, factory: impl Fn(Point, &mut EventContext<'_>) -> Option<Box<dyn Widget>> + 'static, ) -> WidgetWithHandlers<Self>

Set a context-menu factory. See [HandlerSet::context_menu] for the full contract.
§

fn focus_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>

Bind a Signal<bool> the framework writes when a strict descendant has focus. See [HandlerSet::focus_within].
§

fn hover_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>

Bind a Signal<bool> the framework writes when a strict descendant is hovered. See [HandlerSet::hover_within].
§

fn visible_when(self, state: impl Into<Prop<bool>>) -> WidgetWithHandlers<Self>

Bind this node’s visibility (bool / Signal<bool> / Prop<bool>) as a builder property, so teksu! can write visible_when: sig. Equivalent to ctx.visible_when(id, ..). See [HandlerSet::visible_when].
§

fn on_drag_hover( self, f: impl FnMut(&DragPayload, Point, &mut EventContext<'_>) -> DropFeedback + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_drag_leave( self, f: impl FnMut(&mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_drag_tick( self, f: impl FnMut(Point, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_pointer_cancel( self, f: impl FnMut(&PointerInfo, CancelReason, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

Attach a pointer-cancel handler. See [HandlerSet::on_pointer_cancel].
§

fn on_drop( self, f: impl FnMut(DragPayload, Point, &mut EventContext<'_>) -> bool + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_drag_ended( self, f: impl FnMut(DropOutcome, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

Set the drag-ended handler on a drag source. See [HandlerSet::on_drag_ended].
§

fn access_label( self, label: impl Into<Prop<String>>, ) -> WidgetWithHandlers<Self>

§

fn access_description( self, description: impl Into<Prop<String>>, ) -> WidgetWithHandlers<Self>

§

fn access_hint(self, hint: impl Into<Prop<String>>) -> WidgetWithHandlers<Self>

§

fn access_value( self, value: impl Into<Prop<String>>, ) -> WidgetWithHandlers<Self>

§

fn access_role(self, role: Role) -> WidgetWithHandlers<Self>

§

fn access_hidden( self, hidden: impl Into<Prop<bool>>, ) -> WidgetWithHandlers<Self>

§

fn access_disabled(self, disabled: bool) -> WidgetWithHandlers<Self>

§

fn access_identifier(self, id: impl Into<String>) -> WidgetWithHandlers<Self>

§

fn access_controls(self, target: WidgetId) -> WidgetWithHandlers<Self>

§

fn access_described_by(self, target: WidgetId) -> WidgetWithHandlers<Self>

§

fn access_labelled_by(self, target: WidgetId) -> WidgetWithHandlers<Self>

§

fn access_live(self, mode: Live) -> WidgetWithHandlers<Self>

§

fn access_current(self, current: AriaCurrent) -> WidgetWithHandlers<Self>

§

fn access_shortcut_literal( self, shortcut: impl Into<String>, ) -> WidgetWithHandlers<Self>

§

fn access_shortcut_id(self, id: impl Into<String>) -> WidgetWithHandlers<Self>

§

fn access_has_popup(self, kind: HasPopup) -> WidgetWithHandlers<Self>

§

fn access_orientation( self, orientation: Orientation, ) -> WidgetWithHandlers<Self>

§

fn access_exclude_subtree(self) -> WidgetWithHandlers<Self>

§

fn access_merge_subtree(self) -> WidgetWithHandlers<Self>

§

fn access_subtree(self, mode: AccessSubtreeMode) -> WidgetWithHandlers<Self>

§

fn access_numeric_value(self, value: f64) -> WidgetWithHandlers<Self>

§

fn access_numeric_range(self, min: f64, max: f64) -> WidgetWithHandlers<Self>

§

fn access_numeric_step(self, step: f64) -> WidgetWithHandlers<Self>

§

fn access_action<F>( self, action: Action, handler: F, ) -> WidgetWithHandlers<Self>
where F: FnMut(&mut EventContext<'_>) + 'static,

§

fn access_remove_action(self, action: Action) -> WidgetWithHandlers<Self>

§

fn access_custom_action<F>( self, label: impl Into<Prop<String>>, handler: F, ) -> WidgetWithHandlers<Self>
where F: FnMut(&mut EventContext<'_>) + 'static,

§

fn access_customize<F>(self, f: F) -> WidgetWithHandlers<Self>
where F: Fn(&mut AccessNodeBuilder) + 'static,

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more