diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2019-11-22 17:24:16 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-22 17:24:16 -0500 |
commit | f14eb65a11ae11dbd5a09a43d750530f798cfde4 (patch) | |
tree | 924dea5580651bc24b8986d153f07172a043a892 /components/script/dom | |
parent | 10a63cc9d41acb535353436cf276eac5fdebb971 (diff) | |
parent | 87f729731a4f97f4605f1ee186fa8701147f6af3 (diff) | |
download | servo-f14eb65a11ae11dbd5a09a43d750530f798cfde4.tar.gz servo-f14eb65a11ae11dbd5a09a43d750530f798cfde4.zip |
Auto merge of #24838 - Manishearth:squeeze, r=jdm
Add support for squeeze events
Depends on https://github.com/servo/webxr/pull/98
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/webidls/XRSession.webidl | 3 | ||||
-rw-r--r-- | components/script/dom/xrsession.rs | 30 |
2 files changed, 26 insertions, 7 deletions
diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl index be8fb36e7bf..e726a500cb7 100644 --- a/components/script/dom/webidls/XRSession.webidl +++ b/components/script/dom/webidls/XRSession.webidl @@ -39,8 +39,11 @@ interface XRSession : EventTarget { // // Events attribute EventHandler onend; attribute EventHandler onselect; + attribute EventHandler onsqueeze; // attribute EventHandler oninputsourceschange; attribute EventHandler onselectstart; attribute EventHandler onselectend; + attribute EventHandler onsqueezestart; + attribute EventHandler onsqueezeend; attribute EventHandler onvisibilitychange; }; diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index 6fbdc592b0e..438705853f6 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -47,7 +47,8 @@ use std::cell::Cell; use std::mem; use std::rc::Rc; use webxr_api::{ - self, EnvironmentBlendMode, Event as XREvent, Frame, SelectEvent, Session, Visibility, + self, EnvironmentBlendMode, Event as XREvent, Frame, SelectEvent, SelectKind, Session, + Visibility, }; #[dom_struct] @@ -218,16 +219,22 @@ impl XRSession { let event = XRSessionEvent::new(&self.global(), atom!("end"), false, false, self); event.upcast::<Event>().fire(self.upcast()); }, - XREvent::Select(input, kind, frame) => { + XREvent::Select(input, kind, ty, frame) => { + use servo_atoms::Atom; + const START_ATOMS: [Atom; 2] = [atom!("selectstart"), atom!("squeezestart")]; + const EVENT_ATOMS: [Atom; 2] = [atom!("select"), atom!("squeeze")]; + const END_ATOMS: [Atom; 2] = [atom!("selectend"), atom!("squeezeend")]; + // https://immersive-web.github.io/webxr/#primary-action let source = self.input_sources.find(input); + let atom_index = if kind == SelectKind::Squeeze { 1 } else { 0 }; if let Some(source) = source { let frame = XRFrame::new(&self.global(), self, frame); frame.set_active(true); - if kind == SelectEvent::Start { + if ty == SelectEvent::Start { let event = XRInputSourceEvent::new( &self.global(), - atom!("selectstart"), + START_ATOMS[atom_index].clone(), false, false, &frame, @@ -235,10 +242,10 @@ impl XRSession { ); event.upcast::<Event>().fire(self.upcast()); } else { - if kind == SelectEvent::Select { + if ty == SelectEvent::Select { let event = XRInputSourceEvent::new( &self.global(), - atom!("select"), + EVENT_ATOMS[atom_index].clone(), false, false, &frame, @@ -248,7 +255,7 @@ impl XRSession { } let event = XRInputSourceEvent::new( &self.global(), - atom!("selectend"), + END_ATOMS[atom_index].clone(), false, false, &frame, @@ -353,6 +360,15 @@ impl XRSessionMethods for XRSession { /// https://immersive-web.github.io/webxr/#eventdef-xrsession-selectend event_handler!(selectend, GetOnselectend, SetOnselectend); + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-squeeze + event_handler!(squeeze, GetOnsqueeze, SetOnsqueeze); + + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-squeezestart + event_handler!(squeezestart, GetOnsqueezestart, SetOnsqueezestart); + + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-squeezeend + event_handler!(squeezeend, GetOnsqueezeend, SetOnsqueezeend); + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-visibilitychange event_handler!( visibilitychange, |