Skip to main content

Keyframes

Struct Keyframes 

Source
pub struct Keyframes<Value> { /* private fields */ }
Expand description

A nonempty track starting at zero, with absolute destinations and relative holds.

Exact timestamps return stored values. Intervals use the arriving point’s easing, while holds clone their value without invoking interpolation. Sampling is stateless and uses integer ticks for interval selection before f64 progress.

This is the canonical crate::Keyframes type.

use motion_core::prelude::*;
use motion_core::{
    DisplayList, RasterLimits, ResourceStore, ValidatedDisplayList, MAX_PATH_VERBS,
    MAX_STROKE_VERBS, MAX_SVG_PATH_BYTES, sample_offsets,
};
let track = Keyframes::new(0.0_f64)
    .to(1.seconds(), 10.0, Easing::QuadraticIn)
    .hold(500.milliseconds())
    .to(2.5.seconds(), 20.0, Easing::Linear);
assert_eq!(track.sample(500.milliseconds().after_origin()), 2.5);
assert_eq!(track.sample(1250.milliseconds().after_origin()), 10.0);
assert_eq!(track.sample(2.seconds().after_origin()), 15.0);
assert_eq!(track.duration(), 2.5.seconds());

Implementations§

Source§

impl<Value> Keyframes<Value>

Source

pub fn new(value: Value) -> Self

Starts with a value at zero. Without further points the finite duration is zero and every sample returns this value.

Source

pub fn to(self, at: Duration, value: Value, easing: Easing) -> Self

Appends a destination at an absolute local time, not an added duration. The easing controls the segment arriving at this value.

§Panics

Panics unless at is strictly later than the previous point, including any appended hold. Equal and descending times are not sorted or converted into instantaneous jumps.

Source

pub fn try_to( self, at: Duration, value: Value, easing: Easing, ) -> Result<Self, ValidationError>

Appends a destination like Self::to, reporting non-increasing times.

Source§

impl<Value: Clone> Keyframes<Value>

Source

pub fn hold(self, duration: Duration) -> Self

Holds the last value for an additional duration, without interpolation. Zero is a no-op, leaving the last timestamp unchanged.

§Panics

Panics on signed tick overflow; see Self::try_hold.

Source

pub fn try_hold(self, duration: Duration) -> Result<Self, ValidationError>

Holds like Self::hold, reporting tick overflow.

Trait Implementations§

Source§

impl<Value: Clone> Clone for Keyframes<Value>

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<Value: Debug> Debug for Keyframes<Value>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<Value: Interpolate + Send + Sync> FiniteAnimation<Value> for Keyframes<Value>

Source§

fn duration(&self) -> Duration

Returns the nonnegative duration.
Source§

fn delay(self, offset: Duration) -> Delay<Self>
where Self: Sized,

Delays the animation, holding its initial value before the offset. Read more
Source§

fn try_delay(self, offset: Duration) -> Result<Delay<Self>, ValidationError>
where Self: Sized,

Delays like Self::delay, reporting duration overflow.
Source§

fn speed(self, factor: f64) -> Speed<Self>
where Self: Sized,

Changes playback speed by a finite, strictly positive factor. Durations round to the nearest tick; a collapsed animation becomes instantaneous. Read more
Source§

fn try_speed(self, factor: f64) -> Result<Speed<Self>, ValidationError>
where Self: Sized,

Changes speed like Self::speed, reporting an invalid factor or unrepresentable duration.
Source§

fn then<Next: FiniteAnimation<Value>>(self, next: Next) -> Then<Self, Next>
where Self: Sized,

Runs two animations in sequence. The second owns their shared boundary. Duration overflow panics at construction.
Source§

fn reverse(self) -> Reverse<Self>
where Self: Sized,

Reverses the animation.
Source§

fn repeat(self, count: u32) -> Repeat<Self>
where Self: Sized,

Plays the animation count times. Intermediate boundaries restart; the final boundary holds the target. Zero repeats hold the initial value. Duration overflow panics at construction.
Source§

fn ping_pong(self) -> PingPong<Self>
where Self: Sized,

Plays the animation forward then backward, ending at its initial value. Duration overflow panics at construction.
Source§

fn boxed_finite(self) -> Arc<dyn FiniteAnimation<Value>> ⓘ
where Self: Sized + 'static,

Shares a type-erased animation, retaining sampling, duration and combinators.
Source§

impl<Value: Interpolate + Send + Sync> Signal<Value> for Keyframes<Value>

Source§

fn sample(&self, time: Time) -> Value

Samples without advancing a clock or changing playback state.
Source§

fn sample_at(&self, elapsed: Duration) -> Value

Samples elapsed after the time origin, shorthand for sample(elapsed.after_origin()). Read more
Source§

fn map<Output, Function>(self, function: Function) -> Map<Self, Function, Value>
where Self: Sized, Function: Fn(Value) -> Output + Send + Sync,

Transforms values without changing timing.
Source§

fn zip<OtherValue, Other>(self, other: Other) -> Zip<Self, Other>
where Self: Sized, Other: Signal<OtherValue>,

Samples in parallel; the result is finite only if both inputs are finite.
Source§

fn boxed(self) -> Arc<dyn Signal<Value>> ⓘ
where Self: Sized + 'static,

Shares a type-erased signal.

Auto Trait Implementations§

§

impl<Value> !RefUnwindSafe for Keyframes<Value>

§

impl<Value> !UnwindSafe for Keyframes<Value>

§

impl<Value> Forget for Keyframes<Value>

§

impl<Value> Freeze for Keyframes<Value>
where Vec<Keyframe<Value>>: Freeze,

§

impl<Value> Move for Keyframes<Value>

§

impl<Value> Send for Keyframes<Value>
where Vec<Keyframe<Value>>: Send,

§

impl<Value> Sync for Keyframes<Value>
where Vec<Keyframe<Value>>: Sync,

§

impl<Value> Unpin for Keyframes<Value>
where Vec<Keyframe<Value>>: Unpin,

§

impl<Value> UnsafeUnpin for Keyframes<Value>
where Vec<Keyframe<Value>>: UnsafeUnpin,

Blanket Implementations§

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<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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