pub struct MotionBinding<S, T>where
T: Animatable,{ /* private fields */ }Expand description
Reusable configuration that maps business states to motion targets.
A binding contains no mutable playback state. Call MotionBinding::state
once per consumer, then pass that state to MotionBinding::set_state.
Exact (from, to) factories take precedence over the fallback factory.
§Examples
use aura_anim_core::{MotionBinding, MotionRuntime, timing::{Duration, Timing}};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum ButtonState {
Idle,
Hovered,
}
let binding = MotionBinding::new(ButtonState::Idle, 0.8_f32)
.when(ButtonState::Hovered, 1.0)
.transition(ButtonState::Idle, ButtonState::Hovered, |context| {
context.tween(Timing::ease_out(120.0))
})
.fallback(|context| context.tween(Timing::linear(100.0)));
let mut runtime = MotionRuntime::new();
let (motion, mut state) = binding.create_motion(&mut runtime);
let playback = binding
.set_state_tracked(
&mut state,
ButtonState::Hovered,
motion,
&mut runtime,
)
.unwrap()
.unwrap();
runtime.tick(Duration::from_millis(120.0));
assert_eq!(motion.value(&runtime).unwrap(), 1.0);
assert!(runtime.take_events()[0].is_completed_for(playback));Implementations§
Source§impl<S, T> MotionBinding<S, T>
impl<S, T> MotionBinding<S, T>
Sourcepub fn new(initial_state: S, initial_target: T) -> MotionBinding<S, T>
pub fn new(initial_state: S, initial_target: T) -> MotionBinding<S, T>
Creates a binding with its initial business state and target value.
Sourcepub fn when(self, state: S, target: T) -> MotionBinding<S, T>
pub fn when(self, state: S, target: T) -> MotionBinding<S, T>
Adds or replaces the target associated with state.
Sourcepub fn transition<A>(
self,
from: S,
to: S,
factory: impl Fn(TransitionContext<S, T>) -> A + 'static,
) -> MotionBinding<S, T>where
A: Animation<T>,
pub fn transition<A>(
self,
from: S,
to: S,
factory: impl Fn(TransitionContext<S, T>) -> A + 'static,
) -> MotionBinding<S, T>where
A: Animation<T>,
Adds or replaces an exact (from, to) transition factory.
The factory may return any concrete Animation;
the binding handles type erasure internally.
Sourcepub fn fallback<A>(
self,
factory: impl Fn(TransitionContext<S, T>) -> A + 'static,
) -> MotionBinding<S, T>where
A: Animation<T>,
pub fn fallback<A>(
self,
factory: impl Fn(TransitionContext<S, T>) -> A + 'static,
) -> MotionBinding<S, T>where
A: Animation<T>,
Sets the factory used when no exact transition is configured.
The factory may return any concrete Animation;
the binding handles type erasure internally.
Sourcepub const fn initial_state(&self) -> &S
pub const fn initial_state(&self) -> &S
Returns the initial business state.
Sourcepub fn target(&self, state: &S) -> Result<&T, MotionBindingError<S>>
pub fn target(&self, state: &S) -> Result<&T, MotionBindingError<S>>
Returns the target associated with state.
Sourcepub fn state(&self) -> MotionBindingState<S>
pub fn state(&self) -> MotionBindingState<S>
Creates independent state tracking for one consumer.
Sourcepub fn create_motion(
&self,
runtime: &mut MotionRuntime,
) -> (Motion<T>, MotionBindingState<S>)
pub fn create_motion( &self, runtime: &mut MotionRuntime, ) -> (Motion<T>, MotionBindingState<S>)
Creates a motion at the initial target and its independent state tracker.
Sourcepub fn set_state(
&self,
binding_state: &mut MotionBindingState<S>,
next_state: S,
motion: Motion<T>,
runtime: &mut MotionRuntime,
) -> Result<bool, MotionBindingError<S>>
pub fn set_state( &self, binding_state: &mut MotionBindingState<S>, next_state: S, motion: Motion<T>, runtime: &mut MotionRuntime, ) -> Result<bool, MotionBindingError<S>>
Applies next_state to an existing motion.
Returns Ok(false) when the requested state is already current.
Use MotionBinding::set_state_tracked when the concrete playback ID
is needed for event matching.
Sourcepub fn set_state_tracked(
&self,
binding_state: &mut MotionBindingState<S>,
next_state: S,
motion: Motion<T>,
runtime: &mut MotionRuntime,
) -> Result<Option<PlaybackId>, MotionBindingError<S>>
pub fn set_state_tracked( &self, binding_state: &mut MotionBindingState<S>, next_state: S, motion: Motion<T>, runtime: &mut MotionRuntime, ) -> Result<Option<PlaybackId>, MotionBindingError<S>>
Applies next_state and returns the concrete playback ID.
Returns Ok(None) when the requested state is already current.
Target and transition lookup happen before the motion is modified.
The state tracker is updated only after motion.play_tracked succeeds.
Trait Implementations§
Source§impl<S, T> Clone for MotionBinding<S, T>
impl<S, T> Clone for MotionBinding<S, T>
Source§fn clone(&self) -> MotionBinding<S, T>
fn clone(&self) -> MotionBinding<S, T>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<S, T> !RefUnwindSafe for MotionBinding<S, T>
impl<S, T> !Send for MotionBinding<S, T>
impl<S, T> !Sync for MotionBinding<S, T>
impl<S, T> !UnwindSafe for MotionBinding<S, T>
impl<S, T> Freeze for MotionBinding<S, T>
impl<S, T> Unpin for MotionBinding<S, T>
impl<S, T> UnsafeUnpin for MotionBinding<S, T>where
S: UnsafeUnpin,
T: UnsafeUnpin,
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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<State, Message> IntoBoot<State, Message> for State
impl<State, Message> IntoBoot<State, Message> for State
Source§fn into_boot(self) -> (State, Task<Message>)
fn into_boot(self) -> (State, Task<Message>)
Application.