Skip to main content

script/dom/webxr/
xrviewport.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use dom_struct::dom_struct;
6use euclid::Rect;
7use js::context::JSContext;
8use script_bindings::reflector::{Reflector, reflect_dom_object_with_cx};
9use webxr_api::Viewport;
10
11use crate::dom::bindings::codegen::Bindings::XRViewportBinding::XRViewportMethods;
12use crate::dom::bindings::root::DomRoot;
13use crate::dom::globalscope::GlobalScope;
14
15#[dom_struct]
16pub(crate) struct XRViewport {
17    reflector_: Reflector,
18    #[no_trace]
19    viewport: Rect<i32, Viewport>,
20}
21
22impl XRViewport {
23    fn new_inherited(viewport: Rect<i32, Viewport>) -> XRViewport {
24        XRViewport {
25            reflector_: Reflector::new(),
26            viewport,
27        }
28    }
29
30    pub(crate) fn new(
31        cx: &mut JSContext,
32        global: &GlobalScope,
33        viewport: Rect<i32, Viewport>,
34    ) -> DomRoot<XRViewport> {
35        reflect_dom_object_with_cx(Box::new(XRViewport::new_inherited(viewport)), global, cx)
36    }
37}
38
39impl XRViewportMethods<crate::DomTypeHolder> for XRViewport {
40    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-x>
41    fn X(&self) -> i32 {
42        self.viewport.origin.x
43    }
44
45    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-y>
46    fn Y(&self) -> i32 {
47        self.viewport.origin.y
48    }
49
50    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-width>
51    fn Width(&self) -> i32 {
52        self.viewport.size.width
53    }
54
55    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-height>
56    fn Height(&self) -> i32 {
57        self.viewport.size.height
58    }
59}