diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-05-29 17:15:25 -0700 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-05-30 19:04:08 -0700 |
commit | 97df39fce1af449ac73707f6c2ba6cba18ae05a4 (patch) | |
tree | 46324057be078e4ebeef1a0ea76d072a62d538ce /components/script/dom | |
parent | 4b930b9e305ff67f26f19cb8bd70430a1d4fff1c (diff) | |
download | servo-97df39fce1af449ac73707f6c2ba6cba18ae05a4.tar.gz servo-97df39fce1af449ac73707f6c2ba6cba18ae05a4.zip |
Add FakeXRDeviceController.setViewerOrigin()
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/fakexrdevicecontroller.rs | 21 | ||||
-rw-r--r-- | components/script/dom/webidls/FakeXRDeviceController.webidl | 2 |
2 files changed, 19 insertions, 4 deletions
diff --git a/components/script/dom/fakexrdevicecontroller.rs b/components/script/dom/fakexrdevicecontroller.rs index f690a1bcc43..bd33d34aea1 100644 --- a/components/script/dom/fakexrdevicecontroller.rs +++ b/components/script/dom/fakexrdevicecontroller.rs @@ -7,7 +7,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::dom::bindings::codegen::Bindings::FakeXRDeviceControllerBinding::{ - self, FakeXRDeviceControllerMethods, FakeXRViewInit, + self, FakeXRDeviceControllerMethods, FakeXRRigidTransform, FakeXRViewInit, }; use crate::dom::bindings::codegen::Bindings::XRViewBinding::XREye; use crate::dom::bindings::error::{Error, Fallible}; @@ -42,7 +42,8 @@ impl FakeXRDeviceController { .as_window() .webvr_thread() .unwrap() - .send(WebVRMsg::MessageMockDisplay(msg)); + .send(WebVRMsg::MessageMockDisplay(msg)) + .unwrap(); } } @@ -64,7 +65,7 @@ impl FakeXRDeviceControllerMethods for FakeXRDeviceController { left.viewOffset.position.len() != 4 || right.viewOffset.position.len() != 4 { - return Err(Error::Type("Incorrectly sized matrix".into())); + return Err(Error::Type("Incorrectly sized array".into())); } let mut proj_l = [0.; 16]; @@ -85,4 +86,18 @@ impl FakeXRDeviceControllerMethods for FakeXRDeviceController { self.send_msg(MockVRControlMsg::SetEyeParameters(params_l, params_r)); Ok(()) } + + fn SetViewerOrigin(&self, origin: &FakeXRRigidTransform) -> Fallible<()> { + if origin.position.len() != 4 || origin.orientation.len() != 4 { + return Err(Error::Type("Incorrectly sized array".into())); + } + let mut position = [0.; 3]; + let mut orientation = [0.; 4]; + let v: Vec<_> = origin.position.iter().map(|x| **x).collect(); + position.copy_from_slice(&v[0..3]); + let v: Vec<_> = origin.orientation.iter().map(|x| **x).collect(); + orientation.copy_from_slice(&v); + self.send_msg(MockVRControlMsg::SetViewerPose(position, orientation)); + Ok(()) + } } diff --git a/components/script/dom/webidls/FakeXRDeviceController.webidl b/components/script/dom/webidls/FakeXRDeviceController.webidl index 723088096a0..cacdb2f9819 100644 --- a/components/script/dom/webidls/FakeXRDeviceController.webidl +++ b/components/script/dom/webidls/FakeXRDeviceController.webidl @@ -13,7 +13,7 @@ interface FakeXRDeviceController { // // requestAnimationFrame() callbacks. [Throws] void setViews(sequence<FakeXRViewInit> views); - // void setViewerOrigin(FakeXRRigidTransform origin); + [Throws] void setViewerOrigin(FakeXRRigidTransform origin); // Simulates the user activating the reset pose on a device. // void simulateResetPose(); |