pub struct LayoutContext { /* private fields */ }Expand description
A per-surface layout tree: the taffy engine plus the node→rect-signal registry. The layout tree is
a per-surface world so nodes can be created and laid out from anywhere — including reactive effects
(reactive lists) that fire from an effect body. Under M3 several surfaces share one UI thread, so the
runner activates each surface’s LayoutContext around its build/event/frame; app code just calls
the free functions, which operate on whichever surface is currently active.
Implementations§
Source§impl LayoutContext
impl LayoutContext
Sourcepub fn enter(&self) -> LayoutGuard
pub fn enter(&self) -> LayoutGuard
Makes this instance the live one until the returned guard drops, which restores the previously-active instance. Nest by keeping guards in scope; they restore in reverse order.
Sourcepub fn enter_ambient() -> LayoutGuard
pub fn enter_ambient() -> LayoutGuard
Makes the ambient instance — the one that exists before any surface is built, and the only world a single-surface app ever has — live until the returned guard drops.
What the reactive flush needs for an effect owned by SurfaceHandle::NONE:
it was registered outside any surface, so its world is this one, and running it against
whichever surface happened to be entered when the signal fired would resolve its layout,
overlays and focus in somebody else’s. Reachable as soon as one app has both — a window tree
that never built a surface and a second tree that did.