script/dom/animations/
animationtimeline.rs1use std::cell::Cell;
6
7use dom_struct::dom_struct;
8use script_bindings::num::Finite;
9use script_bindings::reflector::Reflector;
10use time::Duration;
11
12use crate::dom::bindings::codegen::Bindings::AnimationTimelineBinding::AnimationTimelineMethods;
13
14#[dom_struct]
16pub(crate) struct AnimationTimeline {
17 reflector_: Reflector,
18 #[no_trace]
23 current_time: Cell<Duration>,
24}
25
26impl AnimationTimeline {
27 pub(crate) fn new_inherited(current_time: Duration) -> Self {
28 Self {
29 reflector_: Reflector::new(),
30 current_time: Cell::new(current_time),
31 }
32 }
33
34 pub(crate) fn current_time_in_seconds(&self) -> f64 {
35 self.current_time.get().as_seconds_f64()
36 }
37
38 pub(crate) fn set_current_time(&self, duration: Duration) {
39 self.current_time.set(duration);
40 }
41
42 pub(crate) fn advance_specific(&self, by: Duration) {
43 self.current_time.set(self.current_time.get() + by);
44 }
45}
46
47impl AnimationTimelineMethods<crate::DomTypeHolder> for AnimationTimeline {
48 fn GetCurrentTime(&self) -> Option<Finite<f64>> {
50 Finite::new(self.current_time.get().as_seconds_f64() * 1000.0)
51 }
52}