pub struct BuildCtx<'a> { /* private fields */ }Expand description
Context threaded through View::build / View::rebuild: allocates unique
WidgetIds from the render root’s counter and carries the effective focus
chain (BuildCtx::has_focus) and element-replaced signal
(BuildCtx::mark_element_replaced).
Implementations§
Source§impl<'a> BuildCtx<'a>
impl<'a> BuildCtx<'a>
Sourcepub fn new(next_id: &'a mut u64) -> Self
pub fn new(next_id: &'a mut u64) -> Self
Create a context borrowing the render root’s id counter.
The focus chain seeds true (“unknown, assume live”): over-releasing costs
one tap, while under-releasing strands the shell’s IME surface over a dead
widget. Seams that know the real value set it with BuildCtx::set_has_focus.
Sourcepub fn with_shortcut_hints(self, hints: Rc<[ShortcutHint]>) -> Self
pub fn with_shortcut_hints(self, hints: Rc<[ShortcutHint]>) -> Self
Hand the context its root’s last paint snapshot (BuildCtx::shortcut_hints).
Sourcepub fn has_focus(&self) -> bool
pub fn has_focus(&self) -> bool
Whether the recorded focus path is live from the root to the node being
built/rebuilt/torn down: the rebuild-pass mirror of
PaintCtx::has_focus.
A blur clears the link at the nearest common ancestor only, so a focused
ChildPod flag below it goes stale harmlessly. A
reconciler raises mark_focus_orphaned
only when ctx.has_focus() && pod.is_focused(): the session is actually live.
Sourcepub fn shortcut_hints(&self) -> Rc<[ShortcutHint]>
pub fn shortcut_hints(&self) -> Rc<[ShortcutHint]>
The previous paint’s shortcut declarations in paint order, unreachable ones
included; label each chord with Chord::display. They lag this build by a frame, and are
empty on a context its root did not seed.
Sourcepub fn set_has_focus(&mut self, has_focus: bool)
pub fn set_has_focus(&mut self, has_focus: bool)
Seed the focus chain for a seam that starts one (RenderRoot’s view diff, or a
component carrying its outer chain across an inner BuildCtx). A container
descending into a pod uses BuildCtx::with_focus_link, which can only narrow.
Sourcepub fn with_focus_link<R>(
&mut self,
link_focused: bool,
f: impl FnOnce(&mut Self) -> R,
) -> R
pub fn with_focus_link<R>( &mut self, link_focused: bool, f: impl FnOnce(&mut Self) -> R, ) -> R
Run f with the focus chain extended by one link (link_focused is the pod’s
is_focused flag), restoring it afterwards: the closure sees
self.has_focus() && link_focused, so no descent can widen the chain.
Sourcepub fn mark_element_replaced(&mut self)
pub fn mark_element_replaced(&mut self)
Report that this view’s rebuild replaced its element’s widget while keeping
the element type (an enum view switching arms, e.g. Either).
A reconciler detects an AnyView type swap by type id and drops the child
pod’s capture and focus links; an enum keeps one static type, so it raises this
signal instead. The nearest enclosing
track_element_replaced scope consumes it
(a pod inside the swapped subtree consumes its own); with no scope it is inert
or reaches the next one up: an over-release, never an under-release.
Sourcepub fn track_element_replaced<R>(
&mut self,
f: impl FnOnce(&mut Self) -> R,
) -> (R, bool)
pub fn track_element_replaced<R>( &mut self, f: impl FnOnce(&mut Self) -> R, ) -> (R, bool)
Run f as a tracking scope for mark_element_replaced,
returning f’s result and whether anything inside raised the signal. The
caller’s pending value is saved and restored.