use super::*;
#[derive(Clone)]
pub struct Transition(pub(crate) IUIAnimationTransition2);
#[derive(Clone)]
pub struct TransitionLibrary(IUIAnimationTransitionLibrary2);
impl TransitionLibrary {
pub fn new() -> Result<Self> {
unsafe {
let mut ptr = core::ptr::null_mut();
CoCreateInstance(
&UIAnimationTransitionLibrary2,
core::ptr::null_mut(),
CLSCTX_INPROC_SERVER,
&IUIAnimationTransitionLibrary2::IID,
&mut ptr,
)
.ok()?;
Ok(Self(windows_core::imp::Type::from_abi(ptr)?))
}
}
pub fn accelerate_decelerate(
&self,
duration: f64,
final_value: f64,
acceleration_ratio: f64,
deceleration_ratio: f64,
) -> Result<Transition> {
unsafe {
Ok(Transition(self.0.CreateAccelerateDecelerateTransition(
duration,
final_value,
acceleration_ratio,
deceleration_ratio,
)?))
}
}
pub fn linear(&self, duration: f64, final_value: f64) -> Result<Transition> {
unsafe {
Ok(Transition(
self.0.CreateLinearTransition(duration, final_value)?,
))
}
}
pub fn instantaneous(&self, final_value: f64) -> Result<Transition> {
unsafe {
Ok(Transition(
self.0.CreateInstantaneousTransition(final_value)?,
))
}
}
}