Skip to content

Commit

Permalink
Add originOffset to XRReferenceSpace
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Mar 18, 2019
1 parent 503ea3d commit ffacb11
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 12 deletions.
2 changes: 1 addition & 1 deletion components/script/dom/webidls/XRReferenceSpace.webidl
Expand Up @@ -16,6 +16,6 @@ dictionary XRReferenceSpaceOptions {

[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
interface XRReferenceSpace : XRSpace {
// attribute XRRigidTransform originOffset;
attribute XRRigidTransform originOffset;
// attribute EventHandler onreset;
};
32 changes: 27 additions & 5 deletions components/script/dom/xrreferencespace.rs
Expand Up @@ -3,30 +3,52 @@
* 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::XRReferenceSpaceMethods;
use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use crate::dom::bindings::root::{DomRoot, MutDom};
use crate::dom::dompointreadonly::DOMPointReadOnly;
use crate::dom::window::Window;
use crate::dom::xrrigidtransform::XRRigidTransform;
use crate::dom::xrspace::XRSpace;
use dom_struct::dom_struct;

#[dom_struct]
pub struct XRReferenceSpace {
xrspace: XRSpace,
transform: MutDom<XRRigidTransform>,
}

impl XRReferenceSpace {
pub fn new_inherited() -> XRReferenceSpace {
pub fn new_inherited(transform: &XRRigidTransform) -> XRReferenceSpace {
XRReferenceSpace {
xrspace: XRSpace::new_inherited(),
transform: MutDom::new(transform),
}
}

#[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(
Box::new(XRReferenceSpace::new_inherited()),
Box::new(XRReferenceSpace::new_inherited(&transform)),
global,
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()
}
}
12 changes: 12 additions & 0 deletions components/script/dom/xrrigidtransform.rs
Expand Up @@ -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
pub fn Constructor(
window: &Window,
Expand Down
14 changes: 8 additions & 6 deletions components/script/dom/xrstationaryreferencespace.rs
Expand Up @@ -5,8 +5,9 @@
use crate::dom::bindings::codegen::Bindings::XRStationaryReferenceSpaceBinding;
use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use crate::dom::xrreferencespace::XRReferenceSpace;
use crate::dom::xrrigidtransform::XRRigidTransform;
use dom_struct::dom_struct;

#[dom_struct]
Expand All @@ -16,16 +17,17 @@ pub struct XRStationaryReferenceSpace {

#[allow(unused)]
impl XRStationaryReferenceSpace {
pub fn new_inherited() -> XRStationaryReferenceSpace {
pub fn new_inherited(transform: &XRRigidTransform) -> 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(
Box::new(XRStationaryReferenceSpace::new_inherited()),
global,
Box::new(XRStationaryReferenceSpace::new_inherited(&transform)),
window,
XRStationaryReferenceSpaceBinding::Wrap,
)
}
Expand Down

0 comments on commit ffacb11

Please sign in to comment.