aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/webidls/XRReferenceSpace.webidl2
-rw-r--r--components/script/dom/xrreferencespace.rs32
-rw-r--r--components/script/dom/xrrigidtransform.rs12
-rw-r--r--components/script/dom/xrstationaryreferencespace.rs14
4 files changed, 48 insertions, 12 deletions
diff --git a/components/script/dom/webidls/XRReferenceSpace.webidl b/components/script/dom/webidls/XRReferenceSpace.webidl
index fdedfe0bb4f..378a4e520ee 100644
--- a/components/script/dom/webidls/XRReferenceSpace.webidl
+++ b/components/script/dom/webidls/XRReferenceSpace.webidl
@@ -16,6 +16,6 @@ dictionary XRReferenceSpaceOptions {
[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
interface XRReferenceSpace : XRSpace {
- // attribute XRRigidTransform originOffset;
+ attribute XRRigidTransform originOffset;
// attribute EventHandler onreset;
};
diff --git a/components/script/dom/xrreferencespace.rs b/components/script/dom/xrreferencespace.rs
index 308b710d928..7d573a165c3 100644
--- a/components/script/dom/xrreferencespace.rs
+++ b/components/script/dom/xrreferencespace.rs
@@ -3,30 +3,52 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding;
+use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding::XRReferenceSpaceMethods;
use crate::dom::bindings::reflector::reflect_dom_object;
-use crate::dom::bindings::root::DomRoot;
-use crate::dom::globalscope::GlobalScope;
+use crate::dom::bindings::root::{DomRoot, MutDom};
+use crate::dom::dompointreadonly::DOMPointReadOnly;
+use crate::dom::window::Window;
+use crate::dom::xrrigidtransform::XRRigidTransform;
use crate::dom::xrspace::XRSpace;
use dom_struct::dom_struct;
#[dom_struct]
pub struct XRReferenceSpace {
xrspace: XRSpace,
+ transform: MutDom<XRRigidTransform>,
}
impl XRReferenceSpace {
- pub fn new_inherited() -> XRReferenceSpace {
+ pub fn new_inherited(transform: &XRRigidTransform) -> XRReferenceSpace {
XRReferenceSpace {
xrspace: XRSpace::new_inherited(),
+ transform: MutDom::new(transform),
}
}
#[allow(unused)]
- pub fn new(global: &GlobalScope) -> DomRoot<XRReferenceSpace> {
+ pub fn new(
+ global: &Window,
+ position: &DOMPointReadOnly,
+ orientation: &DOMPointReadOnly,
+ ) -> DomRoot<XRReferenceSpace> {
+ let transform = XRRigidTransform::identity(global);
reflect_dom_object(
- Box::new(XRReferenceSpace::new_inherited()),
+ Box::new(XRReferenceSpace::new_inherited(&transform)),
global,
XRReferenceSpaceBinding::Wrap,
)
}
}
+
+impl XRReferenceSpaceMethods for XRReferenceSpace {
+ /// https://immersive-web.github.io/webxr/#dom-xrreferencespace-originoffset
+ fn SetOriginOffset(&self, transform: &XRRigidTransform) {
+ self.transform.set(transform);
+ }
+
+ /// https://immersive-web.github.io/webxr/#dom-xrreferencespace-originoffset
+ fn OriginOffset(&self) -> DomRoot<XRRigidTransform> {
+ self.transform.get()
+ }
+}
diff --git a/components/script/dom/xrrigidtransform.rs b/components/script/dom/xrrigidtransform.rs
index ab8bd6e6e85..3f726475517 100644
--- a/components/script/dom/xrrigidtransform.rs
+++ b/components/script/dom/xrrigidtransform.rs
@@ -45,6 +45,18 @@ impl XRRigidTransform {
)
}
+ #[allow(unused)]
+ pub fn identity(window: &Window) -> DomRoot<XRRigidTransform> {
+ let global = window.global();
+ let position = DOMPointReadOnly::new(&global, 0., 0., 0., 1.);
+ let orientation = DOMPointReadOnly::new(&global, 0., 0., 0., 1.);
+ reflect_dom_object(
+ Box::new(XRRigidTransform::new_inherited(&position, &orientation)),
+ window,
+ XRRigidTransformBinding::Wrap,
+ )
+ }
+
// https://immersive-web.github.io/webxr/#dom-xrrigidtransform-xrrigidtransform
pub fn Constructor(
window: &Window,
diff --git a/components/script/dom/xrstationaryreferencespace.rs b/components/script/dom/xrstationaryreferencespace.rs
index 92c0dce0196..bfb8b41aeb5 100644
--- a/components/script/dom/xrstationaryreferencespace.rs
+++ b/components/script/dom/xrstationaryreferencespace.rs
@@ -5,8 +5,9 @@
use crate::dom::bindings::codegen::Bindings::XRStationaryReferenceSpaceBinding;
use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot;
-use crate::dom::globalscope::GlobalScope;
+use crate::dom::window::Window;
use crate::dom::xrreferencespace::XRReferenceSpace;
+use crate::dom::xrrigidtransform::XRRigidTransform;
use dom_struct::dom_struct;
#[dom_struct]
@@ -16,16 +17,17 @@ pub struct XRStationaryReferenceSpace {
#[allow(unused)]
impl XRStationaryReferenceSpace {
- pub fn new_inherited() -> XRStationaryReferenceSpace {
+ pub fn new_inherited(transform: &XRRigidTransform) -> XRStationaryReferenceSpace {
XRStationaryReferenceSpace {
- xrreferencespace: XRReferenceSpace::new_inherited(),
+ xrreferencespace: XRReferenceSpace::new_inherited(transform),
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<XRStationaryReferenceSpace> {
+ pub fn new(window: &Window) -> DomRoot<XRStationaryReferenceSpace> {
+ let transform = XRRigidTransform::identity(window);
reflect_dom_object(
- Box::new(XRStationaryReferenceSpace::new_inherited()),
- global,
+ Box::new(XRStationaryReferenceSpace::new_inherited(&transform)),
+ window,
XRStationaryReferenceSpaceBinding::Wrap,
)
}