Auto merge of #24838 - Manishearth:squeeze, r=jdm

Add support for squeeze events

Depends on https://github.com/servo/webxr/pull/98
This commit is contained in:
bors-servo 2019-11-22 17:24:16 -05:00 committed by GitHub
commit f14eb65a11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 19 deletions

4
Cargo.lock generated
View file

@ -6007,7 +6007,7 @@ dependencies = [
[[package]] [[package]]
name = "webxr" name = "webxr"
version = "0.0.1" version = "0.0.1"
source = "git+https://github.com/servo/webxr#27c83fde49d820bc3ffd0396d9aea01a3b5c5729" source = "git+https://github.com/servo/webxr#e44552df536a6f424d58ccd068aa0301fee5fa1e"
dependencies = [ dependencies = [
"bindgen", "bindgen",
"euclid", "euclid",
@ -6027,7 +6027,7 @@ dependencies = [
[[package]] [[package]]
name = "webxr-api" name = "webxr-api"
version = "0.0.1" version = "0.0.1"
source = "git+https://github.com/servo/webxr#27c83fde49d820bc3ffd0396d9aea01a3b5c5729" source = "git+https://github.com/servo/webxr#e44552df536a6f424d58ccd068aa0301fee5fa1e"
dependencies = [ dependencies = [
"euclid", "euclid",
"ipc-channel", "ipc-channel",

View file

@ -107,6 +107,9 @@ selectend
selectstart selectstart
serif serif
signalingstatechange signalingstatechange
squeeze
squeezeend
squeezestart
srclang srclang
statechange statechange
stroke stroke

View file

@ -39,8 +39,11 @@ interface XRSession : EventTarget {
// // Events // // Events
attribute EventHandler onend; attribute EventHandler onend;
attribute EventHandler onselect; attribute EventHandler onselect;
attribute EventHandler onsqueeze;
// attribute EventHandler oninputsourceschange; // attribute EventHandler oninputsourceschange;
attribute EventHandler onselectstart; attribute EventHandler onselectstart;
attribute EventHandler onselectend; attribute EventHandler onselectend;
attribute EventHandler onsqueezestart;
attribute EventHandler onsqueezeend;
attribute EventHandler onvisibilitychange; attribute EventHandler onvisibilitychange;
}; };

View file

@ -47,7 +47,8 @@ use std::cell::Cell;
use std::mem; use std::mem;
use std::rc::Rc; use std::rc::Rc;
use webxr_api::{ use webxr_api::{
self, EnvironmentBlendMode, Event as XREvent, Frame, SelectEvent, Session, Visibility, self, EnvironmentBlendMode, Event as XREvent, Frame, SelectEvent, SelectKind, Session,
Visibility,
}; };
#[dom_struct] #[dom_struct]
@ -218,16 +219,22 @@ impl XRSession {
let event = XRSessionEvent::new(&self.global(), atom!("end"), false, false, self); let event = XRSessionEvent::new(&self.global(), atom!("end"), false, false, self);
event.upcast::<Event>().fire(self.upcast()); 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 // https://immersive-web.github.io/webxr/#primary-action
let source = self.input_sources.find(input); let source = self.input_sources.find(input);
let atom_index = if kind == SelectKind::Squeeze { 1 } else { 0 };
if let Some(source) = source { if let Some(source) = source {
let frame = XRFrame::new(&self.global(), self, frame); let frame = XRFrame::new(&self.global(), self, frame);
frame.set_active(true); frame.set_active(true);
if kind == SelectEvent::Start { if ty == SelectEvent::Start {
let event = XRInputSourceEvent::new( let event = XRInputSourceEvent::new(
&self.global(), &self.global(),
atom!("selectstart"), START_ATOMS[atom_index].clone(),
false, false,
false, false,
&frame, &frame,
@ -235,10 +242,10 @@ impl XRSession {
); );
event.upcast::<Event>().fire(self.upcast()); event.upcast::<Event>().fire(self.upcast());
} else { } else {
if kind == SelectEvent::Select { if ty == SelectEvent::Select {
let event = XRInputSourceEvent::new( let event = XRInputSourceEvent::new(
&self.global(), &self.global(),
atom!("select"), EVENT_ATOMS[atom_index].clone(),
false, false,
false, false,
&frame, &frame,
@ -248,7 +255,7 @@ impl XRSession {
} }
let event = XRInputSourceEvent::new( let event = XRInputSourceEvent::new(
&self.global(), &self.global(),
atom!("selectend"), END_ATOMS[atom_index].clone(),
false, false,
false, false,
&frame, &frame,
@ -353,6 +360,15 @@ impl XRSessionMethods for XRSession {
/// https://immersive-web.github.io/webxr/#eventdef-xrsession-selectend /// https://immersive-web.github.io/webxr/#eventdef-xrsession-selectend
event_handler!(selectend, GetOnselectend, SetOnselectend); 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 /// https://immersive-web.github.io/webxr/#eventdef-xrsession-visibilitychange
event_handler!( event_handler!(
visibilitychange, visibilitychange,

View file

@ -169,13 +169,3 @@
[WebGLRenderingContext includes WebGLRenderingContextBase: member names are unique] [WebGLRenderingContext includes WebGLRenderingContextBase: member names are unique]
expected: FAIL expected: FAIL
[XRSession interface: attribute onsqueeze]
expected: FAIL
[XRSession interface: attribute onsqueezestart]
expected: FAIL
[XRSession interface: attribute onsqueezeend]
expected: FAIL