Skip to main content

ComponentWidget

Struct ComponentWidget 

Source
pub struct ComponentWidget<C: Component> { /* private fields */ }
Expand description

The retained widget behind a ComponentView.

Owns the component’s local State, the previous child AnyView (diffed each rebuild), the child element wrapped in a ChildPod, the component’s reactive Owner, and a component-local BuildCtx id counter.

The child element is stored double-boxed inside the pod (ChildPod::new( Box::new(element)), where element: Box<dyn Widget> is the AnyView’s element): the extra box lets a rebuild recover the child as &mut Box<dyn Widget>, the exact type AnyView::rebuild needs to swap the widget on a concrete-type change. This mirrors frust-widgets’ build_child/rebuild_child pod convention.

§Under the hotpatch feature

The struct is repr(C), starts with the [SeamWitness] the creating image wrote, and holds the state boxed, so every field sits at the same offset in every image whatever C::State looks like there. rebuild, teardown and Drop check the witness first; on a mismatch nothing C-generic touches the state, and Drop leaks the state box (mem::forget) rather than let another image’s layout drop or free it, while still disposing the owner.

Trait Implementations§

Source§

impl<C: Component> Drop for ComponentWidget<C>

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<C: Component> SliverWidget for ComponentWidget<C>

Source§

fn layout_sliver( &mut self, ctx: &mut LayoutCtx<'_>, sc: &SliverConstraints, ) -> SliverGeometry

Pass-through, like Widget::layout: the child sits at the component’s origin and receives sc unchanged, under the child pod’s layout skip.

Source§

impl<C: Component> Widget for ComponentWidget<C>

Source§

fn as_sliver(&mut self) -> Option<&mut dyn SliverWidget>

A component is a sliver exactly when its child is: the boundary is as transparent to the sliver protocol as it is to box layout. The sliver face is the component itself rather than the child widget, so the layout runs through the child pod and leaves it sized and recorded for this component’s own paint, hit test and semantics.

Source§

fn layout(&mut self, ctx: &mut LayoutCtx<'_>, bc: &BoxConstraints) -> Size

Choose a size within bc and return it. The chosen size must satisfy bc (callers may additionally clamp via BoxConstraints::constrain). Read more
Source§

fn paint(&mut self, ctx: &mut PaintCtx<'_>, scene: &mut dyn PaintScene)

Emit draw commands for this widget into scene. Read more
Source§

fn semantics(&self, ctx: &mut SemanticsCtx)

Contribute this widget’s accessibility node(s) into ctx. Read more
Source§

fn visit_children(&self, visitor: &mut dyn FnMut(&ChildPod))

Visit this widget’s owned ChildPods, in declaration (paint) order — the read-only seam that makes the retained hierarchy enumerable. Read more
Source§

fn event(&mut self, ctx: &mut EventCtx<'_>, event: &InputEvent) -> EventResult

Handle an input event, optionally mutating application state through ctx and reporting whether it was consumed. Read more
Source§

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

This widget’s concrete type name, for read-only tooling. Read more

Auto Trait Implementations§

§

impl<C> !Freeze for ComponentWidget<C>

§

impl<C> !RefUnwindSafe for ComponentWidget<C>

§

impl<C> !Send for ComponentWidget<C>

§

impl<C> !Sync for ComponentWidget<C>

§

impl<C> !UnwindSafe for ComponentWidget<C>

§

impl<C> Unpin for ComponentWidget<C>
where <C as Component>::State: Unpin, AnyView<<C as Component>::State>: Unpin,

§

impl<C> UnsafeUnpin for ComponentWidget<C>

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, 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> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.