aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2015-10-22 16:15:26 -0700
committerMatt Brubeck <mbrubeck@limpet.net>2015-11-03 08:56:34 -0800
commitef93650db944c0865da9f0c0b198dbc89fc46bd4 (patch)
treec175a4ab6f72edde8426d1b1022ee9de32c6acda /components/script/script_task.rs
parent5c11c88e92ccbc3013501096d5625778774c9fee (diff)
downloadservo-ef93650db944c0865da9f0c0b198dbc89fc46bd4.tar.gz
servo-ef93650db944c0865da9f0c0b198dbc89fc46bd4.zip
Handle multi-touch events from glutin
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs50
1 files changed, 25 insertions, 25 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 4939a58e086..1fae6cda718 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -78,12 +78,12 @@ use profile_traits::mem::{self, OpaqueSender, Report, ReportKind, ReportsChan};
use profile_traits::time::{self, ProfilerCategory, profile};
use script_traits::CompositorEvent::{ClickEvent, ResizeEvent};
use script_traits::CompositorEvent::{KeyEvent, MouseMoveEvent};
-use script_traits::CompositorEvent::{MouseDownEvent, MouseUpEvent};
-use script_traits::CompositorEvent::{TouchDownEvent, TouchMoveEvent, TouchUpEvent};
+use script_traits::CompositorEvent::{MouseDownEvent, MouseUpEvent, TouchEvent};
use script_traits::{CompositorEvent, ConstellationControlMsg};
use script_traits::{InitialScriptState, MouseButton, NewLayoutInfo};
use script_traits::{OpaqueScriptLayoutChannel, ScriptState, ScriptTaskFactory};
use script_traits::{TimerEvent, TimerEventChan, TimerEventRequest, TimerSource};
+use script_traits::{TouchEventType, TouchId};
use std::any::Any;
use std::borrow::ToOwned;
use std::cell::{Cell, RefCell};
@@ -1764,27 +1764,27 @@ impl ScriptTask {
std_mem::swap(&mut *self.mouse_over_targets.borrow_mut(), &mut *mouse_over_targets);
}
- TouchDownEvent(identifier, point) => {
- let default_action_allowed =
- self.handle_touch_event(pipeline_id, identifier, point, "touchstart");
- if default_action_allowed {
- // TODO: Wait to see if preventDefault is called on the first touchmove event.
- self.compositor.borrow_mut().send(ScriptToCompositorMsg::TouchEventProcessed(
- EventResult::DefaultAllowed)).unwrap();
- } else {
- self.compositor.borrow_mut().send(ScriptToCompositorMsg::TouchEventProcessed(
- EventResult::DefaultPrevented)).unwrap();
+ TouchEvent(event_type, identifier, point) => {
+ let handled = self.handle_touch_event(pipeline_id, event_type, identifier, point);
+ match event_type {
+ TouchEventType::Down => {
+ if handled {
+ // TODO: Wait to see if preventDefault is called on the first touchmove event.
+ self.compositor.borrow_mut()
+ .send(ScriptToCompositorMsg::TouchEventProcessed(
+ EventResult::DefaultAllowed)).unwrap();
+ } else {
+ self.compositor.borrow_mut()
+ .send(ScriptToCompositorMsg::TouchEventProcessed(
+ EventResult::DefaultPrevented)).unwrap();
+ }
+ }
+ _ => {
+ // TODO: Calling preventDefault on a touchup event should prevent clicks.
+ }
}
}
- TouchMoveEvent(identifier, point) => {
- self.handle_touch_event(pipeline_id, identifier, point, "touchmove");
- }
-
- TouchUpEvent(identifier, point) => {
- self.handle_touch_event(pipeline_id, identifier, point, "touchend");
- }
-
KeyEvent(key, state, modifiers) => {
let page = get_page(&self.root_page(), pipeline_id);
let document = page.document();
@@ -1806,13 +1806,13 @@ impl ScriptTask {
fn handle_touch_event(&self,
pipeline_id: PipelineId,
- identifier: i32,
- point: Point2D<f32>,
- event_name: &str) -> bool {
+ event_type: TouchEventType,
+ identifier: TouchId,
+ point: Point2D<f32>)
+ -> bool {
let page = get_page(&self.root_page(), pipeline_id);
let document = page.document();
- document.r().handle_touch_event(self.js_runtime.rt(), identifier, point,
- event_name.to_owned())
+ document.r().handle_touch_event(self.js_runtime.rt(), event_type, identifier, point)
}
/// https://html.spec.whatwg.org/multipage/#navigating-across-documents