aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrreferencespace.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-06-10 15:52:01 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-06-10 16:06:31 -0700
commit52b0d37bb7be8e476e7952b049914e8e25d5ac71 (patch)
treec709cdb35c65e9b0b2a097d6f3d506664378e2ee /components/script/dom/xrreferencespace.rs
parent26e0aaca6c536cb58f6c0062585e76edb8fef45e (diff)
downloadservo-52b0d37bb7be8e476e7952b049914e8e25d5ac71.tar.gz
servo-52b0d37bb7be8e476e7952b049914e8e25d5ac71.zip
Update originOffset semantics
Diffstat (limited to 'components/script/dom/xrreferencespace.rs')
-rw-r--r--components/script/dom/xrreferencespace.rs47
1 files changed, 30 insertions, 17 deletions
diff --git a/components/script/dom/xrreferencespace.rs b/components/script/dom/xrreferencespace.rs
index 37d3b9f4153..c65ba7dad3e 100644
--- a/components/script/dom/xrreferencespace.rs
+++ b/components/script/dom/xrreferencespace.rs
@@ -5,8 +5,9 @@
use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding;
use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding::XRReferenceSpaceMethods;
use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding::XRReferenceSpaceType;
-use crate::dom::bindings::reflector::reflect_dom_object;
-use crate::dom::bindings::root::{DomRoot, MutDom};
+use crate::dom::bindings::inheritance::Castable;
+use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::globalscope::GlobalScope;
use crate::dom::xrrigidtransform::XRRigidTransform;
use crate::dom::xrsession::XRSession;
@@ -18,19 +19,19 @@ use webvr_traits::WebVRFrameData;
#[dom_struct]
pub struct XRReferenceSpace {
xrspace: XRSpace,
- transform: MutDom<XRRigidTransform>,
+ offset: Dom<XRRigidTransform>,
ty: XRReferenceSpaceType,
}
impl XRReferenceSpace {
pub fn new_inherited(
session: &XRSession,
- transform: &XRRigidTransform,
+ offset: &XRRigidTransform,
ty: XRReferenceSpaceType,
) -> XRReferenceSpace {
XRReferenceSpace {
xrspace: XRSpace::new_inherited(session),
- transform: MutDom::new(transform),
+ offset: Dom::from_ref(offset),
ty,
}
}
@@ -41,9 +42,19 @@ impl XRReferenceSpace {
session: &XRSession,
ty: XRReferenceSpaceType,
) -> DomRoot<XRReferenceSpace> {
- let transform = XRRigidTransform::identity(global);
+ let offset = XRRigidTransform::identity(global);
+ Self::new_offset(global, session, ty, &offset)
+ }
+
+ #[allow(unused)]
+ pub fn new_offset(
+ global: &GlobalScope,
+ session: &XRSession,
+ ty: XRReferenceSpaceType,
+ offset: &XRRigidTransform,
+ ) -> DomRoot<XRReferenceSpace> {
reflect_dom_object(
- Box::new(XRReferenceSpace::new_inherited(session, &transform, ty)),
+ Box::new(XRReferenceSpace::new_inherited(session, &offset, ty)),
global,
XRReferenceSpaceBinding::Wrap,
)
@@ -51,14 +62,16 @@ impl XRReferenceSpace {
}
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()
+ /// https://immersive-web.github.io/webxr/#dom-xrreferencespace-getoffsetreferencespace
+ fn GetOffsetReferenceSpace(&self, new: &XRRigidTransform) -> DomRoot<Self> {
+ let offset = new.transform().pre_mul(&self.offset.transform());
+ let offset = XRRigidTransform::new(&self.global(), offset);
+ Self::new_offset(
+ &self.global(),
+ self.upcast::<XRSpace>().session(),
+ self.ty,
+ &offset,
+ )
}
}
@@ -77,7 +90,7 @@ impl XRReferenceSpace {
// = (get_unoffset_pose(space) * offset).inverse() * get_pose(viewer_space)
// = offset.inverse() * get_unoffset_pose(space).inverse() * get_pose(viewer_space)
// = offset.inverse() * get_unoffset_viewer_pose(space)
- let offset = self.transform.get().transform();
+ let offset = self.offset.transform();
let inverse = offset.inverse();
inverse.pre_mul(&pose)
}
@@ -128,7 +141,7 @@ impl XRReferenceSpace {
let pose = self.get_unoffset_pose(base_pose);
// This may change, see https://github.com/immersive-web/webxr/issues/567
- let offset = self.transform.get().transform();
+ let offset = self.offset.transform();
offset.post_mul(&pose)
}