diff options
| author | Shimeng (Simon) Wang <swang@google.com> | 2011-02-28 13:08:12 -0800 |
|---|---|---|
| committer | Shimeng (Simon) Wang <swang@google.com> | 2011-02-28 13:12:35 -0800 |
| commit | f1b391a1e3fc51f90f3afaae6623540cab326c8d (patch) | |
| tree | 5b31fd39c19c1d09eaced1e176c57e7ac3145647 /core/java | |
| parent | 8e79442c4fdabd2f82d0ed8e23d394816edee495 (diff) | |
Remove the limitation that zoom can't go beyond overview scale.
Also scales the zoom level when zoom density changes.
issue: 3494868
Change-Id: I23ef9e1bad9c042ca0edf05dce60454b17eb0ade
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/webkit/ZoomManager.java | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 5e0de27bb173..63038503b238 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -227,10 +227,13 @@ class ZoomManager { assert density > 0; if (Math.abs(density - mDefaultScale) > MINIMUM_SCALE_INCREMENT) { + // Remember the current zoom density before it gets changed. + final float originalDefault = mDefaultScale; // set the new default density setDefaultZoomScale(density); + float scaleChange = (originalDefault > 0.0) ? density / originalDefault: 1.0f; // adjust the scale if it falls outside the new zoom bounds - setZoomScale(mActualScale, true); + setZoomScale(mActualScale * scaleChange, true); } } @@ -721,10 +724,7 @@ class ZoomManager { } public boolean onScale(ScaleGestureDetector detector) { - // Prevent scaling beyond overview scale. - float scale = Math.max( - computeScaleWithLimits(detector.getScaleFactor() * mActualScale), - getZoomOverviewScale()); + float scale = computeScaleWithLimits(detector.getScaleFactor() * mActualScale); if (mPinchToZoomAnimating || willScaleTriggerZoom(scale)) { mPinchToZoomAnimating = true; // limit the scale change per step @@ -780,13 +780,6 @@ class ZoomManager { // update mMinZoomScale if the minimum zoom scale is not fixed if (!mMinZoomScaleFixed) { - // when change from narrow screen to wide screen, the new viewWidth - // can be wider than the old content width. We limit the minimum - // scale to 1.0f. The proper minimum scale will be calculated when - // the new picture shows up. - mMinZoomScale = Math.min(1.0f, (float) mWebView.getViewWidth() - / (mWebView.drawHistory() ? mWebView.getHistoryPictureWidth() - : mZoomOverviewWidth)); // limit the minZoomScale to the initialScale if it is set if (mInitialScale > 0 && mInitialScale < mMinZoomScale) { mMinZoomScale = mInitialScale; @@ -823,7 +816,7 @@ class ZoomManager { // Keep overview mode unchanged when rotating. final float zoomOverviewScale = getZoomOverviewScale(); final float newScale = (mInZoomOverviewBeforeSizeChange) ? - zoomOverviewScale : Math.max(mActualScale, zoomOverviewScale); + zoomOverviewScale : mActualScale; setZoomScale(newScale, mUpdateTextWrap, true); // update the zoom buttons as the scale can be changed updateZoomPicker(); @@ -879,21 +872,15 @@ class ZoomManager { } } - if (!mMinZoomScaleFixed) { - mMinZoomScale = newZoomOverviewScale; - } // fit the content width to the current view for the first new picture // after first layout. boolean scaleHasDiff = exceedsMinScaleIncrement(newZoomOverviewScale, mActualScale); - // Make sure the actual scale is no less than zoom overview scale. - boolean scaleLessThanOverview = - (newZoomOverviewScale - mActualScale) >= MINIMUM_SCALE_INCREMENT; // Make sure mobile sites are correctly handled since mobile site will // change content width after rotating. boolean mobileSiteInOverview = mInZoomOverview && !exceedsMinScaleIncrement(newZoomOverviewScale, 1.0f); if (!mWebView.drawHistory() && - (mInitialZoomOverview || scaleLessThanOverview || mobileSiteInOverview) && + (mInitialZoomOverview || mobileSiteInOverview) && scaleHasDiff && zoomOverviewWidthChanged) { mInitialZoomOverview = false; setZoomScale(newZoomOverviewScale, !willScaleTriggerZoom(mTextWrapScale) && @@ -967,10 +954,11 @@ class ZoomManager { mTextWrapScale = viewState.mTextWrapScale; scale = viewState.mViewScale; } else { - scale = overviewScale; - if (!settings.getUseWideViewPort() - || !settings.getLoadWithOverviewMode()) { - scale = Math.max(viewState.mTextWrapScale, scale); + scale = mDefaultScale; + mTextWrapScale = mDefaultScale; + if (settings.getUseWideViewPort() + && settings.getLoadWithOverviewMode()) { + scale = Math.max(overviewScale, scale); } if (settings.isNarrowColumnLayout() && settings.getUseFixedViewport()) { @@ -981,7 +969,7 @@ class ZoomManager { } boolean reflowText = false; if (!viewState.mIsRestored) { - if (settings.getUseFixedViewport()) { + if (settings.getUseFixedViewport() && settings.getLoadWithOverviewMode()) { // Override the scale only in case of fixed viewport. scale = Math.max(scale, overviewScale); mTextWrapScale = Math.max(mTextWrapScale, overviewScale); |
