Add originOffset to XRReferenceSpace

This commit is contained in:
Manish Goregaokar 2019-03-14 13:40:39 -07:00
parent 503ea3d943
commit ffacb1179e
4 changed files with 48 additions and 12 deletions

View file

@ -16,6 +16,6 @@ dictionary XRReferenceSpaceOptions {
[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"] [SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
interface XRReferenceSpace : XRSpace { interface XRReferenceSpace : XRSpace {
// attribute XRRigidTransform originOffset; attribute XRRigidTransform originOffset;
// attribute EventHandler onreset; // attribute EventHandler onreset;
}; };

View file

@ -3,30 +3,52 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding; use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding;
use crate::dom::bindings::codegen::Bindings::XRReferenceSpaceBinding::XRReferenceSpaceMethods;
use crate::dom::bindings::reflector::reflect_dom_object; use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::root::{DomRoot, MutDom};
use crate::dom::globalscope::GlobalScope; use crate::dom::dompointreadonly::DOMPointReadOnly;
use crate::dom::window::Window;
use crate::dom::xrrigidtransform::XRRigidTransform;
use crate::dom::xrspace::XRSpace; use crate::dom::xrspace::XRSpace;
use dom_struct::dom_struct; use dom_struct::dom_struct;
#[dom_struct] #[dom_struct]
pub struct XRReferenceSpace { pub struct XRReferenceSpace {
xrspace: XRSpace, xrspace: XRSpace,
transform: MutDom<XRRigidTransform>,
} }
impl XRReferenceSpace { impl XRReferenceSpace {
pub fn new_inherited() -> XRReferenceSpace { pub fn new_inherited(transform: &XRRigidTransform) -> XRReferenceSpace {
XRReferenceSpace { XRReferenceSpace {
xrspace: XRSpace::new_inherited(), xrspace: XRSpace::new_inherited(),
transform: MutDom::new(transform),
} }
} }
#[allow(unused)] #[allow(unused)]
pub fn new(global: &GlobalScope) -> DomRoot<XRReferenceSpace> { pub fn new(
global: &Window,
position: &DOMPointReadOnly,
orientation: &DOMPointReadOnly,
) -> DomRoot<XRReferenceSpace> {
let transform = XRRigidTransform::identity(global);
reflect_dom_object( reflect_dom_object(
Box::new(XRReferenceSpace::new_inherited()), Box::new(XRReferenceSpace::new_inherited(&transform)),
global, global,
XRReferenceSpaceBinding::Wrap, XRReferenceSpaceBinding::Wrap,
) )
} }
} }
impl XRReferenceSpaceMethods for XRReferenceSpace {
/// https://immersive-web.github.io/webxr/#dom-xrreferencespace-originoffset
fn SetOriginOffset(&self, transform: &XRRigidTransform) {
self.transform.set(transform);
}
/// https://immersive-web.github.io/webxr/#dom-xrreferencespace-originoffset
fn OriginOffset(&self) -> DomRoot<XRRigidTransform> {
self.transform.get()
}
}

View file

@ -45,6 +45,18 @@ impl XRRigidTransform {
) )
} }
#[allow(unused)]
pub fn identity(window: &Window) -> DomRoot<XRRigidTransform> {
let global = window.global();
let position = DOMPointReadOnly::new(&global, 0., 0., 0., 1.);
let orientation = DOMPointReadOnly::new(&global, 0., 0., 0., 1.);
reflect_dom_object(
Box::new(XRRigidTransform::new_inherited(&position, &orientation)),
window,
XRRigidTransformBinding::Wrap,
)
}
// https://immersive-web.github.io/webxr/#dom-xrrigidtransform-xrrigidtransform // https://immersive-web.github.io/webxr/#dom-xrrigidtransform-xrrigidtransform
pub fn Constructor( pub fn Constructor(
window: &Window, window: &Window,

View file

@ -5,8 +5,9 @@
use crate::dom::bindings::codegen::Bindings::XRStationaryReferenceSpaceBinding; use crate::dom::bindings::codegen::Bindings::XRStationaryReferenceSpaceBinding;
use crate::dom::bindings::reflector::reflect_dom_object; use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope; use crate::dom::window::Window;
use crate::dom::xrreferencespace::XRReferenceSpace; use crate::dom::xrreferencespace::XRReferenceSpace;
use crate::dom::xrrigidtransform::XRRigidTransform;
use dom_struct::dom_struct; use dom_struct::dom_struct;
#[dom_struct] #[dom_struct]
@ -16,16 +17,17 @@ pub struct XRStationaryReferenceSpace {
#[allow(unused)] #[allow(unused)]
impl XRStationaryReferenceSpace { impl XRStationaryReferenceSpace {
pub fn new_inherited() -> XRStationaryReferenceSpace { pub fn new_inherited(transform: &XRRigidTransform) -> XRStationaryReferenceSpace {
XRStationaryReferenceSpace { XRStationaryReferenceSpace {
xrreferencespace: XRReferenceSpace::new_inherited(), xrreferencespace: XRReferenceSpace::new_inherited(transform),
} }
} }
pub fn new(global: &GlobalScope) -> DomRoot<XRStationaryReferenceSpace> { pub fn new(window: &Window) -> DomRoot<XRStationaryReferenceSpace> {
let transform = XRRigidTransform::identity(window);
reflect_dom_object( reflect_dom_object(
Box::new(XRStationaryReferenceSpace::new_inherited()), Box::new(XRStationaryReferenceSpace::new_inherited(&transform)),
global, window,
XRStationaryReferenceSpaceBinding::Wrap, XRStationaryReferenceSpaceBinding::Wrap,
) )
} }