mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Add support for squeeze events
This commit is contained in:
parent
10a63cc9d4
commit
87f729731a
5 changed files with 31 additions and 19 deletions
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue