script/dom/
texttrackcue.rs1use std::cell::Cell;
6
7use dom_struct::dom_struct;
8
9use crate::dom::bindings::cell::DomRefCell;
10use crate::dom::bindings::codegen::Bindings::TextTrackCueBinding::TextTrackCueMethods;
11use crate::dom::bindings::num::Finite;
12use crate::dom::bindings::reflector::reflect_dom_object;
13use crate::dom::bindings::root::{Dom, DomRoot};
14use crate::dom::bindings::str::DOMString;
15use crate::dom::eventtarget::EventTarget;
16use crate::dom::texttrack::TextTrack;
17use crate::dom::window::Window;
18use crate::script_runtime::CanGc;
19
20#[dom_struct]
21pub(crate) struct TextTrackCue {
22 eventtarget: EventTarget,
23 id: DomRefCell<DOMString>,
24 track: Option<Dom<TextTrack>>,
25 start_time: Cell<f64>,
26 end_time: Cell<f64>,
27 pause_on_exit: Cell<bool>,
28}
29
30impl TextTrackCue {
31 pub(crate) fn new_inherited(
32 id: DOMString,
33 start_time: f64,
34 end_time: f64,
35 track: Option<&TextTrack>,
36 ) -> TextTrackCue {
37 TextTrackCue {
38 eventtarget: EventTarget::new_inherited(),
39 id: DomRefCell::new(id),
40 track: track.map(Dom::from_ref),
41 start_time: Cell::new(start_time),
42 end_time: Cell::new(end_time),
43 pause_on_exit: Cell::new(false),
44 }
45 }
46
47 #[allow(dead_code)]
48 pub(crate) fn new(
49 window: &Window,
50 id: DOMString,
51 start_time: f64,
52 end_time: f64,
53 track: Option<&TextTrack>,
54 can_gc: CanGc,
55 ) -> DomRoot<TextTrackCue> {
56 reflect_dom_object(
57 Box::new(TextTrackCue::new_inherited(id, start_time, end_time, track)),
58 window,
59 can_gc,
60 )
61 }
62
63 pub(crate) fn id(&self) -> DOMString {
64 self.id.borrow().clone()
65 }
66
67 pub(crate) fn get_track(&self) -> Option<DomRoot<TextTrack>> {
68 self.track.as_ref().map(|t| DomRoot::from_ref(&**t))
69 }
70}
71
72impl TextTrackCueMethods<crate::DomTypeHolder> for TextTrackCue {
73 fn Id(&self) -> DOMString {
75 self.id()
76 }
77
78 fn SetId(&self, value: DOMString) {
80 *self.id.borrow_mut() = value;
81 }
82
83 fn GetTrack(&self) -> Option<DomRoot<TextTrack>> {
85 self.get_track()
86 }
87
88 fn StartTime(&self) -> Finite<f64> {
90 Finite::wrap(self.start_time.get())
91 }
92
93 fn SetStartTime(&self, value: Finite<f64>) {
95 self.start_time.set(*value);
96 }
97
98 fn EndTime(&self) -> Finite<f64> {
100 Finite::wrap(self.end_time.get())
101 }
102
103 fn SetEndTime(&self, value: Finite<f64>) {
105 self.end_time.set(*value);
106 }
107
108 fn PauseOnExit(&self) -> bool {
110 self.pause_on_exit.get()
111 }
112
113 fn SetPauseOnExit(&self, value: bool) {
115 self.pause_on_exit.set(value);
116 }
117
118 event_handler!(enter, GetOnenter, SetOnenter);
120
121 event_handler!(exit, GetOnexit, SetOnexit);
123}