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, ResourcePool, 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()), 2.5);
assert_eq!(track.sample(1250.milliseconds()), 10.0);
assert_eq!(track.sample(2.seconds()), 15.0);
assert_eq!(track.duration(), Some(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: Time, 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, or for invalid easing parameters. Equal, negative and descending times are not sorted or converted into instantaneous jumps.

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 for a negative duration or signed tick overflow.

Trait Implementations§

Source§

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

Source§

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

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

fn duration(&self) -> Option<Duration>

Returns the finite duration, or None for an unbounded signal.
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: Animation<OtherValue>,

Samples in parallel; the duration is infinite if either input is infinite.
Source§

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

Delays a finite animation, holding its initial value before the offset. Infinite signals shift their signed time instead. Negative offsets and finite duration overflow panic at construction.
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 finite animation becomes instantaneous. Invalid factors and unrepresentable durations panic.
Source§

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

Runs two finite animations in sequence. The second owns their shared boundary. Infinite sources or duration overflow panic at construction.
Source§

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

Reverses a finite animation. Infinite sources panic at construction.
Source§

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

Plays a finite animation count times. Intermediate boundaries restart; the final boundary holds the target. Zero repeats hold the initial value. Infinite sources or duration overflow panic at construction.
Source§

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

Plays a finite animation forward then backward, ending at its initial value. Infinite sources or duration overflow panic at construction.
Source§

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

Shares a type-erased animation, retaining sampling and combinators.
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

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