summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuahui Wu <hwu@google.com>2011-03-09 10:52:42 -0800
committerHuahui Wu <hwu@google.com>2011-03-09 15:13:01 -0800
commitff6f4c2eff8a676187296b968388f80e744a9ce8 (patch)
tree300822f8cab7c05dd5701358c08197799cccea89
parent7ad85eb62f9f332cc8002ec996cd359333ba590e (diff)
downloadframeworks_base-ff6f4c2eff8a676187296b968388f80e744a9ce8.zip
frameworks_base-ff6f4c2eff8a676187296b968388f80e744a9ce8.tar.gz
frameworks_base-ff6f4c2eff8a676187296b968388f80e744a9ce8.tar.bz2
b/4075349 Make the pinch to zoom more responsive after limits.
Change-Id: I66ea0aa95ff6a471b7c2ae2cb1ce2fdd0f18ce01
-rw-r--r--core/java/android/webkit/ZoomManager.java43
1 files changed, 29 insertions, 14 deletions
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 942425a..a9b0dc0 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -360,6 +360,10 @@ class ZoomManager {
return scale;
}
+ public final boolean isScaleOverLimits(float scale) {
+ return scale <= mMinZoomScale || scale >= mMaxZoomScale;
+ }
+
public final boolean isZoomScaleFixed() {
return mMinZoomScale >= mMaxZoomScale;
}
@@ -749,12 +753,9 @@ class ZoomManager {
return true;
}
- public boolean onScale(ScaleGestureDetector detector) {
- // Prevent scaling beyond overview scale.
- float scale = Math.max(
- computeScaleWithLimits(detector.getScaleFactor() * mActualScale),
- getZoomOverviewScale());
-
+ // If the user moves the fingers but keeps the same distance between them,
+ // we should do panning only.
+ public boolean isPanningOnly(ScaleGestureDetector detector) {
float prevFocusX = mFocusX;
float prevFocusY = mFocusY;
mFocusX = detector.getFocusX();
@@ -768,14 +769,19 @@ class ZoomManager {
mFocusMovementSum -= mFocusMovementQueue.remove();
}
float deltaSpan = Math.abs(detector.getCurrentSpan() - detector.getPreviousSpan());
+ return mFocusMovementSum > deltaSpan;
+ }
- // If the user moves the fingers but keeps the same distance between them,
- // we should do panning only.
- if (mFocusMovementSum > deltaSpan) {
- mFocusMovementSum = 0;
- mFocusMovementQueue.clear();
- return true;
- }
+ public boolean handleScale(ScaleGestureDetector detector) {
+ float scale = detector.getScaleFactor() * mActualScale;
+
+ // if scale is limited by any reason, don't zoom but do ask
+ // the detector to update the event.
+ boolean isScaleLimited =
+ isScaleOverLimits(scale) || scale < getZoomOverviewScale();
+
+ // Prevent scaling beyond overview scale.
+ scale = Math.max(computeScaleWithLimits(scale), getZoomOverviewScale());
if (mPinchToZoomAnimating || willScaleTriggerZoom(scale)) {
mPinchToZoomAnimating = true;
@@ -788,13 +794,22 @@ class ZoomManager {
scale = computeScaleWithLimits(scale);
// if the scale change is too small, regard it as jitter and skip it.
if (Math.abs(scale - mActualScale) < MINIMUM_SCALE_WITHOUT_JITTER) {
- return false;
+ return isScaleLimited;
}
setZoomCenter(detector.getFocusX(), detector.getFocusY());
setZoomScale(scale, false);
mWebView.invalidate();
return true;
}
+ return isScaleLimited;
+ }
+
+ public boolean onScale(ScaleGestureDetector detector) {
+ if (isPanningOnly(detector) || handleScale(detector)) {
+ mFocusMovementSum = 0;
+ mFocusMovementQueue.clear();
+ return true;
+ }
return false;
}