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 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 window: &Window,
45 type_: Atom,
46 bubbles: bool,
47 cancelable: bool,
48 space: &XRReferenceSpace,
49 transform: Option<&XRRigidTransform>,
50 can_gc: CanGc,
51 ) -> DomRoot<XRReferenceSpaceEvent> {
52 Self::new_with_proto(
53 window, None, type_, bubbles, cancelable, space, transform, can_gc,
54 )
55 }
56
57 #[expect(clippy::too_many_arguments)]
58 fn new_with_proto(
59 window: &Window,
60 proto: Option<HandleObject>,
61 type_: Atom,
62 bubbles: bool,
63 cancelable: bool,
64 space: &XRReferenceSpace,
65 transform: Option<&XRRigidTransform>,
66 can_gc: CanGc,
67 ) -> DomRoot<XRReferenceSpaceEvent> {
68 let trackevent = reflect_dom_object_with_proto(
69 Box::new(XRReferenceSpaceEvent::new_inherited(space, transform)),
70 window,
71 proto,
72 can_gc,
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 window: &Window,
86 proto: Option<HandleObject>,
87 can_gc: CanGc,
88 type_: DOMString,
89 init: &XRReferenceSpaceEventInit,
90 ) -> Fallible<DomRoot<XRReferenceSpaceEvent>> {
91 Ok(XRReferenceSpaceEvent::new_with_proto(
92 window,
93 proto,
94 Atom::from(type_),
95 init.parent.bubbles,
96 init.parent.cancelable,
97 &init.referenceSpace,
98 init.transform.as_deref(),
99 can_gc,
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}