diff --git a/components/script/dom/dompointreadonly.rs b/components/script/dom/dompointreadonly.rs index 2387cb8f6d5..e8ae7aa4990 100644 --- a/components/script/dom/dompointreadonly.rs +++ b/components/script/dom/dompointreadonly.rs @@ -2,6 +2,7 @@ * 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 crate::dom::bindings::codegen::Bindings::DOMPointBinding::DOMPointInit; use crate::dom::bindings::codegen::Bindings::DOMPointReadOnlyBinding::{ DOMPointReadOnlyMethods, Wrap, }; @@ -50,6 +51,10 @@ impl DOMPointReadOnly { ) -> Fallible> { Ok(DOMPointReadOnly::new(global, x, y, z, w)) } + + pub fn new_from_init(global: &GlobalScope, p: &DOMPointInit) -> DomRoot { + DOMPointReadOnly::new(global, p.x, p.y, p.z, p.w) + } } impl DOMPointReadOnlyMethods for DOMPointReadOnly { diff --git a/components/script/dom/webidls/XRRigidTransform.webidl b/components/script/dom/webidls/XRRigidTransform.webidl index f7ccd0fb188..aa2bc93fa31 100644 --- a/components/script/dom/webidls/XRRigidTransform.webidl +++ b/components/script/dom/webidls/XRRigidTransform.webidl @@ -4,8 +4,8 @@ // https://immersive-web.github.io/webxr/#xrrigidtransform-interface -[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"] -// [Constructor(optional DOMPointInit position, optional DOMPointInit orientation)] +[SecureContext, Exposed=Window, Pref="dom.webxr.enabled", + Constructor(optional DOMPointInit position, optional DOMPointInit orientation)] interface XRRigidTransform { // readonly attribute DOMPointReadOnly position; // readonly attribute DOMPointReadOnly orientation; diff --git a/components/script/dom/xrrigidtransform.rs b/components/script/dom/xrrigidtransform.rs index b147e274810..d30a074fbf9 100644 --- a/components/script/dom/xrrigidtransform.rs +++ b/components/script/dom/xrrigidtransform.rs @@ -2,30 +2,57 @@ * 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 crate::dom::bindings::codegen::Bindings::DOMPointBinding::DOMPointInit; use crate::dom::bindings::codegen::Bindings::XRRigidTransformBinding; +use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::reflector::DomObject; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; -use crate::dom::bindings::root::DomRoot; -use crate::dom::globalscope::GlobalScope; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::dompointreadonly::DOMPointReadOnly; +use crate::dom::window::Window; use dom_struct::dom_struct; #[dom_struct] pub struct XRRigidTransform { reflector_: Reflector, + position: Dom, + orientation: Dom, } impl XRRigidTransform { - fn new_inherited() -> XRRigidTransform { + fn new_inherited( + position: &DOMPointReadOnly, + orientation: &DOMPointReadOnly, + ) -> XRRigidTransform { XRRigidTransform { reflector_: Reflector::new(), + position: Dom::from_ref(position), + orientation: Dom::from_ref(orientation), } } #[allow(unused)] - pub fn new(global: &GlobalScope) -> DomRoot { + pub fn new( + global: &Window, + position: &DOMPointReadOnly, + orientation: &DOMPointReadOnly, + ) -> DomRoot { reflect_dom_object( - Box::new(XRRigidTransform::new_inherited()), + Box::new(XRRigidTransform::new_inherited(position, orientation)), global, XRRigidTransformBinding::Wrap, ) } + + // https://immersive-web.github.io/webxr/#dom-xrrigidtransform-xrrigidtransform + pub fn Constructor( + window: &Window, + position: &DOMPointInit, + orientation: &DOMPointInit, + ) -> Fallible> { + let global = window.global(); + let position = DOMPointReadOnly::new_from_init(&global, &position); + let orientation = DOMPointReadOnly::new_from_init(&global, &orientation); + Ok(XRRigidTransform::new(window, &position, &orientation)) + } }