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:
@@ -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
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user