Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Unified Diff: ui/android/java/src/org/chromium/ui/base/EventForwarder.java

Issue 2770613002: Forward GenericMotionEvent to EventForwarder (Closed)
Patch Set: fix tests Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/android/java/src/org/chromium/ui/base/EventForwarder.java
diff --git a/ui/android/java/src/org/chromium/ui/base/EventForwarder.java b/ui/android/java/src/org/chromium/ui/base/EventForwarder.java
index ee52e3c37f6ee49b8cea47d6798c2a2ea8400210..85b6428f78260c4276ab08c8d7f12399d7034dad 100644
--- a/ui/android/java/src/org/chromium/ui/base/EventForwarder.java
+++ b/ui/android/java/src/org/chromium/ui/base/EventForwarder.java
@@ -7,10 +7,12 @@ package org.chromium.ui.base;
import android.annotation.TargetApi;
import android.os.Build;
import android.view.MotionEvent;
+import android.view.View;
import org.chromium.base.TraceEvent;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
+import org.chromium.ui.input.JoystickScrollProvider;
/**
* Class used to forward view, input events down to native.
@@ -23,6 +25,9 @@ public class EventForwarder {
private float mCurrentTouchOffsetX;
private float mCurrentTouchOffsetY;
+ // Provides smooth gamepad joystick-driven scrolling.
+ private JoystickScrollProvider mJoystickScrollProvider;
+
@CalledByNative
private static EventForwarder create(long nativeEventForwarder) {
return new EventForwarder(nativeEventForwarder);
@@ -35,6 +40,7 @@ public class EventForwarder {
@CalledByNative
private void destroy() {
mNativeEventForwarder = 0;
+ mJoystickScrollProvider = null;
}
/**
@@ -181,6 +187,47 @@ public class EventForwarder {
orientation, tilt, actionButton, buttonState, metaState, toolType);
}
+ /**
+ * Handles motion event of type {@code SOURCE_CLASS_POINTER}.
+ *
+ * @param event {@link MotionEvent} instance.
+ * @param event scrollFactor scale factor used to convert wheel tick to pixel.
+ */
+ public boolean onPointerDeviceEvent(MotionEvent event, float scrollFactor) {
+ switch (event.getActionMasked()) {
+ case MotionEvent.ACTION_SCROLL:
+ assert mNativeEventForwarder != 0;
+
+ nativeOnMouseWheelEvent(mNativeEventForwarder, event.getEventTime(), event.getX(),
+ event.getY(), event.getAxisValue(MotionEvent.AXIS_HSCROLL),
+ event.getAxisValue(MotionEvent.AXIS_VSCROLL), scrollFactor);
+ return true;
+ case MotionEvent.ACTION_BUTTON_PRESS:
+ case MotionEvent.ACTION_BUTTON_RELEASE:
+ // TODO(mustaq): Should we include MotionEvent.TOOL_TYPE_STYLUS here?
+ // crbug.com/592082
+ if (event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE) return onMouseEvent(event);
+ }
+
+ return false;
+ }
+
+ public JoystickScrollProvider createJoystickScrollProvider(
boliu 2017/03/27 17:44:44 Having JoystickScrollProvider and whatnot in ui ma
Jinsuk Kim 2017/03/27 22:42:06 The motivation is to migrate these input events fl
boliu 2017/03/27 22:54:22 afaict, the dependency (from higher to lower) is c
Jinsuk Kim 2017/03/27 22:59:51 .. wish it had been discussed in the crbug.com/703
Jinsuk Kim 2017/03/27 23:04:24 May I was not clear. I meant that EventForwarder p
boliu 2017/03/27 23:19:17 You can just make onMouseWheelEvent public here th
Jinsuk Kim 2017/03/28 02:40:33 Done. Moved Joystick.+Provider classes back to con
+ View containerView, WindowAndroid windowAndroid) {
+ if (mJoystickScrollProvider != null) return mJoystickScrollProvider;
+ mJoystickScrollProvider = new JoystickScrollProvider(
+ containerView, windowAndroid, new JoystickScrollProvider.ScrollEmulator() {
+ // Joystick scroll is translated to mouse wheel event.
+ @Override
+ public void scroll(long timeMillis, float dx, float dy) {
+ assert mNativeEventForwarder != 0;
+ nativeOnMouseWheelEvent(
+ mNativeEventForwarder, timeMillis, 0, 0, -dx, -dy, 1.0f);
+ }
+ });
+ return mJoystickScrollProvider;
+ }
+
// All touch events (including flings, scrolls etc) accept coordinates in physical pixels.
private native boolean nativeOnTouchEvent(long nativeEventForwarder, MotionEvent event,
long timeMs, int action, int pointerCount, int historySize, int actionIndex, float x0,
@@ -192,4 +239,6 @@ public class EventForwarder {
private native void nativeOnMouseEvent(long nativeEventForwarder, long timeMs, int action,
float x, float y, int pointerId, float pressure, float orientation, float tilt,
int changedButton, int buttonState, int metaState, int toolType);
+ private native void nativeOnMouseWheelEvent(long nativeEventForwarder, long timeMs, float x,
+ float y, float ticksX, float ticksY, float pixelsPerTick);
}
« no previous file with comments | « ui/android/event_forwarder.cc ('k') | ui/android/java/src/org/chromium/ui/input/AnimationIntervalProvider.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698