Skip to main content

TimingFunction

Enum TimingFunction 

Source
pub enum TimingFunction {
    Linear,
    EaseIn,
    EaseOut,
    EaseInOut,
    CubicBezier(f32, f32, f32, f32),
    Spring(SpringConfig),
    Custom(CustomCurve),
}
Expand description

Timing function that controls the animation curve

Variants§

§

Linear

Linear interpolation (constant speed)

§

EaseIn

Starts slow, ends fast

§

EaseOut

Starts fast, ends slow

§

EaseInOut

Starts slow, speeds up, then slows down

§

CubicBezier(f32, f32, f32, f32)

CSS cubic-bezier curve (x1, y1, x2, y2)

§

Spring(SpringConfig)

Spring physics simulation (can overshoot)

§

Custom(CustomCurve)

A curve of the caller’s own, built by custom.

The excursion it carries is sampled once at construction rather than the curve being clamped to a constant: anything sizing a bound from a curve — a damage rect is why this exists — needs a number that is true of that curve, and a hand-rolled bounce should bounce as far as it was written to. Which is why CustomCurve cannot be assembled by hand: a Custom(f, 0.0) written out where the enum is in scope type-checks, and its excursion is then a claim nobody measured.

Implementations§

Source§

impl TimingFunction

Source

pub fn evaluate(&self, t: f32) -> f32

Evaluate the timing function at time t (0.0 to 1.0) Returns the interpolation factor (can exceed [0, 1] for overshoot)

Note: Spring animations are handled separately in AnimationState::advance() using real elapsed time. This method returns t as fallback for springs.

Source

pub fn peak_overshoot(&self) -> f32

How far past 1.0 this curve can go, as a fraction of the distance travelled. Zero for every curve that only eases.

A bezier is bounded by its control polygon, so its control points give the bound directly, and a spring’s physics give it exactly.

A Custom curve is an arbitrary closure, so it cannot be asked — it is measured: custom samples it once when it is built and carries the excursion it found, which is what this reports. The curve itself is untouched, and evaluate hands back exactly what it returns.

Clamping the curve to an assumed allowance would make the bound true by shortening every hand-rolled bounce, silently, which is the wrong way round: the bound describes the curve, not the reverse. Assuming one without measuring is no better — a bounce peaking at 1.5 would have had its damage rect measured for 1.25, leaving the ring between the two outside every one of them.

Source

pub fn custom<F>(f: F) -> Self
where F: Fn(f32) -> f32 + Send + Sync + 'static,

Create a custom timing function from a closure.

The curve is sampled here, once, to find how far it leaves [0, 1] — so building one costs a construction plus 65 evaluations of the closure, around half a microsecond for a curve with a trig call in it. Free where a curve is built once and shared, which is the usual shape; inside a per-row builder rebuilt on every pass it is worth hoisting, since TimingFunction is Clone.

Trait Implementations§

Source§

impl Clone for TimingFunction

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TimingFunction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T, M, S> Animate<T, M> for S
where T: Clone + 'static, S: IntoSignal<T, M>,

Source§

fn transition(self, transition: impl Into<TransitionConfig>) -> Animated<T>

Ease to each new value this holds, instead of jumping to it. Read more
Source§

fn timeline(self, keyframes: Keyframes<T>) -> Animated<T>
where T: Animatable,

Play keyframes when the widget appears — or, if they are played_by a trigger, on every change of it — resting on this value in between. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, I> IntoSignal<T> for I
where T: Clone + 'static, I: Into<T>,

Source§

fn into_signal(self) -> Signal<T>

Source§

fn into_prop(self) -> Prop<T>

The same declaration, as a property keeps it. Read more
Source§

impl<T> IntoVal<Option<T>> for T

Source§

fn into_val(self) -> Option<T>

Source§

impl<T> IntoVal<T> for T

Source§

fn into_val(self) -> T

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more