pub struct ShieldView<State>where
State: 'static,{ /* private fields */ }Expand description
Platform-view embedding (platform-views feature): reserve
layout space for a native view (a map, a video player, …) composited
alongside the frust surface. platform_view takes the
"dev.frust.<Factory>"-style native factory name registered on each
platform and returns a builder (PlatformViewView) over the
params/size contract — flat-re-exported from frust-widgets so app code
never names that crate directly.
§Paint contract (Mode B)
Under Mode B compositing the frust surface itself is translucent, so any region this slot’s parent doesn’t paint over is a window straight through to the native view (or the OS background) behind it — this is the mechanism Mode B relies on, not a bug. Size/position a slot deliberately, and don’t rely on an unpainted sibling region staying opaque.
Mode B is selected by the generated host’s FRUST_TRANSLUCENT_SURFACE
(Android)/translucentSurface (iOS) build-time constant — not from
Rust: that constant drives, in one host-glue branch, the native window’s
pixel format (PixelFormat.TRANSLUCENT/CAMetalLayer.isOpaque = false),
the native-sibling z-order/subview arrangement, and the
nativeSetSurfaceMode/frust_set_surface_mode call together
(flipping only some of these is a host-template defect). There is
no app-Rust opt-in call; the generated project’s template is
the sole route into Mode B.
use frust::{AnyView, Column, Component, any, platform_view, text};
#[derive(Default)]
struct MapDemo;
impl Component for MapDemo {
type State = ();
fn init(&self) -> Self::State {}
fn build(&self, _state: &mut Self::State) -> AnyView<Self::State> {
any(Column(vec![
any(text("map below")),
any(platform_view("dev.frust.MapFactory")
.params_json(r#"{"style":"dark"}"#)
.size(320.0, 240.0)),
]))
}
}
frust::app!(MapDemo);§Z-shields (shield)
A slot marked .interactive() forwards a touch-DOWN inside its rect to the
native view, including one that landed on frust chrome painted over it (the
OS-side hit test knows nothing about the frust scene). Wrap that chrome in
shield and it keeps winning input: the wrapper reports the rect it
painted every frame, and the shell hands the overlapping ones to the host
with the slot’s placement.
A declarative z-shield wrapper. See shield and the module docs.
Trait Implementations§
Source§impl<State> View<State> for ShieldView<State>where
State: 'static,
impl<State> View<State> for ShieldView<State>where
State: 'static,
Source§type Element = ShieldWidget
type Element = ShieldWidget
Source§fn build(&self, ctx: &mut BuildCtx<'_>) -> ShieldWidget
fn build(&self, ctx: &mut BuildCtx<'_>) -> ShieldWidget
Source§fn rebuild(
&self,
prev: &ShieldView<State>,
element: &mut ShieldWidget,
ctx: &mut BuildCtx<'_>,
) -> ChangeFlags
fn rebuild( &self, prev: &ShieldView<State>, element: &mut ShieldWidget, 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<State> !RefUnwindSafe for ShieldView<State>
impl<State> !Send for ShieldView<State>
impl<State> !Sync for ShieldView<State>
impl<State> !UnwindSafe for ShieldView<State>
impl<State> Freeze for ShieldView<State>
impl<State> Unpin for ShieldView<State>
impl<State> UnsafeUnpin for ShieldView<State>where
AnyView<State>: UnsafeUnpin,
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> 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.