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
This commit is contained in:
Shimeng (Simon) Wang
2011-02-28 13:08:12 -08:00
parent 8e79442c4f
commit f1b391a1e3

View File

@@ -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);