Remove platform gesture detectors
diff --git a/sky/services/engine/input_event.mojom b/sky/services/engine/input_event.mojom
index 2784a6a..d590388 100644
--- a/sky/services/engine/input_event.mojom
+++ b/sky/services/engine/input_event.mojom
@@ -11,15 +11,6 @@
POINTER_DOWN,
POINTER_MOVE,
POINTER_UP,
- GESTURE_FLING_CANCEL,
- GESTURE_FLING_START,
- GESTURE_LONG_PRESS,
- GESTURE_SCROLL_BEGIN,
- GESTURE_SCROLL_END,
- GESTURE_SCROLL_UPDATE,
- GESTURE_SHOW_PRESS,
- GESTURE_TAP,
- GESTURE_TAP_DOWN,
BACK,
};
@@ -47,21 +38,10 @@
float tilt;
};
-struct GestureData {
- int32 primary_pointer;
- float x;
- float y;
- float dx;
- float dy;
- float velocityX;
- float velocityY;
-};
-
// TODO(abarth): Should we have a malloc-free way of creating an input event
// message? What we have now could stress out the Android Java GC.
struct InputEvent {
EventType type;
int64 time_stamp;
PointerData? pointer_data;
- GestureData? gesture_data;
};
diff --git a/sky/shell/BUILD.gn b/sky/shell/BUILD.gn
index 5582777..57e73b4 100644
--- a/sky/shell/BUILD.gn
+++ b/sky/shell/BUILD.gn
@@ -128,7 +128,6 @@
android_library("java") {
java_files = [
- "android/org/domokit/sky/shell/GestureProvider.java",
"android/org/domokit/sky/shell/PlatformServiceProvider.java",
"android/org/domokit/sky/shell/PlatformViewAndroid.java",
"android/org/domokit/sky/shell/ResourceCleaner.java",
diff --git a/sky/shell/android/org/domokit/sky/shell/GestureProvider.java b/sky/shell/android/org/domokit/sky/shell/GestureProvider.java
deleted file mode 100644
index f9e29e9..0000000
--- a/sky/shell/android/org/domokit/sky/shell/GestureProvider.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.domokit.sky.shell;
-
-import android.content.Context;
-import android.view.GestureDetector;
-import android.view.MotionEvent;
-
-import org.chromium.mojom.sky.EventType;
-import org.chromium.mojom.sky.GestureData;
-import org.chromium.mojom.sky.InputEvent;
-
-/**
- * Knows how to drive a GestureDetector to turn MotionEvents into Sky's
- * InputEvents. Seems like this should not be needed. That there must exist
- * some Android class to do most of this work for us?
- */
-public class GestureProvider implements GestureDetector.OnGestureListener {
- private static final String TAG = "GestureProvider";
-
- /**
- * Callback interface
- */
- public interface OnGestureListener {
- void onGestureEvent(InputEvent e);
- }
-
- private OnGestureListener mListener;
- private GestureDetector mDetector;
- private boolean mScrolling;
- private boolean mFlinging;
-
- public GestureProvider(Context context, OnGestureListener listener) {
- mListener = listener;
- mDetector = new GestureDetector(context, this);
- }
-
- private InputEvent createGestureEvent(MotionEvent event) {
- int pointerIndex = event.getActionIndex();
- GestureData gestureData = new GestureData();
- gestureData.primaryPointer = event.getPointerId(pointerIndex);
- gestureData.x = event.getX(pointerIndex);
- gestureData.y = event.getY(pointerIndex);
- InputEvent inputEvent = new InputEvent();
- inputEvent.timeStamp = event.getEventTime();
- inputEvent.gestureData = gestureData;
- return inputEvent;
- }
-
- public void onTouchEvent(MotionEvent event) {
- // TODO(eseidel): I am not confident that these stops are correct.
- int maskedAction = event.getActionMasked();
- if (mScrolling && maskedAction == MotionEvent.ACTION_UP) {
- mScrolling = false;
- InputEvent inputEvent = createGestureEvent(event);
- inputEvent.type = EventType.GESTURE_SCROLL_END;
- mListener.onGestureEvent(inputEvent);
- }
-
- if (mFlinging && maskedAction == MotionEvent.ACTION_DOWN) {
- mFlinging = false;
- InputEvent inputEvent = createGestureEvent(event);
- inputEvent.type = EventType.GESTURE_FLING_CANCEL;
- mListener.onGestureEvent(inputEvent);
- }
-
- mDetector.onTouchEvent(event);
- }
-
- @Override
- public boolean onDown(MotionEvent event) {
- InputEvent inputEvent = createGestureEvent(event);
- inputEvent.type = EventType.GESTURE_TAP_DOWN;
- mListener.onGestureEvent(inputEvent);
- return true;
- }
-
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2,
- float velocityX, float velocityY) {
- mFlinging = true;
-
- // Use the first event as a scroll start (for the target hit-test)
- InputEvent inputEvent = createGestureEvent(e1);
- inputEvent.gestureData.velocityX = velocityX;
- inputEvent.gestureData.velocityY = velocityY;
- inputEvent.type = EventType.GESTURE_FLING_START;
-
- mListener.onGestureEvent(inputEvent);
- return true;
- }
-
- @Override
- public void onLongPress(MotionEvent event) {
- InputEvent inputEvent = createGestureEvent(event);
- inputEvent.type = EventType.GESTURE_LONG_PRESS;
- mListener.onGestureEvent(inputEvent);
- }
-
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
- // Use the first event as a scroll start (for the target hit-test)
- InputEvent inputEvent = createGestureEvent(e1);
- inputEvent.gestureData.dx = distanceX;
- inputEvent.gestureData.dy = -distanceY;
-
- // If we haven't started scrolling, send a scroll_begin.
- if (!mScrolling) {
- mScrolling = true;
- inputEvent.type = EventType.GESTURE_SCROLL_BEGIN;
- mListener.onGestureEvent(inputEvent);
- }
-
- inputEvent.type = EventType.GESTURE_SCROLL_UPDATE;
- mListener.onGestureEvent(inputEvent);
- return true;
- }
-
- @Override
- public void onShowPress(MotionEvent event) {
- InputEvent inputEvent = createGestureEvent(event);
- inputEvent.type = EventType.GESTURE_SHOW_PRESS;
- mListener.onGestureEvent(inputEvent);
- }
-
- @Override
- public boolean onSingleTapUp(MotionEvent event) {
- InputEvent inputEvent = createGestureEvent(event);
- inputEvent.type = EventType.GESTURE_TAP;
- mListener.onGestureEvent(inputEvent);
- return true;
- }
-}
\ No newline at end of file
diff --git a/sky/shell/android/org/domokit/sky/shell/PlatformViewAndroid.java b/sky/shell/android/org/domokit/sky/shell/PlatformViewAndroid.java
index 76d0a2a..3f1d511 100644
--- a/sky/shell/android/org/domokit/sky/shell/PlatformViewAndroid.java
+++ b/sky/shell/android/org/domokit/sky/shell/PlatformViewAndroid.java
@@ -32,14 +32,12 @@
* A view containing Sky
*/
@JNINamespace("sky::shell")
-public class PlatformViewAndroid extends SurfaceView
- implements GestureProvider.OnGestureListener {
+public class PlatformViewAndroid extends SurfaceView {
private static final String TAG = "PlatformViewAndroid";
private long mNativePlatformView;
private SkyEngine.Proxy mSkyEngine;
private final SurfaceHolder.Callback mSurfaceCallback;
- private GestureProvider mGestureProvider;
private final EdgeDims mPadding;
private final KeyboardServiceState mKeyboardState;
@@ -96,8 +94,6 @@
};
getHolder().addCallback(mSurfaceCallback);
- mGestureProvider = new GestureProvider(context, this);
-
// TODO(eseidel): We need per-view services!
mKeyboardState = new KeyboardServiceState(this);
KeyboardServiceImpl.setViewState(mKeyboardState);
@@ -184,7 +180,6 @@
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
requestUnbufferedDispatch(event);
}
- mGestureProvider.onTouchEvent(event);
// TODO(abarth): Rather than unpacking these events here, we should
// probably send them in one packet to the engine.
@@ -207,11 +202,6 @@
return true;
}
- @Override
- public void onGestureEvent(InputEvent event) {
- mSkyEngine.onInputEvent(event);
- }
-
private void attach() {
Core core = CoreImpl.getInstance();
Pair<SkyEngine.Proxy, InterfaceRequest<SkyEngine>> result =
diff --git a/sky/shell/ios/sky_surface.mm b/sky/shell/ios/sky_surface.mm
index a0c78d6..9264ebb 100644
--- a/sky/shell/ios/sky_surface.mm
+++ b/sky/shell/ios/sky_surface.mm
@@ -43,23 +43,6 @@
return base::TimeDelta::FromSecondsD(interval).InMilliseconds();
}
-static sky::InputEventPtr BasicInputEventFromRecognizer(
- sky::EventType type,
- UIGestureRecognizer* recognizer) {
- auto input = sky::InputEvent::New();
- input->type = type;
- input->time_stamp = InputEventTimestampFromNSTimeInterval(
- CACurrentMediaTime());
-
- input->gesture_data = sky::GestureData::New();
-
- CGPoint windowCoordinates = [recognizer locationInView:recognizer.view];
- const CGFloat scale = [UIScreen mainScreen].scale;
- input->gesture_data->x = windowCoordinates.x * scale;
- input->gesture_data->y = windowCoordinates.y * scale;
- return input.Pass();
-}
-
@implementation SkySurface {
BOOL _platformViewInitialized;
CGPoint _lastScrollTranslation;
@@ -77,7 +60,6 @@
if (self) {
_shell_view.reset(shellView);
self.multipleTouchEnabled = YES;
- [self installGestureRecognizers];
}
return self;
}
@@ -260,119 +242,6 @@
[self dispatchTouches:touches phase:UITouchPhaseCancelled];
}
-#pragma mark - Gesture Recognizers
-
--(void) installGestureRecognizers {
- // For:
- // GESTURE_FLING_CANCEL
- // GESTURE_FLING_START
- UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]
- initWithTarget:self action:@selector(onFling:)];
- swipe.cancelsTouchesInView = NO;
- [self addGestureRecognizer: swipe];
- [swipe release];
-
- // For:
- // GESTURE_LONG_PRESS
- // GESTURE_SHOW_PRESS
- UILongPressGestureRecognizer *longPress =
- [[UILongPressGestureRecognizer alloc]
- initWithTarget:self action:@selector(onLongPress:)];
- longPress.cancelsTouchesInView = NO;
- [self addGestureRecognizer: longPress];
- [longPress release];
-
- // For:
- // GESTURE_SCROLL_BEGIN
- // GESTURE_SCROLL_END
- // GESTURE_SCROLL_UPDATE
- UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]
- initWithTarget:self action:@selector(onScroll:)];
- pan.cancelsTouchesInView = NO;
- [self addGestureRecognizer: pan];
- [pan release];
-
- // For:
- // GESTURE_TAP
- // GESTURE_TAP_DOWN
- UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
- initWithTarget:self action:@selector(onTap:)];
- tap.cancelsTouchesInView = NO;
- [self addGestureRecognizer: tap];
- [tap release];
-}
-
--(void) onFling:(UISwipeGestureRecognizer *) recognizer {
- // Swipes are discrete gestures already. So there is no equivalent to a cancel
- if (recognizer.state != UIGestureRecognizerStateEnded) {
- return;
- }
-
- auto input = BasicInputEventFromRecognizer(
- sky::EVENT_TYPE_GESTURE_FLING_START, recognizer);
- _sky_engine->OnInputEvent(input.Pass());
-}
-
--(void) onLongPress:(UILongPressGestureRecognizer *) recognizer {
- if (recognizer.state != UIGestureRecognizerStateEnded) {
- return;
- }
-
- auto input = BasicInputEventFromRecognizer(sky::EVENT_TYPE_GESTURE_LONG_PRESS,
- recognizer);
- _sky_engine->OnInputEvent(input.Pass());
-}
-
--(void) onScroll:(UIPanGestureRecognizer *) recognizer {
- sky::EventType type = sky::EVENT_TYPE_UNKNOWN;
- switch (recognizer.state) {
- case UIGestureRecognizerStateBegan:
- _lastScrollTranslation = CGPointZero;
- type = sky::EVENT_TYPE_GESTURE_SCROLL_BEGIN;
- break;
- case UIGestureRecognizerStateChanged:
- type = sky::EVENT_TYPE_GESTURE_SCROLL_UPDATE;
- break;
- case UIGestureRecognizerStateEnded:
- case UIGestureRecognizerStateCancelled:
- case UIGestureRecognizerStateFailed:
- type = sky::EVENT_TYPE_GESTURE_SCROLL_END;
- break;
- default:
- break;
- }
-
- if (type == sky::EVENT_TYPE_UNKNOWN) {
- return;
- }
-
- auto input = BasicInputEventFromRecognizer(type, recognizer);
- auto scale = [UIScreen mainScreen].scale;
- auto translation = [recognizer translationInView: self];
- auto velocity = [recognizer velocityInView: self];
-
- input->gesture_data->dx = (translation.x - _lastScrollTranslation.x) * scale;
- input->gesture_data->dy = (translation.y - _lastScrollTranslation.y) * scale;
-
- _lastScrollTranslation = translation;
-
- input->gesture_data->velocityX = velocity.x * scale;
- input->gesture_data->velocityY = velocity.y * scale;
-
- _sky_engine->OnInputEvent(input.Pass());
-}
-
--(void) onTap:(UITapGestureRecognizer *) recognizer {
-
- if (recognizer.state != UIGestureRecognizerStateEnded) {
- return;
- }
-
- auto input = BasicInputEventFromRecognizer(sky::EVENT_TYPE_GESTURE_TAP,
- recognizer);
- _sky_engine->OnInputEvent(input.Pass());
-}
-
#pragma mark - Misc.
+ (Class)layerClass {
diff --git a/sky/shell/ui/input_event_converter.cc b/sky/shell/ui/input_event_converter.cc
index 1e81bb1..b8ed475 100644
--- a/sky/shell/ui/input_event_converter.cc
+++ b/sky/shell/ui/input_event_converter.cc
@@ -49,61 +49,6 @@
return web_event.Pass();
}
-scoped_ptr<blink::WebInputEvent> BuildWebGestureEvent(
- const InputEventPtr& event, float device_pixel_ratio) {
- scoped_ptr<blink::WebGestureEvent> web_event(new blink::WebGestureEvent);
-
- web_event->timeStampMS = event->time_stamp;
-
- switch (event->type) {
- case EVENT_TYPE_GESTURE_SCROLL_BEGIN:
- web_event->type = blink::WebInputEvent::GestureScrollBegin;
- break;
- case EVENT_TYPE_GESTURE_SCROLL_END:
- web_event->type = blink::WebInputEvent::GestureScrollEnd;
- break;
- case EVENT_TYPE_GESTURE_SCROLL_UPDATE:
- web_event->type = blink::WebInputEvent::GestureScrollUpdate;
- web_event->data.scrollUpdate.deltaX =
- event->gesture_data->dx / device_pixel_ratio;
- web_event->data.scrollUpdate.deltaY =
- event->gesture_data->dy / device_pixel_ratio;
- break;
- case EVENT_TYPE_GESTURE_FLING_START:
- web_event->type = blink::WebInputEvent::GestureFlingStart;
- web_event->data.flingStart.velocityX =
- event->gesture_data->velocityX / device_pixel_ratio;
- web_event->data.flingStart.velocityY =
- event->gesture_data->velocityY / device_pixel_ratio;
- break;
- case EVENT_TYPE_GESTURE_FLING_CANCEL:
- web_event->type = blink::WebInputEvent::GestureFlingCancel;
- break;
- case EVENT_TYPE_GESTURE_LONG_PRESS:
- web_event->type = blink::WebInputEvent::GestureLongPress;
- break;
- case EVENT_TYPE_GESTURE_SHOW_PRESS:
- web_event->type = blink::WebInputEvent::GestureShowPress;
- break;
- case EVENT_TYPE_GESTURE_TAP:
- web_event->type = blink::WebInputEvent::GestureTap;
- break;
- case EVENT_TYPE_GESTURE_TAP_DOWN:
- web_event->type = blink::WebInputEvent::GestureTapDown;
- break;
- default:
- break;
- }
-
- if (event->gesture_data) {
- web_event->primaryPointer = event->gesture_data->primary_pointer;
- web_event->x = event->gesture_data->x / device_pixel_ratio;
- web_event->y = event->gesture_data->y / device_pixel_ratio;
- }
-
- return web_event.Pass();
-}
-
scoped_ptr<blink::WebInputEvent> BuildWebBackEvent(const InputEventPtr& event) {
scoped_ptr<blink::WebInputEvent> web_event(blink::WebInputEvent::create());
web_event->type = blink::WebInputEvent::Back;
@@ -120,16 +65,6 @@
case EVENT_TYPE_POINTER_MOVE:
case EVENT_TYPE_POINTER_CANCEL:
return BuildWebPointerEvent(event, device_pixel_ratio);
- case EVENT_TYPE_GESTURE_FLING_CANCEL:
- case EVENT_TYPE_GESTURE_FLING_START:
- case EVENT_TYPE_GESTURE_LONG_PRESS:
- case EVENT_TYPE_GESTURE_SCROLL_BEGIN:
- case EVENT_TYPE_GESTURE_SCROLL_END:
- case EVENT_TYPE_GESTURE_SCROLL_UPDATE:
- case EVENT_TYPE_GESTURE_SHOW_PRESS:
- case EVENT_TYPE_GESTURE_TAP:
- case EVENT_TYPE_GESTURE_TAP_DOWN:
- return BuildWebGestureEvent(event, device_pixel_ratio);
case EVENT_TYPE_BACK:
return BuildWebBackEvent(event);
case EVENT_TYPE_UNKNOWN: