summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/WebViewClassic.java251
1 files changed, 130 insertions, 121 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index a850379..46c8353 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -1753,6 +1753,15 @@ public class WebView extends AbsoluteLayout
mZoomManager.updateMultiTouchSupport(context);
}
+ // Setters for the Scroll X & Y, without invoking the onScrollChanged etc code paths.
+ final void setScrollXRaw(int scrollX) {
+ mScrollX = scrollX;
+ }
+
+ final void setScrollYRaw(int scrollY) {
+ mScrollY = scrollY;
+ }
+
private void init() {
OnTrimMemoryListener.init(getContext());
sDisableNavcache = nativeDisableNavcache();
@@ -1836,8 +1845,8 @@ public class WebView extends AbsoluteLayout
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setScrollable(isScrollableForAccessibility());
- event.setScrollX(mScrollX);
- event.setScrollY(mScrollY);
+ event.setScrollX(getScrollX());
+ event.setScrollY(getScrollY());
final int convertedContentWidth = contentToViewX(getContentWidth());
final int adjustedViewWidth = getWidth() - mPaddingLeft - mPaddingRight;
event.setMaxScrollX(Math.max(convertedContentWidth - adjustedViewWidth, 0));
@@ -2017,7 +2026,7 @@ public class WebView extends AbsoluteLayout
private int getVisibleTitleHeightImpl() {
// need to restrict mScrollY due to over scroll
- return Math.max(getTitleHeight() - Math.max(0, mScrollY),
+ return Math.max(getTitleHeight() - Math.max(0, getScrollY()),
getOverlappingActionModeHeight());
}
@@ -2370,8 +2379,8 @@ public class WebView extends AbsoluteLayout
}
}).start();
// now update the bundle
- b.putInt("scrollX", mScrollX);
- b.putInt("scrollY", mScrollY);
+ b.putInt("scrollX", getScrollX());
+ b.putInt("scrollY", getScrollY());
mZoomManager.saveZoomState(b);
return true;
}
@@ -2383,8 +2392,8 @@ public class WebView extends AbsoluteLayout
mDrawHistory = true;
mHistoryPicture = p;
- mScrollX = sx;
- mScrollY = sy;
+ setScrollXRaw(sx);
+ setScrollYRaw(sy);
mZoomManager.restoreZoomState(b);
final float scale = mZoomManager.getScale();
mHistoryWidth = Math.round(p.getWidth() * scale);
@@ -2897,7 +2906,7 @@ public class WebView extends AbsoluteLayout
nativeClearCursor(); // start next trackball movement from page edge
if (top) {
// go to the top of the document
- return pinScrollTo(mScrollX, 0, true, 0);
+ return pinScrollTo(getScrollX(), 0, true, 0);
}
// Page up
int h = getHeight();
@@ -2923,7 +2932,7 @@ public class WebView extends AbsoluteLayout
}
nativeClearCursor(); // start next trackball movement from page edge
if (bottom) {
- return pinScrollTo(mScrollX, computeRealVerticalScrollRange(), true, 0);
+ return pinScrollTo(getScrollX(), computeRealVerticalScrollRange(), true, 0);
}
// Page down.
int h = getHeight();
@@ -3100,8 +3109,8 @@ public class WebView extends AbsoluteLayout
if (type == HitTestResult.UNKNOWN_TYPE
|| type == HitTestResult.SRC_ANCHOR_TYPE) {
// Now check to see if it is an image.
- int contentX = viewToContentX(mLastTouchX + mScrollX);
- int contentY = viewToContentY(mLastTouchY + mScrollY);
+ int contentX = viewToContentX(mLastTouchX + getScrollX());
+ int contentY = viewToContentY(mLastTouchY + getScrollY());
String text = nativeImageURI(contentX, contentY);
if (text != null) {
result.setType(type == HitTestResult.UNKNOWN_TYPE ?
@@ -3167,8 +3176,8 @@ public class WebView extends AbsoluteLayout
if (hrefMsg == null) {
return;
}
- int contentX = viewToContentX(mLastTouchX + mScrollX);
- int contentY = viewToContentY(mLastTouchY + mScrollY);
+ int contentX = viewToContentX(mLastTouchX + getScrollX());
+ int contentY = viewToContentY(mLastTouchY + getScrollY());
if (mFocusedNode != null && mFocusedNode.mHitTestX == contentX
&& mFocusedNode.mHitTestY == contentY) {
hrefMsg.getData().putString(FocusNodeHref.URL, mFocusedNode.mLinkUrl);
@@ -3202,8 +3211,8 @@ public class WebView extends AbsoluteLayout
public void requestImageRef(Message msg) {
checkThread();
if (0 == mNativeClass) return; // client isn't initialized
- int contentX = viewToContentX(mLastTouchX + mScrollX);
- int contentY = viewToContentY(mLastTouchY + mScrollY);
+ int contentX = viewToContentX(mLastTouchX + getScrollX());
+ int contentY = viewToContentY(mLastTouchY + getScrollY());
String ref = nativeImageURI(contentX, contentY);
Bundle data = msg.getData();
data.putString("url", ref);
@@ -3425,7 +3434,7 @@ public class WebView extends AbsoluteLayout
// updated when we get out of that mode.
if (!mDrawHistory) {
// repin our scroll, taking into account the new content size
- updateScrollCoordinates(pinLocX(mScrollX), pinLocY(mScrollY));
+ updateScrollCoordinates(pinLocX(getScrollX()), pinLocY(getScrollY()));
if (!mScroller.isFinished()) {
// We are in the middle of a scroll. Repin the final scroll
// position.
@@ -3605,7 +3614,7 @@ public class WebView extends AbsoluteLayout
int range = computeRealHorizontalScrollRange();
// Adjust reported range if overscrolled to compress the scroll bars
- final int scrollX = mScrollX;
+ final int scrollX = getScrollX();
final int overscrollRight = computeMaxScrollX();
if (scrollX < 0) {
range -= scrollX;
@@ -3618,7 +3627,7 @@ public class WebView extends AbsoluteLayout
@Override
protected int computeHorizontalScrollOffset() {
- return Math.max(mScrollX, 0);
+ return Math.max(getScrollX(), 0);
}
private int computeRealVerticalScrollRange() {
@@ -3635,7 +3644,7 @@ public class WebView extends AbsoluteLayout
int range = computeRealVerticalScrollRange();
// Adjust reported range if overscrolled to compress the scroll bars
- final int scrollY = mScrollY;
+ final int scrollY = getScrollY();
final int overscrollBottom = computeMaxScrollY();
if (scrollY < 0) {
range -= scrollY;
@@ -3648,7 +3657,7 @@ public class WebView extends AbsoluteLayout
@Override
protected int computeVerticalScrollOffset() {
- return Math.max(mScrollY - getTitleHeight(), 0);
+ return Math.max(getScrollY() - getTitleHeight(), 0);
}
@Override
@@ -3661,8 +3670,8 @@ public class WebView extends AbsoluteLayout
protected void onDrawVerticalScrollBar(Canvas canvas,
Drawable scrollBar,
int l, int t, int r, int b) {
- if (mScrollY < 0) {
- t -= mScrollY;
+ if (getScrollY() < 0) {
+ t -= getScrollY();
}
scrollBar.setBounds(l, t + getVisibleTitleHeightImpl(), r, b);
scrollBar.draw(canvas);
@@ -3690,13 +3699,13 @@ public class WebView extends AbsoluteLayout
mInOverScrollMode = true;
}
- int oldX = mScrollX;
- int oldY = mScrollY;
+ int oldX = getScrollX();
+ int oldY = getScrollY();
super.scrollTo(scrollX, scrollY);
if (mOverScrollGlow != null) {
- mOverScrollGlow.pullGlow(mScrollX, mScrollY, oldX, oldY, maxX, maxY);
+ mOverScrollGlow.pullGlow(getScrollX(), getScrollY(), oldX, oldY, maxX, maxY);
}
}
@@ -4145,7 +4154,7 @@ public class WebView extends AbsoluteLayout
setFindIsUp(false);
// Now that the dialog has been removed, ensure that we scroll to a
// location that is not beyond the end of the page.
- pinScrollTo(mScrollX, mScrollY, false, 0);
+ pinScrollTo(getScrollX(), getScrollY(), false, 0);
invalidate();
}
@@ -4176,8 +4185,8 @@ public class WebView extends AbsoluteLayout
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
- int oldX = mScrollX;
- int oldY = mScrollY;
+ int oldX = getScrollX();
+ int oldY = getScrollY();
int x = mScroller.getCurrX();
int y = mScroller.getCurrY();
invalidate(); // So we draw again
@@ -4206,8 +4215,8 @@ public class WebView extends AbsoluteLayout
}
} else {
if (mTouchMode != TOUCH_DRAG_LAYER_MODE) {
- mScrollX = x;
- mScrollY = y;
+ setScrollXRaw(x);
+ setScrollYRaw(y);
} else {
// Update the layer position instead of WebView.
scrollLayerTo(x, y);
@@ -4220,7 +4229,7 @@ public class WebView extends AbsoluteLayout
WebViewCore.resumeUpdatePicture(mWebViewCore);
}
}
- if (oldX != mScrollX || oldY != mScrollY) {
+ if (oldX != getScrollX() || oldY != getScrollY()) {
sendOurVisibleRect();
}
}
@@ -4248,7 +4257,7 @@ public class WebView extends AbsoluteLayout
mScrollingLayerRect.top = y;
mWebViewCore.sendMessage(WebViewCore.EventHub.SCROLL_LAYER, mCurrentScrollingLayerId,
mScrollingLayerRect);
- onScrollChanged(mScrollX, mScrollY, mScrollX, mScrollY);
+ onScrollChanged(getScrollX(), getScrollY(), getScrollX(), getScrollY());
invalidate();
}
@@ -4261,15 +4270,15 @@ public class WebView extends AbsoluteLayout
// helper to pin the scrollBy parameters (already in view coordinates)
// returns true if the scroll was changed
private boolean pinScrollBy(int dx, int dy, boolean animate, int animationDuration) {
- return pinScrollTo(mScrollX + dx, mScrollY + dy, animate, animationDuration);
+ return pinScrollTo(getScrollX() + dx, getScrollY() + dy, animate, animationDuration);
}
// helper to pin the scrollTo parameters (already in view coordinates)
// returns true if the scroll was changed
private boolean pinScrollTo(int x, int y, boolean animate, int animationDuration) {
x = pinLocX(x);
y = pinLocY(y);
- int dx = x - mScrollX;
- int dy = y - mScrollY;
+ int dx = x - getScrollX();
+ int dy = y - getScrollY();
if ((dx | dy) == 0) {
return false;
@@ -4277,7 +4286,7 @@ public class WebView extends AbsoluteLayout
abortAnimation();
if (animate) {
// Log.d(LOGTAG, "startScroll: " + dx + " " + dy);
- mScroller.startScroll(mScrollX, mScrollY, dx, dy,
+ mScroller.startScroll(getScrollX(), getScrollY(), dx, dy,
animationDuration > 0 ? animationDuration : computeDuration(dx, dy));
awakenScrollBars(mScroller.getDuration());
invalidate();
@@ -4345,7 +4354,7 @@ public class WebView extends AbsoluteLayout
// past the point where the title bar is offscreen, ignore the
// scroll request.
if (mPageThatNeedsToSlideTitleBarOffScreen.equals(url)
- && mScrollX == 0 && mScrollY == 0) {
+ && getScrollX() == 0 && getScrollY() == 0) {
pinScrollTo(0, mYDistanceToSlideTitleOffScreen, true,
SLIDE_TITLE_DURATION);
}
@@ -4513,7 +4522,7 @@ public class WebView extends AbsoluteLayout
// page, assume this is an attempt to scroll off the title bar, and
// animate the title bar off screen slowly enough that the user can see
// it.
- if (cx == 0 && cy == 1 && mScrollX == 0 && mScrollY == 0
+ if (cx == 0 && cy == 1 && getScrollX() == 0 && getScrollY() == 0
&& mTitleBar != null) {
// FIXME: 100 should be defined somewhere as our max progress.
if (getProgress() < 100) {
@@ -4532,7 +4541,7 @@ public class WebView extends AbsoluteLayout
pinScrollTo(vx, vy, false, 0);
// If the request was to scroll to a negative coordinate, treat it as if
// it was a request to scroll to 0
- if ((mScrollX != vx && cx >= 0) || (mScrollY != vy && cy >= 0)) {
+ if ((getScrollX() != vx && cx >= 0) || (getScrollY() != vy && cy >= 0)) {
return true;
} else {
return false;
@@ -4787,12 +4796,12 @@ public class WebView extends AbsoluteLayout
if (child == mTitleBar) {
// When drawing the title bar, move it horizontally to always show
// at the top of the WebView.
- mTitleBar.offsetLeftAndRight(mScrollX - mTitleBar.getLeft());
+ mTitleBar.offsetLeftAndRight(getScrollX() - mTitleBar.getLeft());
int newTop = 0;
if (mTitleGravity == Gravity.NO_GRAVITY) {
- newTop = Math.min(0, mScrollY);
+ newTop = Math.min(0, getScrollY());
} else if (mTitleGravity == Gravity.TOP) {
- newTop = mScrollY;
+ newTop = getScrollY();
}
mTitleBar.setBottom(newTop + mTitleBar.getHeight());
mTitleBar.setTop(newTop);
@@ -4828,9 +4837,9 @@ public class WebView extends AbsoluteLayout
int bottom = top + computeRealVerticalScrollRange();
// first draw the background and anchor to the top of the view
canvas.save();
- canvas.translate(mScrollX, mScrollY);
- canvas.clipRect(-mScrollX, top - mScrollY, right - mScrollX, bottom
- - mScrollY, Region.Op.DIFFERENCE);
+ canvas.translate(getScrollX(), getScrollY());
+ canvas.clipRect(-getScrollX(), top - getScrollY(), right - getScrollX(), bottom
+ - getScrollY(), Region.Op.DIFFERENCE);
canvas.drawPaint(mOverScrollBackground);
canvas.restore();
// then draw the border
@@ -4961,8 +4970,8 @@ public class WebView extends AbsoluteLayout
= (AbsoluteLayout.LayoutParams) mWebTextView.getLayoutParams();
MotionEvent fake = MotionEvent.obtain(mLastTouchTime,
mLastTouchTime, MotionEvent.ACTION_DOWN,
- mLastTouchX - params.x + mScrollX,
- mLastTouchY - params.y + mScrollY, 0);
+ mLastTouchX - params.x + getScrollX(),
+ mLastTouchY - params.y + getScrollY(), 0);
mWebTextView.dispatchTouchEvent(fake);
return mWebTextView.performLongClick();
}
@@ -4995,8 +5004,8 @@ public class WebView extends AbsoluteLayout
* @hide This is an implementation detail.
*/
public boolean selectText() {
- int x = viewToContentX(mLastTouchX + mScrollX);
- int y = viewToContentY(mLastTouchY + mScrollY);
+ int x = viewToContentX(mLastTouchX + getScrollX());
+ int y = viewToContentY(mLastTouchY + getScrollY());
return selectText(x, y);
}
@@ -5367,12 +5376,12 @@ public class WebView extends AbsoluteLayout
mDrawHistory = false;
mHistoryPicture = null;
invalidate();
- int oldScrollX = mScrollX;
- int oldScrollY = mScrollY;
- mScrollX = pinLocX(mScrollX);
- mScrollY = pinLocY(mScrollY);
- if (oldScrollX != mScrollX || oldScrollY != mScrollY) {
- onScrollChanged(mScrollX, mScrollY, oldScrollX, oldScrollY);
+ int oldScrollX = getScrollX();
+ int oldScrollY = getScrollY();
+ setScrollXRaw(pinLocX(getScrollX()));
+ setScrollYRaw(pinLocY(getScrollY()));
+ if (oldScrollX != getScrollX() || oldScrollY != getScrollY()) {
+ onScrollChanged(getScrollX(), getScrollY(), oldScrollX, oldScrollY);
} else {
sendOurVisibleRect();
}
@@ -5853,10 +5862,10 @@ public class WebView extends AbsoluteLayout
return true;
case KeyEvent.KEYCODE_DPAD_LEFT:
nativeClearCursor(); // start next trackball movement from page edge
- return pinScrollTo(0, mScrollY, true, 0);
+ return pinScrollTo(0, getScrollY(), true, 0);
case KeyEvent.KEYCODE_DPAD_RIGHT:
nativeClearCursor(); // start next trackball movement from page edge
- return pinScrollTo(mContentWidth, mScrollY, true, 0);
+ return pinScrollTo(mContentWidth, getScrollY(), true, 0);
}
}
if (navHandledKey(keyCode, 1, false, event.getEventTime())) {
@@ -6634,8 +6643,8 @@ public class WebView extends AbsoluteLayout
// See if there is a layer at x, y and switch to TOUCH_DRAG_LAYER_MODE if a
// layer is found.
private void startScrollingLayer(float x, float y) {
- int contentX = viewToContentX((int) x + mScrollX);
- int contentY = viewToContentY((int) y + mScrollY);
+ int contentX = viewToContentX((int) x + getScrollX());
+ int contentY = viewToContentY((int) y + getScrollY());
mCurrentScrollingLayerId = nativeScrollableLayer(contentX, contentY,
mScrollingLayerRect, mScrollingLayerBounds);
if (mCurrentScrollingLayerId != 0) {
@@ -6657,8 +6666,8 @@ public class WebView extends AbsoluteLayout
return false;
}
WebViewCore.CursorData data = cursorDataNoPosition();
- data.mX = viewToContentX((int) event.getX() + mScrollX);
- data.mY = viewToContentY((int) event.getY() + mScrollY);
+ data.mX = viewToContentX((int) event.getX() + getScrollX());
+ data.mY = viewToContentY((int) event.getY() + getScrollY());
mWebViewCore.sendMessage(EventHub.SET_MOVE_MOUSE, data);
return true;
}
@@ -6711,8 +6720,8 @@ public class WebView extends AbsoluteLayout
int deltaX = mLastTouchX - x;
int deltaY = mLastTouchY - y;
- int contentX = viewToContentX(x + mScrollX);
- int contentY = viewToContentY(y + mScrollY);
+ int contentX = viewToContentX(x + getScrollX());
+ int contentY = viewToContentY(y + getScrollY());
switch (action) {
case MotionEvent.ACTION_DOWN: {
@@ -6769,8 +6778,8 @@ public class WebView extends AbsoluteLayout
}
if (DEBUG_TOUCH_HIGHLIGHT) {
if (getSettings().getNavDump()) {
- mTouchHighlightX = x + mScrollX;
- mTouchHighlightY = y + mScrollY;
+ mTouchHighlightX = x + getScrollX();
+ mTouchHighlightY = y + getScrollY();
mPrivateHandler.postDelayed(new Runnable() {
@Override
public void run() {
@@ -6787,8 +6796,8 @@ public class WebView extends AbsoluteLayout
}
mSelectionStarted = false;
if (mSelectingText) {
- int shiftedY = y - getTitleHeight() + mScrollY;
- int shiftedX = x + mScrollX;
+ int shiftedY = y - getTitleHeight() + getScrollY();
+ int shiftedX = x + getScrollX();
if (mSelectHandleCenter != null && mSelectHandleCenter.getBounds()
.contains(shiftedX, shiftedY)) {
mSelectionStarted = true;
@@ -7197,7 +7206,7 @@ public class WebView extends AbsoluteLayout
doFling();
break;
} else {
- if (mScroller.springBack(mScrollX, mScrollY, 0,
+ if (mScroller.springBack(getScrollX(), getScrollY(), 0,
computeMaxScrollX(), 0,
computeMaxScrollY())) {
invalidate();
@@ -7223,7 +7232,7 @@ public class WebView extends AbsoluteLayout
}
case MotionEvent.ACTION_CANCEL: {
if (mTouchMode == TOUCH_DRAG_MODE) {
- mScroller.springBack(mScrollX, mScrollY, 0,
+ mScroller.springBack(getScrollX(), getScrollY(), 0,
computeMaxScrollX(), 0, computeMaxScrollY());
invalidate();
}
@@ -7244,8 +7253,8 @@ public class WebView extends AbsoluteLayout
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);
+ int x = viewToContentX((int) ev.getX(c) + getScrollX());
+ int y = viewToContentY((int) ev.getY(c) + getScrollY());
ted.mPoints[c] = new Point(x, y);
ted.mPointsInView[c] = new Point((int) ev.getX(c), (int) ev.getY(c));
}
@@ -7268,7 +7277,7 @@ public class WebView extends AbsoluteLayout
Log.v(LOGTAG, "multi-touch: " + ev + " at " + ev.getEventTime()
+ " mTouchMode=" + mTouchMode
+ " numPointers=" + ev.getPointerCount()
- + " scrolloffset=(" + mScrollX + "," + mScrollY + ")");
+ + " scrolloffset=(" + getScrollX() + "," + getScrollY() + ")");
}
final ScaleGestureDetector detector =
@@ -7333,8 +7342,8 @@ public class WebView extends AbsoluteLayout
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;
+ int viewX = contentToViewX(x) - getScrollX();
+ int viewY = contentToViewY(y) - getScrollY();
ted.mPointsInView[0] = new Point(viewX, viewY);
ted.mAction = MotionEvent.ACTION_CANCEL;
ted.mNativeLayer = nativeScrollableLayer(
@@ -7380,8 +7389,8 @@ public class WebView extends AbsoluteLayout
private void doDrag(int deltaX, int deltaY) {
if ((deltaX | deltaY) != 0) {
- int oldX = mScrollX;
- int oldY = mScrollY;
+ int oldX = getScrollX();
+ int oldY = getScrollY();
int rangeX = computeMaxScrollX();
int rangeY = computeMaxScrollY();
// Check for the original scrolling layer in case we change
@@ -7711,8 +7720,8 @@ public class WebView extends AbsoluteLayout
ay = Math.abs(mTrackballRemainsY * TRACKBALL_MULTIPLIER);
maxA = Math.max(ax, ay);
int count = Math.max(0, (int) maxA);
- int oldScrollX = mScrollX;
- int oldScrollY = mScrollY;
+ int oldScrollX = getScrollX();
+ int oldScrollY = getScrollY();
if (count > 0) {
int selectKeyCode = ax < ay ? mTrackballRemainsY < 0 ?
KeyEvent.KEYCODE_DPAD_UP : KeyEvent.KEYCODE_DPAD_DOWN :
@@ -7742,14 +7751,14 @@ public class WebView extends AbsoluteLayout
Log.v(LOGTAG, "doTrackball pinScrollBy"
+ " count=" + count
+ " xMove=" + xMove + " yMove=" + yMove
- + " mScrollX-oldScrollX=" + (mScrollX-oldScrollX)
- + " mScrollY-oldScrollY=" + (mScrollY-oldScrollY)
+ + " mScrollX-oldScrollX=" + (getScrollX()-oldScrollX)
+ + " mScrollY-oldScrollY=" + (getScrollY()-oldScrollY)
);
}
- if (Math.abs(mScrollX - oldScrollX) > Math.abs(xMove)) {
+ if (Math.abs(getScrollX() - oldScrollX) > Math.abs(xMove)) {
xMove = 0;
}
- if (Math.abs(mScrollY - oldScrollY) > Math.abs(yMove)) {
+ if (Math.abs(getScrollY() - oldScrollY) > Math.abs(yMove)) {
yMove = 0;
}
if (xMove != 0 || yMove != 0) {
@@ -7776,12 +7785,12 @@ public class WebView extends AbsoluteLayout
}
boolean updateScrollCoordinates(int x, int y) {
- int oldX = mScrollX;
- int oldY = mScrollY;
- mScrollX = x;
- mScrollY = y;
- if (oldX != mScrollX || oldY != mScrollY) {
- onScrollChanged(mScrollX, mScrollY, oldX, oldY);
+ int oldX = getScrollX();
+ int oldY = getScrollY();
+ setScrollXRaw(x);
+ setScrollYRaw(y);
+ if (oldX != getScrollX() || oldY != getScrollY()) {
+ onScrollChanged(getScrollX(), getScrollY(), oldX, oldY);
return true;
} else {
return false;
@@ -7790,7 +7799,7 @@ public class WebView extends AbsoluteLayout
public void flingScroll(int vx, int vy) {
checkThread();
- mScroller.fling(mScrollX, mScrollY, vx, vy, 0, computeMaxScrollX(), 0,
+ mScroller.fling(getScrollX(), getScrollY(), vx, vy, 0, computeMaxScrollX(), 0,
computeMaxScrollY(), mOverflingDistance, mOverflingDistance);
invalidate();
}
@@ -7806,8 +7815,8 @@ public class WebView extends AbsoluteLayout
int vx = (int) mVelocityTracker.getXVelocity();
int vy = (int) mVelocityTracker.getYVelocity();
- int scrollX = mScrollX;
- int scrollY = mScrollY;
+ int scrollX = getScrollX();
+ int scrollY = getScrollY();
int overscrollDistance = mOverscrollDistance;
int overflingDistance = mOverflingDistance;
@@ -7988,8 +7997,8 @@ public class WebView extends AbsoluteLayout
}
mPrivateHandler.removeMessages(UPDATE_SELECTION);
// mLastTouchX and mLastTouchY are the point in the current viewport
- int contentX = viewToContentX(mLastTouchX + mScrollX);
- int contentY = viewToContentY(mLastTouchY + mScrollY);
+ int contentX = viewToContentX(mLastTouchX + getScrollX());
+ int contentY = viewToContentY(mLastTouchY + getScrollY());
int slop = viewToContentDimension(mNavSlop);
Rect rect = new Rect(contentX - slop, contentY - slop,
contentX + slop, contentY + slop);
@@ -8027,8 +8036,8 @@ public class WebView extends AbsoluteLayout
if (!inEditingMode()) {
return;
}
- mLastTouchX = Math.round(x + mWebTextView.getLeft() - mScrollX);
- mLastTouchY = Math.round(y + mWebTextView.getTop() - mScrollY);
+ mLastTouchX = Math.round(x + mWebTextView.getLeft() - getScrollX());
+ mLastTouchY = Math.round(y + mWebTextView.getTop() - getScrollY());
mLastTouchTime = eventTime;
if (!mScroller.isFinished()) {
abortAnimation();
@@ -8047,8 +8056,8 @@ public class WebView extends AbsoluteLayout
return false;
}
mDragFromTextInput = true;
- event.offsetLocation((mWebTextView.getLeft() - mScrollX),
- (mWebTextView.getTop() - mScrollY));
+ event.offsetLocation((mWebTextView.getLeft() - getScrollX()),
+ (mWebTextView.getTop() - getScrollY()));
boolean result = onTouchEvent(event);
mDragFromTextInput = false;
return result;
@@ -8088,8 +8097,8 @@ public class WebView extends AbsoluteLayout
updateSelection();
switchOutDrawHistory();
// mLastTouchX and mLastTouchY are the point in the current viewport
- int contentX = viewToContentX(mLastTouchX + mScrollX);
- int contentY = viewToContentY(mLastTouchY + mScrollY);
+ int contentX = viewToContentX(mLastTouchX + getScrollX());
+ int contentY = viewToContentY(mLastTouchY + getScrollY());
int slop = viewToContentDimension(mNavSlop);
if (sDisableNavcache && !mTouchHighlightRegion.isEmpty()) {
// set mTouchHighlightRequested to 0 to cause an immediate
@@ -8166,10 +8175,10 @@ public class WebView extends AbsoluteLayout
float scale = Math.min((float) viewWidth / rectWidth, (float) viewHeight / rectHeight);
scale = mZoomManager.computeScaleWithLimits(scale);
return !mZoomManager.willScaleTriggerZoom(scale)
- && contentToViewX(rect.left) >= mScrollX
- && contentToViewX(rect.right) <= mScrollX + viewWidth
- && contentToViewY(rect.top) >= mScrollY
- && contentToViewY(rect.bottom) <= mScrollY + viewHeight;
+ && contentToViewX(rect.left) >= getScrollX()
+ && contentToViewX(rect.right) <= getScrollX() + viewWidth
+ && contentToViewY(rect.top) >= getScrollY()
+ && contentToViewY(rect.bottom) <= getScrollY() + viewHeight;
}
/*
@@ -8193,7 +8202,7 @@ public class WebView extends AbsoluteLayout
true, 0);
} else {
float actualScale = mZoomManager.getScale();
- float oldScreenX = rect.left * actualScale - mScrollX;
+ float oldScreenX = rect.left * actualScale - getScrollX();
float rectViewX = rect.left * scale;
float rectViewWidth = rectWidth * scale;
float newMaxWidth = mContentWidth * scale;
@@ -8207,7 +8216,7 @@ public class WebView extends AbsoluteLayout
float zoomCenterX = (oldScreenX * scale - newScreenX * actualScale)
/ (scale - actualScale);
float oldScreenY = rect.top * actualScale + getTitleHeight()
- - mScrollY;
+ - getScrollY();
float rectViewY = rect.top * scale + getTitleHeight();
float rectViewHeight = rectHeight * scale;
float newMaxHeight = mContentHeight * scale + getTitleHeight();
@@ -8339,11 +8348,11 @@ public class WebView extends AbsoluteLayout
rect.offset(child.getLeft() - child.getScrollX(),
child.getTop() - child.getScrollY());
- Rect content = new Rect(viewToContentX(mScrollX),
- viewToContentY(mScrollY),
- viewToContentX(mScrollX + getWidth()
+ Rect content = new Rect(viewToContentX(getScrollX()),
+ viewToContentY(getScrollY()),
+ viewToContentX(getScrollX() + getWidth()
- getVerticalScrollbarWidth()),
- viewToContentY(mScrollY + getViewHeightWithTitle()));
+ viewToContentY(getScrollY() + getViewHeightWithTitle()));
content = nativeSubtractLayers(content);
int screenTop = contentToViewY(content.top);
int screenBottom = contentToViewY(content.bottom);
@@ -8859,12 +8868,12 @@ public class WebView extends AbsoluteLayout
startScrollingLayer(x, y);
startDrag();
}
- int deltaX = pinLocX((int) (mScrollX
+ int deltaX = pinLocX((int) (getScrollX()
+ mLastDeferTouchX - x))
- - mScrollX;
- int deltaY = pinLocY((int) (mScrollY
+ - getScrollX();
+ int deltaY = pinLocY((int) (getScrollY()
+ mLastDeferTouchY - y))
- - mScrollY;
+ - getScrollY();
doDrag(deltaX, deltaY);
if (deltaX != 0) mLastDeferTouchX = x;
if (deltaY != 0) mLastDeferTouchY = y;
@@ -8874,7 +8883,7 @@ public class WebView extends AbsoluteLayout
case MotionEvent.ACTION_CANCEL:
if (mDeferTouchMode == TOUCH_DRAG_MODE) {
// no fling in defer process
- mScroller.springBack(mScrollX, mScrollY, 0,
+ mScroller.springBack(getScrollX(), getScrollY(), 0,
computeMaxScrollX(), 0,
computeMaxScrollY());
invalidate();
@@ -8961,8 +8970,8 @@ public class WebView extends AbsoluteLayout
|| (msg.arg1 == MotionEvent.ACTION_MOVE
&& mPreventDefault == PREVENT_DEFAULT_NO_FROM_TOUCH_DOWN)) {
cancelWebCoreTouchEvent(
- viewToContentX(mLastTouchX + mScrollX),
- viewToContentY(mLastTouchY + mScrollY),
+ viewToContentX(mLastTouchX + getScrollX()),
+ viewToContentY(mLastTouchY + getScrollY()),
true);
}
break;
@@ -9016,8 +9025,8 @@ public class WebView extends AbsoluteLayout
ted.mIds = new int[1];
ted.mIds[0] = 0;
ted.mPoints = new Point[1];
- ted.mPoints[0] = new Point(viewToContentX(mLastTouchX + mScrollX),
- viewToContentY(mLastTouchY + mScrollY));
+ ted.mPoints[0] = new Point(viewToContentX(mLastTouchX + getScrollX()),
+ viewToContentY(mLastTouchY + getScrollY()));
ted.mPointsInView = new Point[1];
ted.mPointsInView[0] = new Point(mLastTouchX, mLastTouchY);
// metaState for long press is tricky. Should it be the
@@ -9277,17 +9286,17 @@ public class WebView extends AbsoluteLayout
case SHOW_RECT_MSG_ID: {
WebViewCore.ShowRectData data = (WebViewCore.ShowRectData) msg.obj;
- int x = mScrollX;
+ int x = getScrollX();
int left = contentToViewX(data.mLeft);
int width = contentToViewDimension(data.mWidth);
int maxWidth = contentToViewDimension(data.mContentWidth);
int viewWidth = getViewWidth();
if (width < viewWidth) {
// center align
- x += left + width / 2 - mScrollX - viewWidth / 2;
+ x += left + width / 2 - getScrollX() - viewWidth / 2;
} else {
x += (int) (left + data.mXPercentInDoc * width
- - mScrollX - data.mXPercentInView * viewWidth);
+ - getScrollX() - data.mXPercentInView * viewWidth);
}
if (DebugFlags.WEB_VIEW) {
Log.v(LOGTAG, "showRectMsg=(left=" + left + ",width=" +