OSDN Git Service

Fix the zoom center. Now there is a titlebar, the zoom center
authorGrace Kloba <klobag@google.com>
Thu, 17 Sep 2009 18:01:44 +0000 (11:01 -0700)
committerGrace Kloba <klobag@google.com>
Thu, 17 Sep 2009 18:56:28 +0000 (11:56 -0700)
needs to be adjusted for it as the user really cares the spot
in the document. We need to pin zoom around that spot.

Fix http://b/issue?id=2126300

core/java/android/webkit/WebView.java

index a5536dd..740c39e 100644 (file)
@@ -1923,7 +1923,8 @@ public class WebView extends AbsoluteLayout
                 int oldY = mScrollY;
                 float ratio = scale * mInvActualScale;   // old inverse
                 float sx = ratio * oldX + (ratio - 1) * mZoomCenterX;
-                float sy = ratio * oldY + (ratio - 1) * mZoomCenterY;
+                float sy = ratio * oldY + (ratio - 1)
+                        * (mZoomCenterY - getTitleHeight());
 
                 // now update our new scale and inverse
                 if (scale != mActualScale && !mPreviewZoomOnly) {
@@ -2781,15 +2782,20 @@ public class WebView extends AbsoluteLayout
                     }
                 }
             }
+            // calculate the intermediate scroll position. As we need to use
+            // zoomScale, we can't use pinLocX/Y directly. Copy the logic here.
             float scale = zoomScale * mInvInitialZoomScale;
             int tx = Math.round(scale * (mInitialScrollX + mZoomCenterX)
                     - mZoomCenterX);
             tx = -pinLoc(tx, getViewWidth(), Math.round(mContentWidth
                     * zoomScale)) + mScrollX;
-            int ty = Math.round(scale * (mInitialScrollY + mZoomCenterY)
-                    - mZoomCenterY);
-            ty = -pinLoc(ty, getViewHeight(), Math.round(mContentHeight
-                    * zoomScale)) + mScrollY;
+            int titleHeight = getTitleHeight();
+            int ty = Math.round(scale
+                    * (mInitialScrollY + mZoomCenterY - titleHeight)
+                    - (mZoomCenterY - titleHeight));
+            ty = -(ty <= titleHeight ? Math.max(ty, 0) : pinLoc(ty
+                    - titleHeight, getViewHeight(), Math.round(mContentHeight
+                    * zoomScale)) + titleHeight) + mScrollY;
             canvas.translate(tx, ty);
             canvas.scale(zoomScale, zoomScale);
             if (inEditingMode() && !mNeedToAdjustWebTextView