script/dom/webxr/
xrreferencespaceevent.rs1use 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::XRReferenceSpaceEventBinding::{
11 XRReferenceSpaceEventInit, XRReferenceSpaceEventMethods,
12};
13use crate::dom::bindings::error::Fallible;
14use crate::dom::bindings::inheritance::Castable;
15use crate::dom::bindings::reflector::reflect_dom_object_with_proto;
16use crate::dom::bindings::root::{Dom, DomRoot};
17use crate::dom::bindings::str::DOMString;
18use crate::dom::event::Event;
19use crate::dom::window::Window;
20use crate::dom::xrreferencespace::XRReferenceSpace;
21use crate::dom::xrrigidtransform::XRRigidTransform;
22use crate::script_runtime::CanGc;
23
24#[dom_struct]
25pub(crate) struct XRReferenceSpaceEvent {
26 event: Event,
27 space: Dom<XRReferenceSpace>,
28 transform: Option<Dom<XRRigidTransform>>,
29}
30
31impl XRReferenceSpaceEvent {
32 #[cfg_attr(crown, allow(crown::unrooted_must_root))]
33 fn new_inherited(
34 space: &XRReferenceSpace,
35 transform: Option<&XRRigidTransform>,
36 ) -> XRReferenceSpaceEvent {
37 XRReferenceSpaceEvent {
38 event: Event::new_inherited(),
39 space: Dom::from_ref(space),
40 transform: transform.map(Dom::from_ref),
41 }
42 }
43
44 pub(crate) fn new(
45 window: &Window,
46 type_: Atom,
47 bubbles: bool,
48 cancelable: bool,
49 space: &XRReferenceSpace,
50 transform: Option<&XRRigidTransform>,
51 can_gc: CanGc,
52 ) -> DomRoot<XRReferenceSpaceEvent> {
53 Self::new_with_proto(
54 window, None, type_, bubbles, cancelable, space, transform, can_gc,
55 )
56 }
57
58 #[allow(clippy::too_many_arguments)]
59 fn new_with_proto(
60 window: &Window,
61 proto: Option<HandleObject>,
62 type_: Atom,
63 bubbles: bool,
64 cancelable: bool,
65 space: &XRReferenceSpace,
66 transform: Option<&XRRigidTransform>,
67 can_gc: CanGc,
68 ) -> DomRoot<XRReferenceSpaceEvent> {
69 let trackevent = reflect_dom_object_with_proto(
70 Box::new(XRReferenceSpaceEvent::new_inherited(space, transform)),
71 window,
72 proto,
73 can_gc,
74 );
75 {
76 let event = trackevent.upcast::<Event>();
77 event.init_event(type_, bubbles, cancelable);
78 }
79 trackevent
80 }
81}
82
83impl XRReferenceSpaceEventMethods<crate::DomTypeHolder> for XRReferenceSpaceEvent {
84 fn Constructor(
86 window: &Window,
87 proto: Option<HandleObject>,
88 can_gc: CanGc,
89 type_: DOMString,
90 init: &XRReferenceSpaceEventInit,
91 ) -> Fallible<DomRoot<XRReferenceSpaceEvent>> {
92 Ok(XRReferenceSpaceEvent::new_with_proto(
93 window,
94 proto,
95 Atom::from(type_),
96 init.parent.bubbles,
97 init.parent.cancelable,
98 &init.referenceSpace,
99 init.transform.as_deref(),
100 can_gc,
101 ))
102 }
103
104 fn ReferenceSpace(&self) -> DomRoot<XRReferenceSpace> {
106 DomRoot::from_ref(&*self.space)
107 }
108
109 fn GetTransform(&self) -> Option<DomRoot<XRRigidTransform>> {
111 self.transform
112 .as_ref()
113 .map(|transform| DomRoot::from_ref(&**transform))
114 }
115
116 fn IsTrusted(&self) -> bool {
118 self.event.IsTrusted()
119 }
120}