pub enum ResolvedSurfaceMode {
Unknown,
Opaque,
Translucent,
RefusedTranslucent,
}Expand description
What the platform actually gave us, as opposed to what the host
declared (SurfaceMode) — see the module docs’ The RESOLVED slot.
Read via resolved_surface_mode (re-exported by the frust facade);
published only by the two mobile shells, once per frame, from the same
value that drives RenderRoot::set_surface_translucent.
Variants§
Unknown
No shell has published a resolution yet: no surface exists, or the
running shell doesn’t participate (the desktop preview shell never
publishes — it has no Mode B host seam). Not a synonym for
Opaque: app code that must distinguish “opaque” from “don’t know yet”
(e.g. deferring a fallback decision to the next frame) can.
Opaque
The live surface came up opaque, and that is what the host asked for — the ordinary Mode A contract every pre-platform-views app runs under.
Translucent
The live surface came up translucent: frust clears to a transparent
base and platform_view punches its slot rects (Mode B).
RefusedTranslucent
The refusal (translucencyRefused): the host declared Mode B, and
the platform resolved the surface opaque anyway — no matching
CompositeAlphaMode (the engine’s premultiplied output has no other
refusal case; see docs/NATIVE_WIDGETS_ARCHITECTURE.md’s Mode-B
paragraph).
frust’s own paint side degrades correctly (opaque clear, no hole punch), but the host’s native-sibling z-order was fixed at build time: a sibling arranged behind the now-opaque surface is invisible and untappable. That is what this variant exists to tell app/plugin code — so it can render its own fallback content instead of a dead rect.
Implementations§
Source§impl ResolvedSurfaceMode
impl ResolvedSurfaceMode
Sourcepub const fn resolve(declared: SurfaceMode, resolved_translucent: bool) -> Self
pub const fn resolve(declared: SurfaceMode, resolved_translucent: bool) -> Self
The pure mapping publish_resolved_surface_mode applies, split out so
it is testable without touching the process-global slots: a resolved
translucent surface is Translucent; a resolved
opaque one is RefusedTranslucent when the
host declared translucency and Opaque when it didn’t.
Never returns Unknown — that variant means “nobody
published”, which is the slot’s initial state, not a resolution.
Sourcepub const fn translucency_refused(self) -> bool
pub const fn translucency_refused(self) -> bool
true only for RefusedTranslucent — the
one-liner a native-widget fallback branches on
(if frust::resolved_surface_mode().translucency_refused() { ... }).
Sourcepub const fn is_translucent(self) -> bool
pub const fn is_translucent(self) -> bool
true only for Translucent, i.e. the frames
being painted right now really do follow the Mode B contract. Both
refusal and plain opacity answer false; so does
Unknown, since no surface has reported in.
Trait Implementations§
Source§impl Clone for ResolvedSurfaceMode
impl Clone for ResolvedSurfaceMode
impl Copy for ResolvedSurfaceMode
Source§impl Debug for ResolvedSurfaceMode
impl Debug for ResolvedSurfaceMode
Source§impl Default for ResolvedSurfaceMode
impl Default for ResolvedSurfaceMode
impl Eq for ResolvedSurfaceMode
Source§impl PartialEq for ResolvedSurfaceMode
impl PartialEq for ResolvedSurfaceMode
impl StructuralPartialEq for ResolvedSurfaceMode
Auto Trait Implementations§
impl Freeze for ResolvedSurfaceMode
impl RefUnwindSafe for ResolvedSurfaceMode
impl Send for ResolvedSurfaceMode
impl Sync for ResolvedSurfaceMode
impl Unpin for ResolvedSurfaceMode
impl UnsafeUnpin for ResolvedSurfaceMode
impl UnwindSafe for ResolvedSurfaceMode
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<T> Brush for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.