pub enum Curve {
Linear,
EaseIn,
EaseOut,
EaseInOut,
Emphasized,
Cubic(f64, f64, f64, f64),
}Expand description
The animation vocabulary: the shell-fed frame clock (FrameTime)
plus the pure easing/interpolation/spring math a widget or app advances it
through, flat-re-exported from frust-core::anim. Time enters from the
shell during paint (PaintCtx::frame_time); nothing here reads a clock.
An easing curve mapping a normalized time t ∈ [0, 1] to an eased progress
∈ [0, 1].
The named variants are the standard CSS timing functions plus Material 3’s
Emphasized easing; Curve::Cubic is a general cubic-Bézier for anything
else. Evaluation clamps t to [0, 1] first.
Variants§
Linear
t unchanged.
EaseIn
CSS ease-in — cubic-bezier(0.42, 0, 1, 1).
EaseOut
CSS ease-out — cubic-bezier(0, 0, 0.58, 1).
EaseInOut
CSS ease-in-out — cubic-bezier(0.42, 0, 0.58, 1).
Emphasized
Material 3 emphasized easing — cubic-bezier(0.2, 0.0, 0.0, 1.0).
Cubic(f64, f64, f64, f64)
A general cubic-Bézier timing function with control points
(x1, y1) and (x2, y2) (endpoints fixed at (0, 0)/(1, 1)), the
same parameterization CSS cubic-bezier() uses.
Implementations§
Source§impl Curve
impl Curve
Sourcepub fn transform(self, t: f64) -> f64
pub fn transform(self, t: f64) -> f64
Evaluate the eased progress at normalized time t (clamped to [0, 1]).
Sourcepub fn interval(self, start: f64, end: f64) -> SegmentedCurve
pub fn interval(self, start: f64, end: f64) -> SegmentedCurve
Confine this curve to the [start, end] fraction of the timeline
(Flutter’s Interval, TweenSequence-style curve segmentation):
before start the result is 0.0, at/after end it’s 1.0, and in
between it re-evaluates self at the rescaled local time
(t - start) / (end - start).
This is what lets two widgets fade through each other on one shared
controller — e.g. an outgoing element on curve.interval(0.0, 0.3)
and an incoming one on curve.interval(0.3, 1.0).
start/end aren’t required to be [0, 1]-clamped or ordered here;
a degenerate or inverted interval (end <= start) is defined as an
instantaneous step at start: strictly before it the result is
0.0, at or after it’s 1.0 (see SegmentedCurve::transform).
Returns a SegmentedCurve rather than Curve itself: Curve is
Copy (relied on by AnimationController, which derives Copy
over its own curve: Curve field), and an Interval variant holding
another Curve by value would make the enum infinitely-sized without
indirection (Box), which would forfeit that Copy bound — so the
segment lives in its own small Copy struct instead.
Trait Implementations§
impl Copy for Curve
impl StructuralPartialEq for Curve
Auto Trait Implementations§
impl Freeze for Curve
impl RefUnwindSafe for Curve
impl Send for Curve
impl Sync for Curve
impl Unpin for Curve
impl UnsafeUnpin for Curve
impl UnwindSafe for Curve
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.