pub struct ContainerTransform {
pub source: Rect,
pub target: Rect,
pub fade: ContainerFade,
}Expand description
Material 3 “container transform” (Flutter OpenContainer
semantics): the incoming content morphs from a captured source rect to a
target rect while opacity fades the source content out and the incoming
content in.
§Pattern-local rect capture (no HeroFrames coupling)
Unlike nav::hero, this pattern carries its own source/target rects as
data (captured from layout by the caller) — it never reaches into the
navigator’s HeroFrames registry, so it composes inside a plain
super::switcher::PatternSwitcher with no core/navigator plumbing. A
zero-area target is resolved to the full container at resolve time (the
common “incoming child fills the container” case).
§v1 morph gap: uniform scale, not a true rect-to-rect affine
PatternLayer composites a uniform scale about the child’s paint
centre plus an offset — it cannot express the non-uniform (independent
width/height) scale a full rect-to-rect affine needs. So this pattern
approximates the morph as a width-based uniform scale placed at the
interpolated rect’s centre: exact when source/target share an aspect
ratio, an approximation otherwise. A true non-uniform morph would need a
richer layer type (a PatternLayer change rippling into the switcher’s
paint_staged_child), deferred rather than hacked into the v1 contract.
Fields§
§source: RectThe source container rect the morph grows from (container-local logical px).
target: RectThe target rect the morph settles into; a zero-area rect means “the full
container” (resolved from the size passed to resolve).
fade: ContainerFadeOpacity staging variant.
Implementations§
Source§impl ContainerTransform
impl ContainerTransform
Sourcepub const fn new(source: Rect, target: Rect) -> ContainerTransform
pub const fn new(source: Rect, target: Rect) -> ContainerTransform
A fade-through container transform morphing source → target.
Sourcepub const fn from_source(source: Rect) -> ContainerTransform
pub const fn from_source(source: Rect) -> ContainerTransform
A container transform whose incoming child fills the container: target
is left zero-area and resolved to the full container size at paint time.
Sourcepub const fn with_fade(self, fade: ContainerFade) -> ContainerTransform
pub const fn with_fade(self, fade: ContainerFade) -> ContainerTransform
Select the opacity staging ContainerFade variant.
Sourcepub fn morph_rect(&self, p: f64, reverse: bool) -> Rect
pub fn morph_rect(&self, p: f64, reverse: bool) -> Rect
The interpolated bounds at raw progress p (spatial-eased via
[CONTAINER_TRANSFORM_MORPH_CURVE]), morphing source → target forward
and target → source when reverse. target is used as configured
here — see resolve for the zero-area
full-container fallback.
Trait Implementations§
Source§impl Clone for ContainerTransform
impl Clone for ContainerTransform
Source§fn clone(&self) -> ContainerTransform
fn clone(&self) -> ContainerTransform
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 ContainerTransform
Source§impl Debug for ContainerTransform
impl Debug for ContainerTransform
Source§impl PartialEq for ContainerTransform
impl PartialEq for ContainerTransform
impl StructuralPartialEq for ContainerTransform
Source§impl TransitionPattern for ContainerTransform
impl TransitionPattern for ContainerTransform
Source§fn resolve(
&self,
p: f64,
reverse: bool,
size: Size,
) -> (PatternLayer, PatternLayer)
fn resolve( &self, p: f64, reverse: bool, size: Size, ) -> (PatternLayer, PatternLayer)
(incoming, exiting) layers at transition progress p (raw —
may overshoot for a spring), reverse flipping any directional motion,
at container size.Auto Trait Implementations§
impl Freeze for ContainerTransform
impl RefUnwindSafe for ContainerTransform
impl Send for ContainerTransform
impl Sync for ContainerTransform
impl Unpin for ContainerTransform
impl UnsafeUnpin for ContainerTransform
impl UnwindSafe for ContainerTransform
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.