From c37308f11680f597d09fa783665ba3104d6e6d5c Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Fri, 11 Mar 2011 11:44:08 -0800 Subject: Fix bug 4083825 - Gesture zoom locked along content edges under some circumstances Tune the procedure used to handle "zoom slop" during a webview pan+zoom gesture. Change-Id: Ia706722ba6a46e64cce8814d4668e3857b16e562 --- core/java/android/webkit/ZoomManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 1d7738875b94..72052a6089af 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -777,12 +777,15 @@ class ZoomManager { } private class ScaleDetectorListener implements ScaleGestureDetector.OnScaleGestureListener { + private float mAccumulatedSpan; + public boolean onScaleBegin(ScaleGestureDetector detector) { mInitialZoomOverview = false; dismissZoomPicker(); mFocusMovementQueue.clear(); mWebView.mViewManager.startZoom(); mWebView.onPinchToZoomAnimationStart(); + mAccumulatedSpan = 0; return true; } @@ -797,8 +800,15 @@ class ZoomManager { FloatMath.sqrt((mFocusX - prevFocusX) * (mFocusX - prevFocusX) + (mFocusY - prevFocusY) * (mFocusY - prevFocusY)); mFocusMovementQueue.add(focusDelta); - float deltaSpan = Math.abs(detector.getCurrentSpan() - detector.getPreviousSpan()); - return mFocusMovementQueue.getSum() > deltaSpan; + float deltaSpan = detector.getCurrentSpan() - detector.getPreviousSpan() + + mAccumulatedSpan; + final boolean result = mFocusMovementQueue.getSum() > Math.abs(deltaSpan); + if (result) { + mAccumulatedSpan += deltaSpan; + } else { + mAccumulatedSpan = 0; + } + return result; } public boolean handleScale(ScaleGestureDetector detector) { -- cgit v1.2.3-59-g8ed1b