aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-11-22 17:24:16 -0500
committerGitHub <noreply@github.com>2019-11-22 17:24:16 -0500
commitf14eb65a11ae11dbd5a09a43d750530f798cfde4 (patch)
tree924dea5580651bc24b8986d153f07172a043a892 /components/script/dom
parent10a63cc9d41acb535353436cf276eac5fdebb971 (diff)
parent87f729731a4f97f4605f1ee186fa8701147f6af3 (diff)
downloadservo-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.webidl3
-rw-r--r--components/script/dom/xrsession.rs30
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,