Skip to main content

Overlay

Struct Overlay 

Source
pub struct Overlay { /* private fields */ }
Expand description

A portal layer: its content is laid out out-of-flow, filling the viewport, and hoisted to the top at compose time — drawn above everything and free of any ancestor clip/transform. A base primitive: unstyled; wrap content in a box for a scrim/panel, and position it with normal flex (align/justify).

The content is a separate layout node attached to the layout root (the overlay host), not to the widget’s DOM parent — so a portal declared deep in the tree (e.g. inside a reactive if) still covers the whole window instead of collapsing to its parent’s box. The widget hands its DOM parent only a zero-size placeholder, so it never affects sibling layout. If no host has been laid out yet (a portal present at the very first frame), it falls back to laying the content out in place.

Positioned pointer events reach the content with priority via a thread-local overlay registry (see ui_tree::overlay_dispatch): a click on the overlay is routed here before the main tree walk and does not fall through to the content behind it, so a scrim that fills the viewport reads as a modal.

Variants (all portal the same way, they differ in how they route clicks and where the content sits):

  • Overlay::new — modal: blocks every click inside its content rect (a full-viewport scrim).
  • Overlay::anchored_click_through — positions the content next to a trigger widget (dropdowns, menus, tooltips) and takes no pointer, so clicks anywhere fall through to the tree behind.

Implementations§

Source§

impl Overlay

Source

pub fn new( layout_style: LayoutStyle, children: Vec<Box<dyn LayoutItem>>, ) -> Result<Self, LayoutError>

A modal portal: the content fills the viewport and blocks every click behind it.

Source

pub fn toggleable( layout_style: LayoutStyle, children: Vec<Box<dyn LayoutItem>>, visible: impl Fn() -> bool + 'static, ) -> Result<Self, LayoutError>

A modal portal that is kept mounted and shown/hidden by visible (read each frame). Unlike disposing and rebuilding the overlay on every open, this preserves its content across close/reopen — needed for a dialog whose body arrives as a pre-built slot (which cannot be rebuilt once consumed). Hidden, it draws nothing and blocks nothing.

Source

pub fn anchored_click_through( layout_style: LayoutStyle, children: Vec<Box<dyn LayoutItem>>, trigger: RwSignal<Rect>, placement: Placement, ) -> Result<Self, LayoutError>

A portal whose content is positioned next to trigger (a dropdown/menu/tooltip popping up by its button) and takes no pointer: a tooltip bubble, a hint, anything that appears because the pointer is near it and would be dismissed by touching it. The content sizes to its intrinsic panel and is translated to the trigger’s rect per placement.

Source§

impl Overlay

Source

pub fn content_node(&self) -> NodeId

The node its content actually hangs from, which is the portaled one when it has a host and the in-tree node before that. What a caller asks for to reason about the content by ancestry — autofocusing what is inside it, say — since layout_node is a 0×0 placeholder once portaled.

Trait Implementations§

Source§

impl Component for Overlay

Source§

fn view(&self) -> RenderNode

Source§

fn on_event(&mut self, event: &Event) -> EventResult

Source§

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

Human-readable widget type name for the devtools tree inspector.
Source§

impl Drop for Overlay

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl LayoutItem for Overlay

Source§

fn pointer_opaque(&self) -> bool

An overlay is reached through the registry, before the tree walk, so its in-tree node must not hit-test at all. Normally it is a 0×0 placeholder and the question never comes up; on the first frame, before a host exists, the content is laid out in place and would otherwise cover its own siblings.

Source§

fn layout_node(&self) -> NodeId

Auto Trait Implementations§

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
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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, 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.
Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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