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::new_click_through — non-modal: clicks on the transparent fill fall through to the tree; only clicks a child handles are consumed. For a toast/tooltip layer that must not eat background clicks.
  • Overlay::anchored — positions the content next to a trigger widget (dropdowns/menus/tooltips): the content is translated to the trigger’s rect and only that panel blocks, so clicks elsewhere fall through.

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 new_click_through( layout_style: LayoutStyle, children: Vec<Box<dyn LayoutItem>>, ) -> Result<Self, LayoutError>

A non-modal portal: clicks on the transparent fill fall through to the content behind; only clicks a child actually handles are consumed. Use for a toast/tooltip layer that must not block the page.

Source

pub fn anchored( 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). The content sizes to its intrinsic panel and is translated to the trigger’s rect per placement; only that panel blocks (the barrier tracks the trigger), so clicks elsewhere fall through.

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

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