am b1c43c32: Merge "b/4116658 Fix the jumpy scrolling with some flash site." into honeycomb-mr1

* commit 'b1c43c32f518240fd75963ffc8e82cb13e036390':
  b/4116658 Fix the jumpy scrolling with some flash site.
This commit is contained in:
Huahui Wu
2011-03-17 18:11:04 -07:00
committed by Android Git Automerger
2 changed files with 25 additions and 9 deletions

View File

@@ -1672,6 +1672,7 @@ public class WebView extends AbsoluteLayout
mDrawHistory = true;
mHistoryPicture = p;
mScrollX = sx;
mScrollY = sy;
mZoomManager.restoreZoomState(b);
@@ -5473,7 +5474,6 @@ public class WebView extends AbsoluteLayout
private boolean handleTouchEventCommon(MotionEvent ev, int action, int x, int y) {
long eventTime = ev.getEventTime();
// Due to the touch screen edge effect, a touch closer to the edge
// always snapped to the edge. As getViewWidth() can be different from
// getWidth() due to the scrollbar, adjusting the point to match
@@ -5577,6 +5577,8 @@ public class WebView extends AbsoluteLayout
ted.mIds[0] = ev.getPointerId(0);
ted.mPoints = new Point[1];
ted.mPoints[0] = new Point(contentX, contentY);
ted.mPointsInView = new Point[1];
ted.mPointsInView[0] = new Point(x, y);
ted.mMetaState = ev.getMetaState();
ted.mReprocess = mDeferTouchProcess;
ted.mNativeLayer = nativeScrollableLayer(
@@ -5624,6 +5626,8 @@ public class WebView extends AbsoluteLayout
ted.mIds[0] = ev.getPointerId(0);
ted.mPoints = new Point[1];
ted.mPoints[0] = new Point(contentX, contentY);
ted.mPointsInView = new Point[1];
ted.mPointsInView[0] = new Point(x, y);
ted.mMetaState = ev.getMetaState();
ted.mReprocess = mDeferTouchProcess;
ted.mNativeLayer = mScrollingLayer;
@@ -5806,6 +5810,8 @@ public class WebView extends AbsoluteLayout
ted.mAction = action;
ted.mPoints = new Point[1];
ted.mPoints[0] = new Point(contentX, contentY);
ted.mPointsInView = new Point[1];
ted.mPointsInView[0] = new Point(x, y);
ted.mMetaState = ev.getMetaState();
ted.mReprocess = mDeferTouchProcess;
ted.mNativeLayer = mScrollingLayer;
@@ -5828,6 +5834,8 @@ public class WebView extends AbsoluteLayout
ted.mAction = WebViewCore.ACTION_DOUBLETAP;
ted.mPoints = new Point[1];
ted.mPoints[0] = new Point(contentX, contentY);
ted.mPointsInView = new Point[1];
ted.mPointsInView[0] = new Point(x, y);
ted.mMetaState = ev.getMetaState();
ted.mReprocess = mDeferTouchProcess;
ted.mNativeLayer = nativeScrollableLayer(
@@ -5964,11 +5972,13 @@ public class WebView extends AbsoluteLayout
final int count = ev.getPointerCount();
ted.mIds = new int[count];
ted.mPoints = new Point[count];
ted.mPointsInView = new Point[count];
for (int c = 0; c < count; c++) {
ted.mIds[c] = ev.getPointerId(c);
int x = viewToContentX((int) ev.getX(c) + mScrollX);
int y = viewToContentY((int) ev.getY(c) + mScrollY);
ted.mPoints[c] = new Point(x, y);
ted.mPointsInView[c] = new Point((int) ev.getX(c), (int) ev.getY(c));
}
if (ted.mAction == MotionEvent.ACTION_POINTER_DOWN
|| ted.mAction == MotionEvent.ACTION_POINTER_UP) {
@@ -6053,6 +6063,10 @@ public class WebView extends AbsoluteLayout
ted.mIds[0] = 0;
ted.mPoints = new Point[1];
ted.mPoints[0] = new Point(x, y);
ted.mPointsInView = new Point[1];
int viewX = contentToViewX(x) - mScrollX;
int viewY = contentToViewY(y) - mScrollY;
ted.mPointsInView[0] = new Point(viewX, viewY);
ted.mAction = MotionEvent.ACTION_CANCEL;
ted.mNativeLayer = nativeScrollableLayer(
x, y, ted.mNativeLayerRect, null);
@@ -7441,16 +7455,15 @@ public class WebView extends AbsoluteLayout
// Following is for single touch.
switch (ted.mAction) {
case MotionEvent.ACTION_DOWN:
mLastDeferTouchX = contentToViewX(ted.mPoints[0].x)
- mScrollX;
mLastDeferTouchY = contentToViewY(ted.mPoints[0].y)
- mScrollY;
mLastDeferTouchX = ted.mPointsInView[0].x;
mLastDeferTouchY = ted.mPointsInView[0].y;
mDeferTouchMode = TOUCH_INIT_MODE;
break;
case MotionEvent.ACTION_MOVE: {
// no snapping in defer process
int x = contentToViewX(ted.mPoints[0].x) - mScrollX;
int y = contentToViewY(ted.mPoints[0].y) - mScrollY;
int x = ted.mPointsInView[0].x;
int y = ted.mPointsInView[0].y;
if (mDeferTouchMode != TOUCH_DRAG_MODE) {
mDeferTouchMode = TOUCH_DRAG_MODE;
mLastDeferTouchX = x;
@@ -7484,8 +7497,8 @@ public class WebView extends AbsoluteLayout
break;
case WebViewCore.ACTION_DOUBLETAP:
// doDoubleTap() needs mLastTouchX/Y as anchor
mLastTouchX = contentToViewX(ted.mPoints[0].x) - mScrollX;
mLastTouchY = contentToViewY(ted.mPoints[0].y) - mScrollY;
mLastDeferTouchX = ted.mPointsInView[0].x;
mLastDeferTouchY = ted.mPointsInView[0].y;
mZoomManager.handleDoubleTap(mLastTouchX, mLastTouchY);
mDeferTouchMode = TOUCH_DONE_MODE;
break;
@@ -7609,6 +7622,8 @@ public class WebView extends AbsoluteLayout
ted.mPoints = new Point[1];
ted.mPoints[0] = new Point(viewToContentX(mLastTouchX + mScrollX),
viewToContentY(mLastTouchY + mScrollY));
ted.mPointsInView = new Point[1];
ted.mPointsInView[0] = new Point(mLastTouchX, mLastTouchY);
// metaState for long press is tricky. Should it be the
// state when the press started or when the press was
// released? Or some intermediary key state? For

View File

@@ -831,6 +831,7 @@ final class WebViewCore {
int mAction;
int[] mIds; // Ids of the touch points
Point[] mPoints;
Point[] mPointsInView; // the point coordinates in view axis.
int mActionIndex; // Associated pointer index for ACTION_POINTER_DOWN/UP
int mMetaState;
boolean mReprocess;