am 408cf852: Support the new dpi change in the WebView.

Merge commit '408cf85207a43c9169f9fb520a584d2858847d24' into eclair-plus-aosp

* commit '408cf85207a43c9169f9fb520a584d2858847d24':
  Support the new dpi change in the WebView.
This commit is contained in:
Grace Kloba
2009-09-22 10:19:57 -07:00
committed by Android Git Automerger
3 changed files with 43 additions and 22 deletions

View File

@@ -707,6 +707,10 @@ class BrowserFrame extends Handler {
return value.string.toString(); return value.string.toString();
} }
private float density() {
return mContext.getResources().getDisplayMetrics().density;
}
//========================================================================== //==========================================================================
// native functions // native functions
//========================================================================== //==========================================================================

View File

@@ -4868,7 +4868,7 @@ public class WebView extends AbsoluteLayout
/ draw.mMinPrefWidth; / draw.mMinPrefWidth;
mMinZoomScaleFixed = false; mMinZoomScaleFixed = false;
} else { } else {
mMinZoomScale = mDefaultScale; mMinZoomScale = restoreState.mDefaultScale;
mMinZoomScaleFixed = true; mMinZoomScaleFixed = true;
} }
} else { } else {
@@ -4891,7 +4891,7 @@ public class WebView extends AbsoluteLayout
&& settings.getLoadWithOverviewMode()) { && settings.getLoadWithOverviewMode()) {
if (restoreState.mViewScale == 0 if (restoreState.mViewScale == 0
|| (restoreState.mMobileSite || (restoreState.mMobileSite
&& mMinZoomScale < mDefaultScale)) { && mMinZoomScale < restoreState.mDefaultScale)) {
mInZoomOverview = true; mInZoomOverview = true;
} }
} }

View File

@@ -100,6 +100,15 @@ final class WebViewCore {
private boolean mViewportUserScalable = true; private boolean mViewportUserScalable = true;
/*
* range is from 70 to 400.
* 0 is a special value means device-dpi. The default scale factor will be
* always 100.
* -1 means undefined. The default scale factor will be
* WebView.DEFAULT_SCALE_PERCENT.
*/
private int mViewportDensityDpi = -1;
private int mRestoredScale = 0; private int mRestoredScale = 0;
private int mRestoredScreenWidthScale = 0; private int mRestoredScreenWidthScale = 0;
private int mRestoredX = 0; private int mRestoredX = 0;
@@ -1539,6 +1548,7 @@ final class WebViewCore {
float mMaxScale; float mMaxScale;
float mViewScale; float mViewScale;
float mTextWrapScale; float mTextWrapScale;
float mDefaultScale;
int mScrollX; int mScrollX;
int mScrollY; int mScrollY;
boolean mMobileSite; boolean mMobileSite;
@@ -1842,30 +1852,38 @@ final class WebViewCore {
// set the viewport settings from WebKit // set the viewport settings from WebKit
setViewportSettingsFromNative(); setViewportSettingsFromNative();
// adjust the default scale to match the density // adjust the default scale to match the densityDpi
if (WebView.DEFAULT_SCALE_PERCENT != 100) { float adjust = 1.0f;
float adjust = (float) WebView.DEFAULT_SCALE_PERCENT / 100.0f; if (mViewportDensityDpi == -1) {
if (mViewportInitialScale > 0) { if (WebView.DEFAULT_SCALE_PERCENT != 100) {
mViewportInitialScale *= adjust; adjust = WebView.DEFAULT_SCALE_PERCENT / 100.0f;
}
if (mViewportMinimumScale > 0) {
mViewportMinimumScale *= adjust;
}
if (mViewportMaximumScale > 0) {
mViewportMaximumScale *= adjust;
} }
} else if (mViewportDensityDpi > 0) {
adjust = (float) mContext.getResources().getDisplayMetrics().densityDpi
/ mViewportDensityDpi;
}
int defaultScale = (int) (adjust * 100);
if (mViewportInitialScale > 0) {
mViewportInitialScale *= adjust;
}
if (mViewportMinimumScale > 0) {
mViewportMinimumScale *= adjust;
}
if (mViewportMaximumScale > 0) {
mViewportMaximumScale *= adjust;
} }
// infer the values if they are not defined. // infer the values if they are not defined.
if (mViewportWidth == 0) { if (mViewportWidth == 0) {
if (mViewportInitialScale == 0) { if (mViewportInitialScale == 0) {
mViewportInitialScale = WebView.DEFAULT_SCALE_PERCENT; mViewportInitialScale = defaultScale;
} }
} }
if (mViewportUserScalable == false) { if (mViewportUserScalable == false) {
mViewportInitialScale = WebView.DEFAULT_SCALE_PERCENT; mViewportInitialScale = defaultScale;
mViewportMinimumScale = WebView.DEFAULT_SCALE_PERCENT; mViewportMinimumScale = defaultScale;
mViewportMaximumScale = WebView.DEFAULT_SCALE_PERCENT; mViewportMaximumScale = defaultScale;
} }
if (mViewportMinimumScale > mViewportInitialScale if (mViewportMinimumScale > mViewportInitialScale
&& mViewportInitialScale != 0) { && mViewportInitialScale != 0) {
@@ -1875,8 +1893,7 @@ final class WebViewCore {
&& mViewportMaximumScale < mViewportInitialScale) { && mViewportMaximumScale < mViewportInitialScale) {
mViewportMaximumScale = mViewportInitialScale; mViewportMaximumScale = mViewportInitialScale;
} }
if (mViewportWidth < 0 if (mViewportWidth < 0 && mViewportInitialScale == defaultScale) {
&& mViewportInitialScale == WebView.DEFAULT_SCALE_PERCENT) {
mViewportWidth = 0; mViewportWidth = 0;
} }
@@ -1893,7 +1910,7 @@ final class WebViewCore {
// we call WebView method from WebCore thread. But not perfect // we call WebView method from WebCore thread. But not perfect
// reference is better than no reference. // reference is better than no reference.
webViewWidth = mWebView.getViewWidth(); webViewWidth = mWebView.getViewWidth();
viewportWidth = webViewWidth * 100 / WebView.DEFAULT_SCALE_PERCENT; viewportWidth = (int) (webViewWidth / adjust);
if (viewportWidth == 0) { if (viewportWidth == 0) {
Log.w(LOGTAG, "Can't get the viewWidth after the first layout"); Log.w(LOGTAG, "Can't get the viewWidth after the first layout");
} }
@@ -1903,6 +1920,7 @@ final class WebViewCore {
mRestoreState = new RestoreState(); mRestoreState = new RestoreState();
mRestoreState.mMinScale = mViewportMinimumScale / 100.0f; mRestoreState.mMinScale = mViewportMinimumScale / 100.0f;
mRestoreState.mMaxScale = mViewportMaximumScale / 100.0f; mRestoreState.mMaxScale = mViewportMaximumScale / 100.0f;
mRestoreState.mDefaultScale = adjust;
mRestoreState.mScrollX = mRestoredX; mRestoreState.mScrollX = mRestoredX;
mRestoreState.mScrollY = mRestoredY; mRestoreState.mScrollY = mRestoredY;
mRestoreState.mMobileSite = (0 == mViewportWidth); mRestoreState.mMobileSite = (0 == mViewportWidth);
@@ -1924,8 +1942,7 @@ final class WebViewCore {
mRestoreState.mViewScale = mRestoreState.mTextWrapScale = mRestoreState.mViewScale = mRestoreState.mTextWrapScale =
(float) webViewWidth / mViewportWidth; (float) webViewWidth / mViewportWidth;
} else { } else {
mRestoreState.mTextWrapScale = mRestoreState.mTextWrapScale = adjust;
WebView.DEFAULT_SCALE_PERCENT / 100.0f;
// 0 will trigger WebView to turn on zoom overview mode // 0 will trigger WebView to turn on zoom overview mode
mRestoreState.mViewScale = 0; mRestoreState.mViewScale = 0;
} }