/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use std::cell::Cell; use dom_struct::dom_struct; use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::TextTrackCueBinding::TextTrackCueMethods; use crate::dom::bindings::num::Finite; use crate::dom::bindings::reflector::reflect_dom_object; use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::str::DOMString; use crate::dom::eventtarget::EventTarget; use crate::dom::texttrack::TextTrack; use crate::dom::window::Window; use crate::script_runtime::CanGc; #[dom_struct] pub(crate) struct TextTrackCue { eventtarget: EventTarget, id: DomRefCell, track: Option>, start_time: Cell, end_time: Cell, pause_on_exit: Cell, } impl TextTrackCue { pub(crate) fn new_inherited( id: DOMString, start_time: f64, end_time: f64, track: Option<&TextTrack>, ) -> TextTrackCue { TextTrackCue { eventtarget: EventTarget::new_inherited(), id: DomRefCell::new(id), track: track.map(Dom::from_ref), start_time: Cell::new(start_time), end_time: Cell::new(end_time), pause_on_exit: Cell::new(false), } } #[allow(dead_code)] pub(crate) fn new( window: &Window, id: DOMString, start_time: f64, end_time: f64, track: Option<&TextTrack>, can_gc: CanGc, ) -> DomRoot { reflect_dom_object( Box::new(TextTrackCue::new_inherited(id, start_time, end_time, track)), window, can_gc, ) } pub(crate) fn id(&self) -> DOMString { self.id.borrow().clone() } pub(crate) fn get_track(&self) -> Option> { self.track.as_ref().map(|t| DomRoot::from_ref(&**t)) } } impl TextTrackCueMethods for TextTrackCue { // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-id fn Id(&self) -> DOMString { self.id() } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-id fn SetId(&self, value: DOMString) { *self.id.borrow_mut() = value; } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-track fn GetTrack(&self) -> Option> { self.get_track() } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-starttime fn StartTime(&self) -> Finite { Finite::wrap(self.start_time.get()) } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-starttime fn SetStartTime(&self, value: Finite) { self.start_time.set(*value); } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-endtime fn EndTime(&self) -> Finite { Finite::wrap(self.end_time.get()) } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-endtime fn SetEndTime(&self, value: Finite) { self.end_time.set(*value); } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-pauseonexit fn PauseOnExit(&self) -> bool { self.pause_on_exit.get() } // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-pauseonexit fn SetPauseOnExit(&self, value: bool) { self.pause_on_exit.set(value); } // https://html.spec.whatwg.org/multipage/#handler-texttrackcue-onenter event_handler!(enter, GetOnenter, SetOnenter); // https://html.spec.whatwg.org/multipage/#handler-texttrackcue-onexit event_handler!(exit, GetOnexit, SetOnexit); }