diff options
-rw-r--r-- | components/script/dom/mod.rs | 1 | ||||
-rw-r--r-- | components/script/dom/xrframe.rs | 12 | ||||
-rw-r--r-- | components/script/dom/xrspace.rs | 6 |
3 files changed, 14 insertions, 5 deletions
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index d6a6c30b823..598832403e0 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -549,6 +549,7 @@ pub mod xmlserializer; pub mod xr; pub mod xrframe; pub mod xrinputsource; +pub mod xrinputsourceevent; pub mod xrpose; pub mod xrreferencespace; pub mod xrrenderstate; diff --git a/components/script/dom/xrframe.rs b/components/script/dom/xrframe.rs index 29572c02300..6c67d896f81 100644 --- a/components/script/dom/xrframe.rs +++ b/components/script/dom/xrframe.rs @@ -93,8 +93,16 @@ impl XRFrameMethods for XRFrame { if !self.active.get() { return Err(Error::InvalidState); } - let space = space.get_pose(&self.data); - let relative_to = relative_to.get_pose(&self.data); + let space = if let Some(space) = space.get_pose(&self.data) { + space + } else { + return Ok(None); + }; + let relative_to = if let Some(r) = relative_to.get_pose(&self.data) { + r + } else { + return Ok(None); + }; let pose = relative_to.inverse().pre_transform(&space); Ok(Some(XRPose::new(&self.global(), pose))) } diff --git a/components/script/dom/xrspace.rs b/components/script/dom/xrspace.rs index 6fa00d1cffe..8162a558542 100644 --- a/components/script/dom/xrspace.rs +++ b/components/script/dom/xrspace.rs @@ -57,9 +57,9 @@ impl XRSpace { /// The reference origin used is common between all /// get_pose calls for spaces from the same device, so this can be used to compare /// with other spaces - pub fn get_pose(&self, base_pose: &Frame) -> ApiPose { + pub fn get_pose(&self, base_pose: &Frame) -> Option<ApiPose> { if let Some(reference) = self.downcast::<XRReferenceSpace>() { - reference.get_pose(base_pose) + Some(reference.get_pose(base_pose)) } else if let Some(source) = self.input_source.get() { // XXXManishearth we should be able to request frame information // for inputs when necessary instead of always loading it @@ -72,7 +72,7 @@ impl XRSpace { .iter() .find(|i| i.id == id) .expect("no input found"); - cast_transform(frame.target_ray_origin) + Some(cast_transform(frame.target_ray_origin)) } else { unreachable!() } |