diff options
author | Daniel Adams <70986246+msub2@users.noreply.github.com> | 2024-08-20 16:37:58 -1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-21 02:37:58 +0000 |
commit | 8e224cb4d3730899eba2f01c26cb1bd43caa8812 (patch) | |
tree | 7a557d9e13359cb2839dd90dcafb510bec4d1027 /components/script/dom/xrview.rs | |
parent | 75b817cca38b40b00041e1b2767222d471cff669 (diff) | |
download | servo-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.rs | 21 |
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 |