script/dom/webxr/
xrreferencespaceevent.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use js::rust::HandleObject;
8use script_bindings::reflector::reflect_dom_object_with_proto_and_cx;
9use stylo_atoms::Atom;
10
11use crate::dom::bindings::codegen::Bindings::EventBinding::Event_Binding::EventMethods;
12use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceEventBinding::{
13 XRReferenceSpaceEventInit, XRReferenceSpaceEventMethods,
14};
15use crate::dom::bindings::error::Fallible;
16use crate::dom::bindings::inheritance::Castable;
17use crate::dom::bindings::root::{Dom, DomRoot};
18use crate::dom::bindings::str::DOMString;
19use crate::dom::event::Event;
20use crate::dom::window::Window;
21use crate::dom::xrreferencespace::XRReferenceSpace;
22use crate::dom::xrrigidtransform::XRRigidTransform;
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 fn new_inherited(
33 space: &XRReferenceSpace,
34 transform: Option<&XRRigidTransform>,
35 ) -> XRReferenceSpaceEvent {
36 XRReferenceSpaceEvent {
37 event: Event::new_inherited(),
38 space: Dom::from_ref(space),
39 transform: transform.map(Dom::from_ref),
40 }
41 }
42
43 pub(crate) fn new(
44 cx: &mut JSContext,
45 window: &Window,
46 type_: Atom,
47 bubbles: bool,
48 cancelable: bool,
49 space: &XRReferenceSpace,
50 transform: Option<&XRRigidTransform>,
51 ) -> DomRoot<XRReferenceSpaceEvent> {
52 Self::new_with_proto(
53 cx, window, None, type_, bubbles, cancelable, space, transform,
54 )
55 }
56
57 #[expect(clippy::too_many_arguments)]
58 fn new_with_proto(
59 cx: &mut JSContext,
60 window: &Window,
61 proto: Option<HandleObject>,
62 type_: Atom,
63 bubbles: bool,
64 cancelable: bool,
65 space: &XRReferenceSpace,
66 transform: Option<&XRRigidTransform>,
67 ) -> DomRoot<XRReferenceSpaceEvent> {
68 let trackevent = reflect_dom_object_with_proto_and_cx(
69 Box::new(XRReferenceSpaceEvent::new_inherited(space, transform)),
70 window,
71 proto,
72 cx,
73 );
74 {
75 let event = trackevent.upcast::<Event>();
76 event.init_event(type_, bubbles, cancelable);
77 }
78 trackevent
79 }
80}
81
82impl XRReferenceSpaceEventMethods<crate::DomTypeHolder> for XRReferenceSpaceEvent {
83 fn Constructor(
85 cx: &mut JSContext,
86 window: &Window,
87 proto: Option<HandleObject>,
88 type_: DOMString,
89 init: &XRReferenceSpaceEventInit,
90 ) -> Fallible<DomRoot<XRReferenceSpaceEvent>> {
91 Ok(XRReferenceSpaceEvent::new_with_proto(
92 cx,
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 ))
101 }
102
103 fn ReferenceSpace(&self) -> DomRoot<XRReferenceSpace> {
105 DomRoot::from_ref(&*self.space)
106 }
107
108 fn GetTransform(&self) -> Option<DomRoot<XRRigidTransform>> {
110 self.transform
111 .as_ref()
112 .map(|transform| DomRoot::from_ref(&**transform))
113 }
114
115 fn IsTrusted(&self) -> bool {
117 self.event.IsTrusted()
118 }
119}