aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-01-14 19:15:33 -0800
committerManish Goregaokar <manishsmail@gmail.com>2019-03-25 09:06:21 -0700
commit1dc7636135678d49a1e25f15c260f2734747e59b (patch)
treef5ac3708f6640da44d081f1a0dc336651f7d70be /components/script
parent5ae562bfc3507f12f562dfcb0cecd5ad1ec0fd20 (diff)
downloadservo-1dc7636135678d49a1e25f15c260f2734747e59b.tar.gz
servo-1dc7636135678d49a1e25f15c260f2734747e59b.zip
Add XRRenderState
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/webidls/XRRenderState.webidl17
-rw-r--r--components/script/dom/xrrenderstate.rs64
3 files changed, 82 insertions, 0 deletions
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index 00486b9033f..15c2e51057c 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -538,6 +538,7 @@ pub mod xr;
pub mod xrframe;
pub mod xrlayer;
pub mod xrreferencespace;
+pub mod xrrenderstate;
pub mod xrrigidtransform;
pub mod xrsession;
pub mod xrspace;
diff --git a/components/script/dom/webidls/XRRenderState.webidl b/components/script/dom/webidls/XRRenderState.webidl
new file mode 100644
index 00000000000..99e66dbe113
--- /dev/null
+++ b/components/script/dom/webidls/XRRenderState.webidl
@@ -0,0 +1,17 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+// https://immersive-web.github.io/webxr/#xrrenderstate-interface
+
+dictionary XRRenderStateInit {
+ double depthNear = 0.1;
+ double depthFar = 1000.0;
+ XRLayer? baseLayer = null;
+};
+
+[SecureContext, Exposed=Window] interface XRRenderState {
+ readonly attribute double depthNear;
+ readonly attribute double depthFar;
+ readonly attribute XRLayer? baseLayer;
+}; \ No newline at end of file
diff --git a/components/script/dom/xrrenderstate.rs b/components/script/dom/xrrenderstate.rs
new file mode 100644
index 00000000000..562e4231919
--- /dev/null
+++ b/components/script/dom/xrrenderstate.rs
@@ -0,0 +1,64 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use crate::dom::bindings::codegen::Bindings::XRRenderStateBinding::{self, XRRenderStateMethods};
+use crate::dom::bindings::num::Finite;
+use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::Reflector;
+use crate::dom::bindings::root::{DomRoot, MutNullableDom};
+use crate::dom::globalscope::GlobalScope;
+use crate::dom::xrlayer::XRLayer;
+
+use dom_struct::dom_struct;
+use std::cell::Cell;
+
+#[dom_struct]
+pub struct XRRenderState {
+ reflector_: Reflector,
+ depth_near: Cell<f64>,
+ depth_far: Cell<f64>,
+ layer: MutNullableDom<XRLayer>,
+}
+
+impl XRRenderState {
+ pub fn new_inherited(
+ depth_near: f64,
+ depth_far: f64,
+ layer: Option<&XRLayer>,
+ ) -> XRRenderState {
+ XRRenderState {
+ reflector_: Reflector::new(),
+ depth_near: Cell::new(depth_near),
+ depth_far: Cell::new(depth_far),
+ layer: MutNullableDom::new(layer),
+ }
+ }
+
+ pub fn new(
+ global: &GlobalScope,
+ depth_near: f64,
+ depth_far: f64,
+ layer: Option<&XRLayer>,
+ ) -> DomRoot<XRRenderState> {
+ reflect_dom_object(
+ Box::new(XRRenderState::new_inherited(depth_near, depth_far, layer)),
+ global,
+ XRRenderStateBinding::Wrap,
+ )
+ }
+}
+
+impl XRRenderStateMethods for XRRenderState {
+ fn DepthNear(&self) -> Finite<f64> {
+ Finite::wrap(self.depth_near.get())
+ }
+
+ fn DepthFar(&self) -> Finite<f64> {
+ Finite::wrap(self.depth_far.get())
+ }
+
+ fn GetBaseLayer(&self) -> Option<DomRoot<XRLayer>> {
+ self.layer.get()
+ }
+}