A per-surface force-tick signal, subscribed by every segment on that surface. Bumped after each event
so segments re-run even when their view reads signals the effect cannot auto-track — notably the
binary-side root segment under hot reload, whose view reads signals created in the app dylib
(cross-boundary tracking is unreliable, so the force-tick makes it re-read current values, e.g. the
real viewport). Per-surface so one surface’s event does not force-render the others; a global change
(theme) re-renders all surfaces via its own shared signal, not this tick.
A per-surface overlay registry: the modals/toasts/tooltips registered for priority pointer routing
on this surface. The runner activates each surface’s OverlayContext around its build/event/frame.
A node emitted by Segment::walk: one mounted component, with its pre-order id, widget name,
nesting depth, and the bounding rect of its own draw commands unioned with all descendants’.
Top-level holder for a segment tree (analog of ComponentList): exposes the composed commands.
Change detection uses per-segment dirty flags (shared across the hot-reload boundary) rather than
a thread-local generation, which would be duplicated per side.
Imperative-state components re-render only when on_event returns EventResult::Handled; reactive-state components re-render automatically on signal change.
Routes a positioned pointer event to the overlay layer with priority over the main tree. Returns
Handled when an overlay consumed the event (the caller then skips the tree walk, blocking content
behind the overlay) and Ignored when it should fall through to the tree (no overlays, or the point
is outside every overlay and no gesture is captured). Non-pointer events always return Ignored so
keyboard and CursorLeft keep broadcasting through the tree.
Registers an overlay for priority pointer routing; returns an id to pass to unregister_overlay on
drop. Newly registered overlays sit on top of earlier ones.
Removes an overlay from the registry (call from the widget’s Drop). Also releases the pointer capture
if this overlay held it, so a modal dismissed mid-gesture does not leave a dangling capture.