pub struct NativeComponentView<C: NativeComponent> { /* private fields */ }Expand description
One mounted NativeComponent — build it with native_component.
Implementations§
Source§impl<C: NativeComponent> NativeComponentView<C>
impl<C: NativeComponent> NativeComponentView<C>
Sourcepub fn size(self, width: f64, height: f64) -> Self
pub fn size(self, width: f64, height: f64) -> Self
Explicit slot size — see crate::api::builders’ resolve_size doc for
the no-call fallback (fill the parent; there is no measure step in v1,
and a native subtree’s own content size is invisible to frust by
design).
Sourcepub fn interactive(self) -> Self
pub fn interactive(self) -> Self
Mark the slot interactive, so the host routes touches to the native view (and the differ collects the frust chrome overlapping it as input shields). Off by default: a component the user never touches wants neither.
A platform_view slot never receives Widget::event
(docs/CODE_STANDARDS.md’s Platform-View Conventions) — the platform
owns this input end to end. It reaches Rust only through a listener the
component attached (ComponentCtx::attach_listener), as
NativeComponent::on_event and then Self::on_event — never
EventCtx. A touch on a view the component attached nothing to still
behaves natively (a button highlights) and reports nothing.
Sourcepub fn on_event(
self,
handler: impl Fn(NativeEvent) + Send + Sync + 'static,
) -> Self
pub fn on_event( self, handler: impl Fn(NativeEvent) + Send + Sync + 'static, ) -> Self
Fires on the platform main thread with every NativeEvent the
component’s NativeComponent::on_event answers — the builders’
events-as-signals idiom (write an RwSignal from inside for the
one-frame wake; the module doc’s Events).
Nothing fires unless the component attached a listener for the event’s
family, and the event is whatever the component answered (by default,
the event its listener reported). Send + Sync for the same reason the
builders’ handlers carry it: the runtime’s callback table is typed that
way, though every call arrives on the main thread.
Sourcepub fn semantics_label(self, label: impl Into<String>) -> Self
pub fn semantics_label(self, label: impl Into<String>) -> Self
The slot’s frust-side accessibility label. A native subtree already gets the platform’s own a11y traversal for free (the platform owns it); this labels the slot for frust’s semantics pass, which publishes nothing for an unlabelled one.
Trait Implementations§
Source§impl<C: NativeComponent> Clone for NativeComponentView<C>
Hand-written (rather than derived) so the builder is Clone whatever C
is: #[derive(Clone)] would demand C: Clone + C::Props: Clone, and
only the second is a trait bound this crate can rely on.
impl<C: NativeComponent> Clone for NativeComponentView<C>
Hand-written (rather than derived) so the builder is Clone whatever C
is: #[derive(Clone)] would demand C: Clone + C::Props: Clone, and
only the second is a trait bound this crate can rely on.
Source§impl<C: NativeComponent> Component for NativeComponentView<C>
impl<C: NativeComponent> Component for NativeComponentView<C>
Source§impl<C: NativeComponent, Outer: 'static> View<Outer> for NativeComponentView<C>
View<Outer> for every Outer, by delegating to frust_core::component
— the generic counterpart of crate::api::builders’ impl_native_view!
macro, hand-written here because that macro takes a concrete type and this
one carries a parameter. Same contract, same rationale: each call clones
self/prev into a throwaway ComponentView (cheap — an Rc bump plus
the props), and it is correct because ComponentView::rebuild never reads
its prev argument, always re-running Component::build against the
retained State.
impl<C: NativeComponent, Outer: 'static> View<Outer> for NativeComponentView<C>
View<Outer> for every Outer, by delegating to frust_core::component
— the generic counterpart of crate::api::builders’ impl_native_view!
macro, hand-written here because that macro takes a concrete type and this
one carries a parameter. Same contract, same rationale: each call clones
self/prev into a throwaway ComponentView (cheap — an Rc bump plus
the props), and it is correct because ComponentView::rebuild never reads
its prev argument, always re-running Component::build against the
retained State.
Source§type Element = ComponentWidget<NativeComponentView<C>>
type Element = ComponentWidget<NativeComponentView<C>>
Source§fn build(&self, ctx: &mut BuildCtx<'_>) -> Self::Element
fn build(&self, ctx: &mut BuildCtx<'_>) -> Self::Element
Source§fn rebuild(
&self,
prev: &Self,
element: &mut Self::Element,
ctx: &mut BuildCtx<'_>,
) -> ChangeFlags
fn rebuild( &self, prev: &Self, element: &mut Self::Element, ctx: &mut BuildCtx<'_>, ) -> ChangeFlags
prev (the previous view of the same type) against the live
element, mutating it in place and reporting what changed.Auto Trait Implementations§
impl<C> !RefUnwindSafe for NativeComponentView<C>
impl<C> !Send for NativeComponentView<C>
impl<C> !Sync for NativeComponentView<C>
impl<C> !UnwindSafe for NativeComponentView<C>
impl<C> Freeze for NativeComponentView<C>
impl<C> Unpin for NativeComponentView<C>
impl<C> UnsafeUnpin for NativeComponentView<C>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.