aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrview.rs
diff options
context:
space:
mode:
authorDaniel Adams <70986246+msub2@users.noreply.github.com>2024-08-20 16:37:58 -1000
committerGitHub <noreply@github.com>2024-08-21 02:37:58 +0000
commit8e224cb4d3730899eba2f01c26cb1bd43caa8812 (patch)
tree7a557d9e13359cb2839dd90dcafb510bec4d1027 /components/script/dom/xrview.rs
parent75b817cca38b40b00041e1b2767222d471cff669 (diff)
downloadservo-8e224cb4d3730899eba2f01c26cb1bd43caa8812.tar.gz
servo-8e224cb4d3730899eba2f01c26cb1bd43caa8812.zip
webxr: Update XRView to latest spec (#33145)
* Add recommendedViewportScale and requestViewportScale Signed-off-by: Daniel Adams <msub2official@gmail.com> * Remove currently unused internal slots Signed-off-by: Daniel Adams <msub2official@gmail.com> --------- Signed-off-by: Daniel Adams <msub2official@gmail.com>
Diffstat (limited to 'components/script/dom/xrview.rs')
-rw-r--r--components/script/dom/xrview.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/components/script/dom/xrview.rs b/components/script/dom/xrview.rs
index f26bf0f126d..047318a62ea 100644
--- a/components/script/dom/xrview.rs
+++ b/components/script/dom/xrview.rs
@@ -2,6 +2,8 @@
* 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 std::cell::Cell;
+
use dom_struct::dom_struct;
use euclid::RigidTransform3D;
use js::typedarray::{Float32, Float32Array};
@@ -9,6 +11,7 @@ use webxr_api::{ApiSpace, View};
use super::bindings::buffer_source::HeapBufferSource;
use crate::dom::bindings::codegen::Bindings::XRViewBinding::{XREye, XRViewMethods};
+use crate::dom::bindings::num::Finite;
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::globalscope::GlobalScope;
@@ -28,6 +31,7 @@ pub struct XRView {
#[no_trace]
view: View<ApiSpace>,
transform: Dom<XRRigidTransform>,
+ requested_viewport_scale: Cell<f64>,
}
impl XRView {
@@ -46,6 +50,7 @@ impl XRView {
proj: HeapBufferSource::default(),
view,
transform: Dom::from_ref(transform),
+ requested_viewport_scale: Cell::new(1.0),
}
}
@@ -107,6 +112,22 @@ impl XRViewMethods for XRView {
DomRoot::from_ref(&self.transform)
}
+ /// <https://www.w3.org/TR/webxr/#dom-xrview-recommendedviewportscale>
+ fn GetRecommendedViewportScale(&self) -> Option<Finite<f64>> {
+ // Just return 1.0 since we currently will always use full-sized viewports
+ Finite::new(1.0)
+ }
+
+ /// <https://www.w3.org/TR/webxr/#dom-xrview-requestviewportscale>
+ fn RequestViewportScale(&self, scale: Option<Finite<f64>>) {
+ if let Some(scale) = scale {
+ if *scale > 0.0 {
+ let clamped_scale = scale.clamp(0.0, 1.0);
+ self.requested_viewport_scale.set(clamped_scale);
+ }
+ }
+ }
+
/// <https://www.w3.org/TR/webxr-ar-module-1/#dom-xrview-isfirstpersonobserver>
fn IsFirstPersonObserver(&self) -> bool {
// Servo is not currently supported anywhere that supports this, so return false