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

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwScrollOffsetManager.java

Issue 23533051: [android_webview] Use a fraction to calculate scroll offset. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: revert changes from previous patch set as they break AwSettings tests Created 7 years, 3 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: android_webview/java/src/org/chromium/android_webview/AwScrollOffsetManager.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwScrollOffsetManager.java b/android_webview/java/src/org/chromium/android_webview/AwScrollOffsetManager.java
index e849520187d5748e6148538f7ee478f91ce029bb..5fcbb083ac34cfe70fb0c3761f4bc8d437f7455b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwScrollOffsetManager.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwScrollOffsetManager.java
@@ -9,8 +9,6 @@ import android.widget.OverScroller;
import com.google.common.annotations.VisibleForTesting;
-import org.chromium.base.CalledByNative;
-
/**
* Takes care of syncing the scroll offset between the Android View system and the
* InProcessViewRenderer.
@@ -52,9 +50,9 @@ public class AwScrollOffsetManager {
private int mNativeScrollX;
private int mNativeScrollY;
- // Content size.
- private int mContentWidth;
- private int mContentHeight;
+ // How many pixels can we scroll in a given direction.
+ private int mMaxHorizontalScrollOffset;
+ private int mMaxVerticalScrollOffset;
// Size of the container view.
private int mContainerViewWidth;
@@ -64,17 +62,11 @@ public class AwScrollOffsetManager {
private boolean mProcessingTouchEvent;
// Whether (and to what value) to update the native side scroll offset after we've finished
- // provessing a touch event.
+ // processing a touch event.
private boolean mApplyDeferredNativeScroll;
private int mDeferredNativeScrollX;
private int mDeferredNativeScrollY;
- // Whether (and to what value) to update the container view scroll offset after we've received
- // a valid content size.
- private boolean mApplyDeferredContainerScrollOnValidContentSize;
- private int mDeferredContainerScrollX;
- private int mDeferredContainerScrollY;
-
// The velocity of the last recorded fling,
private int mLastFlingVelocityX;
private int mLastFlingVelocityY;
@@ -89,11 +81,11 @@ public class AwScrollOffsetManager {
//----- Scroll range and extent calculation methods -------------------------------------------
public int computeHorizontalScrollRange() {
- return Math.max(mContainerViewWidth, mContentWidth);
+ return mContainerViewWidth + mMaxHorizontalScrollOffset;
}
public int computeMaximumHorizontalScrollOffset() {
- return computeHorizontalScrollRange() - mContainerViewWidth;
+ return mMaxHorizontalScrollOffset;
}
public int computeHorizontalScrollOffset() {
@@ -101,11 +93,11 @@ public class AwScrollOffsetManager {
}
public int computeVerticalScrollRange() {
- return Math.max(mContainerViewHeight, mContentHeight);
+ return mContainerViewHeight + mMaxVerticalScrollOffset;
}
public int computeMaximumVerticalScrollOffset() {
- return computeVerticalScrollRange() - mContainerViewHeight;
+ return mMaxVerticalScrollOffset;
}
public int computeVerticalScrollOffset() {
@@ -117,18 +109,10 @@ public class AwScrollOffsetManager {
}
//---------------------------------------------------------------------------------------------
-
- // Called when the content size changes. This needs to be the size of the on-screen content and
- // therefore we can't use the WebContentsDelegate preferred size.
- public void setContentSize(int width, int height) {
- mContentWidth = width;
- mContentHeight = height;
-
- if (mApplyDeferredContainerScrollOnValidContentSize &&
- mContentWidth != 0 && mContentHeight != 0) {
- mApplyDeferredContainerScrollOnValidContentSize = false;
- scrollContainerViewTo(mDeferredContainerScrollX, mDeferredContainerScrollY);
- }
+ // Called when the scroll range changes. This needs to be the size of the on-screen content.
+ public void setMaxScrollOffset(int width, int height) {
+ mMaxHorizontalScrollOffset = width;
+ mMaxVerticalScrollOffset = height;
}
// Called when the physical size of the view changes.
@@ -154,16 +138,8 @@ public class AwScrollOffsetManager {
}
}
- // Called by the native side to attempt to scroll the container view.
+ // Called by the native side to scroll the container view.
public void scrollContainerViewTo(int x, int y) {
- if (mContentWidth == 0 && mContentHeight == 0) {
- mApplyDeferredContainerScrollOnValidContentSize = true;
- mDeferredContainerScrollX = x;
- mDeferredContainerScrollY = y;
- return;
- }
- mApplyDeferredContainerScrollOnValidContentSize = false;
-
mNativeScrollX = x;
mNativeScrollY = y;
@@ -255,9 +231,6 @@ public class AwScrollOffsetManager {
if (x == mNativeScrollX && y == mNativeScrollY)
return;
- // Updating the native scroll will override any pending scroll originally sent from native.
- mApplyDeferredContainerScrollOnValidContentSize = false;
-
// The scrollNativeTo call should be a simple store, so it's OK to assume it always
// succeeds.
mNativeScrollX = x;
@@ -291,11 +264,11 @@ public class AwScrollOffsetManager {
public void flingScroll(int velocityX, int velocityY) {
final int scrollX = mDelegate.getContainerViewScrollX();
final int scrollY = mDelegate.getContainerViewScrollY();
- final int rangeX = computeMaximumHorizontalScrollOffset();
- final int rangeY = computeMaximumVerticalScrollOffset();
+ final int scrollRangeX = computeMaximumHorizontalScrollOffset();
+ final int scrollRangeY = computeMaximumVerticalScrollOffset();
mScroller.fling(scrollX, scrollY, velocityX, velocityY,
- 0, rangeX, 0, rangeY);
+ 0, scrollRangeX, 0, scrollRangeY);
mDelegate.invalidate();
}
@@ -309,11 +282,11 @@ public class AwScrollOffsetManager {
int x = mScroller.getCurrX();
int y = mScroller.getCurrY();
- int rangeX = computeMaximumHorizontalScrollOffset();
- int rangeY = computeMaximumVerticalScrollOffset();
+ final int scrollRangeX = computeMaximumHorizontalScrollOffset();
+ final int scrollRangeY = computeMaximumVerticalScrollOffset();
if (overScrollGlow != null) {
- overScrollGlow.absorbGlow(x, y, oldX, oldY, rangeX, rangeY,
+ overScrollGlow.absorbGlow(x, y, oldX, oldY, scrollRangeX, scrollRangeY,
mScroller.getCurrVelocity());
}

Powered by Google App Engine
This is Rietveld 408576698