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 webxr_api::Viewport;
8
9use crate::dom::bindings::codegen::Bindings::XRViewportBinding::XRViewportMethods;
10use crate::dom::bindings::reflector::{Reflector, reflect_dom_object};
11use crate::dom::bindings::root::DomRoot;
12use crate::dom::globalscope::GlobalScope;
13use crate::script_runtime::CanGc;
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        global: &GlobalScope,
32        viewport: Rect<i32, Viewport>,
33        can_gc: CanGc,
34    ) -> DomRoot<XRViewport> {
35        reflect_dom_object(
36            Box::new(XRViewport::new_inherited(viewport)),
37            global,
38            can_gc,
39        )
40    }
41}
42
43impl XRViewportMethods<crate::DomTypeHolder> for XRViewport {
44    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-x>
45    fn X(&self) -> i32 {
46        self.viewport.origin.x
47    }
48
49    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-y>
50    fn Y(&self) -> i32 {
51        self.viewport.origin.y
52    }
53
54    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-width>
55    fn Width(&self) -> i32 {
56        self.viewport.size.width
57    }
58
59    /// <https://immersive-web.github.io/webxr/#dom-xrviewport-height>
60    fn Height(&self) -> i32 {
61        self.viewport.size.height
62    }
63}