aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrinputsource.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-04-29 20:27:07 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-05-03 18:46:31 -0700
commitd4a6a4987da86e363ccef6f3eaeeeee0cd8593aa (patch)
tree917eaf67b69c6f6bac1e8b2ce7268aa358916863 /components/script/dom/xrinputsource.rs
parente5716624d462d26fc840a1af124beaf482e26111 (diff)
downloadservo-d4a6a4987da86e363ccef6f3eaeeeee0cd8593aa.tar.gz
servo-d4a6a4987da86e363ccef6f3eaeeeee0cd8593aa.zip
Add XRInputSource.targetRaySpace
Diffstat (limited to 'components/script/dom/xrinputsource.rs')
-rw-r--r--components/script/dom/xrinputsource.rs21
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)
+ })
+ }
}