pub struct WindowMetrics {
pub size: Size,
pub scale: f64,
pub orientation: Orientation,
pub insets: WindowInsets,
}Expand description
The window-shape value recovered via
use_context::<WindowMetrics>() inside Component::build — lifted
alongside WindowInsets for the same reason: a widget or component
laying itself out around window size/scale/orientation cannot otherwise
name the value. See WindowMetrics’s own doc for the plain-value
delivery contract, the alongside-not-superseding relationship with
WindowInsets, and the derived-orientation/rebuild-cost notes.
The window’s shape and platform-occlusion state, delivered to app code as a
plain provide_context-carried
value — logical size, device-pixel scale, a
derived orientation, and the current
WindowInsets.
§Plain value, not a signal
WindowMetrics is delivered exactly like Theme and WindowInsets
already are: a shell calls provide_context with a freshly-built value on
change, and app code recovers it with use_context::<WindowMetrics>()
inside Component::build. It is not an RwSignal — only deep_link
and back are true signals in frust-reactive; every other host-signal
carrier (theme, insets, and now this) is a re-provided plain value.
§Alongside WindowInsets, not superseding it
WindowInsets already reaches Component::build on Android and iOS today
(each shell’s push_insets calls provide_context(insets) independently
of anything here — desktop has no such arm for either value yet).
WindowMetrics is additive: a shell that starts providing it keeps
providing the standalone WindowInsets context too, so an existing
use_context::<WindowInsets>() call site never breaks. insets on this
type is a copy of that same value for convenience (a widget laying
itself out around window shape wants size/scale/orientation/insets
together), not a replacement for the independent context.
§Orientation is derived, not platform-sourced
No platform callback in either mobile shell carries an orientation enum —
Android’s nativeOnSurfaceChanged and iOS’s frust_resize each hand the
shell only a (width, height, scale) triple. Orientation is therefore
always computed from size via Orientation::from_size
(portrait when height >= width, so an exact square reads as portrait);
it never tracks a device orientation-lock setting or a platform rotation
event directly.
§Context is not reactive
provide_context is a plain insert into the owner’s context map — it
notifies nothing — and use_context inside Component::build (or the
root build closure) creates no subscription, so re-providing a changed
WindowMetrics does not itself mark anything dirty or wake a frame. A new
value becomes visible only on the next rebuild, which the resize or inset
change that produced it already drives; do not write a shell that assumes
a provide_context write triggers one. A shell wiring this up (see
docs/SHELLS_ARCHITECTURE.md) must still re-provide WindowMetrics only
on an actual change (mirroring RenderRoot::set_insets’s
PartialEq-guarded no-op) — the reason is cost at the FFI boundary (a
lock write plus an allocation every frame), not a rebuild storm.
Separately, there is no per-component rebuild skipping in this framework
(a component always re-runs build on any rebuild it does take part in),
which is affordable only because builds are cheap by construction.
Fields§
§size: SizeThe window’s logical (density-independent) size.
scale: f64The device-pixel scale factor (logical → physical px multiplier).
orientation: OrientationThe orientation derived from size — see the type’s doc for why this
is computed, never platform-sourced.
insets: WindowInsetsA copy of the window’s current insets — see the type’s doc for why
this does not replace the standalone WindowInsets context.
Implementations§
Source§impl WindowMetrics
impl WindowMetrics
Sourcepub fn new(size: Size, scale: f64, insets: WindowInsets) -> WindowMetrics
pub fn new(size: Size, scale: f64, insets: WindowInsets) -> WindowMetrics
Construct a WindowMetrics from its transported fields, deriving
orientation from size rather than accepting it
as an input — see the type’s doc for why orientation is never
platform-sourced.
Trait Implementations§
Source§impl Clone for WindowMetrics
impl Clone for WindowMetrics
Source§fn clone(&self) -> WindowMetrics
fn clone(&self) -> WindowMetrics
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for WindowMetrics
Source§impl Debug for WindowMetrics
impl Debug for WindowMetrics
Source§impl PartialEq for WindowMetrics
impl PartialEq for WindowMetrics
impl StructuralPartialEq for WindowMetrics
Auto Trait Implementations§
impl Freeze for WindowMetrics
impl RefUnwindSafe for WindowMetrics
impl Send for WindowMetrics
impl Sync for WindowMetrics
impl Unpin for WindowMetrics
impl UnsafeUnpin for WindowMetrics
impl UnwindSafe for WindowMetrics
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.