script/dom/webxr/
xrlayerevent.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 dom_struct::dom_struct;
6use js::rust::HandleObject;
7use stylo_atoms::Atom;
8
9use crate::dom::bindings::codegen::Bindings::EventBinding::Event_Binding::EventMethods;
10use crate::dom::bindings::codegen::Bindings::XRLayerEventBinding::{
11    XRLayerEventInit, XRLayerEventMethods,
12};
13use crate::dom::bindings::reflector::reflect_dom_object_with_proto;
14use crate::dom::bindings::root::{Dom, DomRoot};
15use crate::dom::bindings::str::DOMString;
16use crate::dom::event::Event;
17use crate::dom::window::Window;
18use crate::dom::xrlayer::XRLayer;
19use crate::script_runtime::CanGc;
20
21// https://w3c.github.io/uievents/#interface-uievent
22#[dom_struct]
23pub(crate) struct XRLayerEvent {
24    event: Event,
25    layer: Dom<XRLayer>,
26}
27
28impl XRLayerEvent {
29    pub(crate) fn new_inherited(layer: &XRLayer) -> XRLayerEvent {
30        XRLayerEvent {
31            event: Event::new_inherited(),
32            layer: Dom::from_ref(layer),
33        }
34    }
35
36    fn new(
37        window: &Window,
38        proto: Option<HandleObject>,
39        layer: &XRLayer,
40        can_gc: CanGc,
41    ) -> DomRoot<XRLayerEvent> {
42        reflect_dom_object_with_proto(
43            Box::new(XRLayerEvent::new_inherited(layer)),
44            window,
45            proto,
46            can_gc,
47        )
48    }
49}
50
51impl XRLayerEventMethods<crate::DomTypeHolder> for XRLayerEvent {
52    // https://immersive-web.github.io/layers/#dom-xrlayerevent-xrlayerevent
53    fn Constructor(
54        window: &Window,
55        proto: Option<HandleObject>,
56        can_gc: CanGc,
57        type_: DOMString,
58        init: &XRLayerEventInit,
59    ) -> DomRoot<XRLayerEvent> {
60        let event = XRLayerEvent::new(window, proto, &init.layer, can_gc);
61        let type_ = Atom::from(type_);
62        let bubbles = init.parent.bubbles;
63        let cancelable = init.parent.cancelable;
64        event.event.init_event(type_, bubbles, cancelable);
65        event
66    }
67
68    // https://immersive-web.github.io/layers/#dom-xrlayerevent-layer
69    fn Layer(&self) -> DomRoot<XRLayer> {
70        DomRoot::from_ref(&self.layer)
71    }
72
73    // https://dom.spec.whatwg.org/#dom-event-istrusted
74    fn IsTrusted(&self) -> bool {
75        self.event.IsTrusted()
76    }
77}