diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-04-29 20:27:07 -0700 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-05-03 18:46:31 -0700 |
commit | d4a6a4987da86e363ccef6f3eaeeeee0cd8593aa (patch) | |
tree | 917eaf67b69c6f6bac1e8b2ce7268aa358916863 /components/script/dom/xrinputsource.rs | |
parent | e5716624d462d26fc840a1af124beaf482e26111 (diff) | |
download | servo-d4a6a4987da86e363ccef6f3eaeeeee0cd8593aa.tar.gz servo-d4a6a4987da86e363ccef6f3eaeeeee0cd8593aa.zip |
Add XRInputSource.targetRaySpace
Diffstat (limited to 'components/script/dom/xrinputsource.rs')
-rw-r--r-- | components/script/dom/xrinputsource.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/components/script/dom/xrinputsource.rs b/components/script/dom/xrinputsource.rs index dcb86a23622..2b623864d56 100644 --- a/components/script/dom/xrinputsource.rs +++ b/components/script/dom/xrinputsource.rs @@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::XRInputSourceBinding; use crate::dom::bindings::codegen::Bindings::XRInputSourceBinding::{ XRHandedness, XRInputSourceMethods, }; -use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; -use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; +use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom}; use crate::dom::globalscope::GlobalScope; use crate::dom::xrsession::XRSession; +use crate::dom::xrspace::XRSpace; use dom_struct::dom_struct; -use webvr_traits::{WebVRGamepadData, WebVRGamepadHand, WebVRGamepadState}; +use webvr_traits::{WebVRGamepadData, WebVRGamepadHand, WebVRGamepadState, WebVRPose}; #[dom_struct] pub struct XRInputSource { @@ -22,6 +23,7 @@ pub struct XRInputSource { data: WebVRGamepadData, #[ignore_malloc_size_of = "Defined in rust-webvr"] state: DomRefCell<WebVRGamepadState>, + target_ray_space: MutNullableDom<XRSpace>, } impl XRInputSource { @@ -35,6 +37,7 @@ impl XRInputSource { session: Dom::from_ref(session), data, state: DomRefCell::new(state), + target_ray_space: Default::default(), } } @@ -54,6 +57,10 @@ impl XRInputSource { pub fn update_state(&self, state: WebVRGamepadState) { *self.state.borrow_mut() = state; } + + pub fn pose(&self) -> WebVRPose { + self.state.borrow().pose + } } impl XRInputSourceMethods for XRInputSource { @@ -65,4 +72,12 @@ impl XRInputSourceMethods for XRInputSource { WebVRGamepadHand::Right => XRHandedness::Right, } } + + /// https://immersive-web.github.io/webxr/#dom-xrinputsource-targetrayspace + fn TargetRaySpace(&self) -> DomRoot<XRSpace> { + self.target_ray_space.or_init(|| { + let global = self.global(); + XRSpace::new_inputspace(&global, &self.session, &self) + }) + } } |