Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some XRSpace improvements #23055

Merged
merged 8 commits into from Mar 21, 2019

Add originOffset to XRReferenceSpace

  • Loading branch information
Manishearth committed Mar 18, 2019
commit ffacb1179eb7b62b805584b72d11d1b429523b22
@@ -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;
};
@@ -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()
}
}
@@ -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,
@@ -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]
@@ -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,
)
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.