Chromium Code Reviews| 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); |
| } |