diff options
Diffstat (limited to 'components/script/dom/webxr/xrviewport.rs')
-rw-r--r-- | components/script/dom/webxr/xrviewport.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/components/script/dom/webxr/xrviewport.rs b/components/script/dom/webxr/xrviewport.rs new file mode 100644 index 00000000000..8ac28519620 --- /dev/null +++ b/components/script/dom/webxr/xrviewport.rs @@ -0,0 +1,54 @@ +/* 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 dom_struct::dom_struct; +use euclid::Rect; +use webxr_api::Viewport; + +use crate::dom::bindings::codegen::Bindings::XRViewportBinding::XRViewportMethods; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::root::DomRoot; +use crate::dom::globalscope::GlobalScope; + +#[dom_struct] +pub struct XRViewport { + reflector_: Reflector, + #[no_trace] + viewport: Rect<i32, Viewport>, +} + +impl XRViewport { + fn new_inherited(viewport: Rect<i32, Viewport>) -> XRViewport { + XRViewport { + reflector_: Reflector::new(), + viewport, + } + } + + pub fn new(global: &GlobalScope, viewport: Rect<i32, Viewport>) -> DomRoot<XRViewport> { + reflect_dom_object(Box::new(XRViewport::new_inherited(viewport)), global) + } +} + +impl XRViewportMethods<crate::DomTypeHolder> for XRViewport { + /// <https://immersive-web.github.io/webxr/#dom-xrviewport-x> + fn X(&self) -> i32 { + self.viewport.origin.x + } + + /// <https://immersive-web.github.io/webxr/#dom-xrviewport-y> + fn Y(&self) -> i32 { + self.viewport.origin.y + } + + /// <https://immersive-web.github.io/webxr/#dom-xrviewport-width> + fn Width(&self) -> i32 { + self.viewport.size.width + } + + /// <https://immersive-web.github.io/webxr/#dom-xrviewport-height> + fn Height(&self) -> i32 { + self.viewport.size.height + } +} |