use super::*;
#[derive(Clone)]
pub struct Manager(pub(crate) IUIAnimationManager2);
impl Manager {
pub fn new() -> Result<Self> {
unsafe {
let mut ptr = core::ptr::null_mut();
CoCreateInstance(
&UIAnimationManager2,
core::ptr::null_mut(),
CLSCTX_INPROC_SERVER,
&IUIAnimationManager2::IID,
&mut ptr,
)
.ok()?;
Ok(Self(windows_core::imp::Type::from_abi(ptr)?))
}
}
pub fn create_variable(&self, initial_value: f64) -> Result<Variable> {
unsafe { Ok(Variable(self.0.CreateAnimationVariable(initial_value)?)) }
}
pub fn create_storyboard(&self) -> Result<Storyboard> {
unsafe { Ok(Storyboard(self.0.CreateStoryboard()?)) }
}
pub fn update(&self, time: f64) -> Result<()> {
unsafe { self.0.Update(time, None) }.ok()?;
Ok(())
}
pub fn schedule_transition(
&self,
variable: &Variable,
transition: &Transition,
time: f64,
) -> Result<()> {
unsafe { self.0.ScheduleTransition(&variable.0, &transition.0, time) }.ok()
}
}