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

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 252623002: Move the event offsetting logic from ContentView to CVC (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nit fixes Created 6 years, 8 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
« no previous file with comments | « content/public/android/java/src/org/chromium/content/browser/ContentView.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index b3ac7613a9e1d90c3d7a49b5a1f5d1ef8b214361..e59d6f86e7e68fb30a181e4825eb73809f665517 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -439,6 +439,10 @@ public class ContentViewCore
// if there is no render process.
public static final int INVALID_RENDER_PROCESS_PID = 0;
+ // Offsets for the events that passes through this ContentViewCore.
+ private float mCurrentTouchOffsetX;
+ private float mCurrentTouchOffsetY;
+
/**
* Constructs a new ContentViewCore. Embedders must call initialize() after constructing
* a ContentViewCore and before using it.
@@ -1186,6 +1190,8 @@ public class ContentViewCore
* @see View#onTouchEvent(MotionEvent)
*/
public boolean onTouchEvent(MotionEvent event) {
+ MotionEvent offset = createOffsetMotionEvent(event);
+
cancelRequestToScrollFocusedEditableNodeIntoView();
if (!mRequestedVSyncForInput) {
@@ -1193,7 +1199,7 @@ public class ContentViewCore
addVSyncSubscriber();
}
- final int eventAction = event.getActionMasked();
+ final int eventAction = offset.getActionMasked();
// Only these actions have any effect on gesture detection. Other
// actions have no corresponding WebTouchEvent type and may confuse the
@@ -1208,15 +1214,17 @@ public class ContentViewCore
}
if (mNativeContentViewCore == 0) return false;
- final int pointerCount = event.getPointerCount();
- return nativeOnTouchEvent(mNativeContentViewCore, event,
- event.getEventTime(), eventAction,
- pointerCount, event.getHistorySize(), event.getActionIndex(),
- event.getX(), event.getY(),
- pointerCount > 1 ? event.getX(1) : 0,
- pointerCount > 1 ? event.getY(1) : 0,
- event.getPointerId(0), pointerCount > 1 ? event.getPointerId(1) : -1,
- event.getTouchMajor(), pointerCount > 1 ? event.getTouchMajor(1) : 0);
+ final int pointerCount = offset.getPointerCount();
+ boolean consumed = nativeOnTouchEvent(mNativeContentViewCore, offset,
+ offset.getEventTime(), eventAction,
+ pointerCount, offset.getHistorySize(), offset.getActionIndex(),
+ offset.getX(), offset.getY(),
+ pointerCount > 1 ? offset.getX(1) : 0,
+ pointerCount > 1 ? offset.getY(1) : 0,
+ offset.getPointerId(0), pointerCount > 1 ? offset.getPointerId(1) : -1,
+ offset.getTouchMajor(), pointerCount > 1 ? offset.getTouchMajor(1) : 0);
+ offset.recycle();
+ return consumed;
}
public void setIgnoreRemainingTouchEvents() {
@@ -1709,23 +1717,25 @@ public class ContentViewCore
*/
public boolean onHoverEvent(MotionEvent event) {
TraceEvent.begin("onHoverEvent");
+ MotionEvent offset = createOffsetMotionEvent(event);
if (mBrowserAccessibilityManager != null) {
- return mBrowserAccessibilityManager.onHoverEvent(event);
+ return mBrowserAccessibilityManager.onHoverEvent(offset);
}
// Work around Android bug where the x, y coordinates of a hover exit
// event are incorrect when touch exploration is on.
- if (mTouchExplorationEnabled && event.getAction() == MotionEvent.ACTION_HOVER_EXIT) {
+ if (mTouchExplorationEnabled && offset.getAction() == MotionEvent.ACTION_HOVER_EXIT) {
return true;
}
mContainerView.removeCallbacks(mFakeMouseMoveRunnable);
if (mNativeContentViewCore != 0) {
- nativeSendMouseMoveEvent(mNativeContentViewCore, event.getEventTime(),
- event.getX(), event.getY());
+ nativeSendMouseMoveEvent(mNativeContentViewCore, offset.getEventTime(),
+ offset.getX(), offset.getY());
}
TraceEvent.end("onHoverEvent");
+ offset.recycle();
return true;
}
@@ -1758,6 +1768,23 @@ public class ContentViewCore
}
/**
+ * Sets the current amount to offset incoming touch events by. This is used to handle content
+ * moving and not lining up properly with the android input system.
+ * @param dx The X offset in pixels to shift touch events.
+ * @param dy The Y offset in pixels to shift touch events.
+ */
+ public void setCurrentMotionEventOffsets(float dx, float dy) {
+ mCurrentTouchOffsetX = dx;
+ mCurrentTouchOffsetY = dy;
+ }
+
+ private MotionEvent createOffsetMotionEvent(MotionEvent src) {
+ MotionEvent dst = MotionEvent.obtain(src);
+ dst.offsetLocation(mCurrentTouchOffsetX, mCurrentTouchOffsetY);
+ return dst;
+ }
+
+ /**
* @see View#scrollBy(int, int)
* Currently the ContentView scrolling happens in the native side. In
* the Java view system, it is always pinned at (0, 0). scrollBy() and scrollTo()
« no previous file with comments | « content/public/android/java/src/org/chromium/content/browser/ContentView.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698