script/dom/
texttrackcue.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use 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    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-id
74    fn Id(&self) -> DOMString {
75        self.id()
76    }
77
78    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-id
79    fn SetId(&self, value: DOMString) {
80        *self.id.borrow_mut() = value;
81    }
82
83    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-track
84    fn GetTrack(&self) -> Option<DomRoot<TextTrack>> {
85        self.get_track()
86    }
87
88    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-starttime
89    fn StartTime(&self) -> Finite<f64> {
90        Finite::wrap(self.start_time.get())
91    }
92
93    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-starttime
94    fn SetStartTime(&self, value: Finite<f64>) {
95        self.start_time.set(*value);
96    }
97
98    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-endtime
99    fn EndTime(&self) -> Finite<f64> {
100        Finite::wrap(self.end_time.get())
101    }
102
103    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-endtime
104    fn SetEndTime(&self, value: Finite<f64>) {
105        self.end_time.set(*value);
106    }
107
108    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-pauseonexit
109    fn PauseOnExit(&self) -> bool {
110        self.pause_on_exit.get()
111    }
112
113    // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-pauseonexit
114    fn SetPauseOnExit(&self, value: bool) {
115        self.pause_on_exit.set(value);
116    }
117
118    // https://html.spec.whatwg.org/multipage/#handler-texttrackcue-onenter
119    event_handler!(enter, GetOnenter, SetOnenter);
120
121    // https://html.spec.whatwg.org/multipage/#handler-texttrackcue-onexit
122    event_handler!(exit, GetOnexit, SetOnexit);
123}