pub enum Curve {
Linear,
EaseIn,
EaseOut,
EaseInOut,
Emphasized,
Cubic(f64, f64, f64, f64),
}Expand description
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.