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) -> Self
pub const fn new(source: Rect, target: Rect) -> Self
A fade-through container transform morphing source → target.
Sourcepub const fn from_source(source: Rect) -> Self
pub const fn from_source(source: Rect) -> Self
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) -> Self
pub const fn with_fade(self, fade: ContainerFade) -> Self
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
impl 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.