Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2530)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwLayoutSizer.java

Issue 12567020: [android] Resize the android_webview if it's 0x0 initially. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/java/src/org/chromium/android_webview/AwLayoutSizer.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwLayoutSizer.java b/android_webview/java/src/org/chromium/android_webview/AwLayoutSizer.java
index d5ff1085f25c6f11de2018988a91f85e905880f7..2c2ad232acea0875cf294cde3261b4408f5ace13 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwLayoutSizer.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwLayoutSizer.java
@@ -19,9 +19,14 @@ public class AwLayoutSizer {
private boolean mWidthMeasurementIsFixed;
private boolean mHeightMeasurementIsFixed;
- // Size of the rendered content, as reported by native, in physical pixels.
- private int mContentHeight;
- private int mContentWidth;
+ // Size of the rendered content, as reported by native.
+ private int mContentHeightCss;
+ private int mContentWidthCss;
+
+ // Page scale factor.
+ private double mPageScaleFactor;
+
+ private final double mDIPScale;
// Callback object for interacting with the View.
Delegate mDelegate;
@@ -31,22 +36,40 @@ public class AwLayoutSizer {
void setMeasuredDimension(int measuredWidth, int measuredHeight);
}
- public AwLayoutSizer(Delegate delegate) {
+ public AwLayoutSizer(Delegate delegate, double dipScale) {
mDelegate = delegate;
+ mDIPScale = dipScale;
+ mPageScaleFactor = 1.0;
}
/**
* Update the contents size.
* This should be called whenever the content size changes (due to DOM manipulation or page
* load, for example).
- * The width and height should be in physical pixels.
+ * The width and height should be in CSS pixels.
*/
- public void onContentSizeChanged(int width, int height) {
- boolean layoutNeeded = (mContentWidth != width && !mWidthMeasurementIsFixed) ||
- (mContentHeight != height && !mHeightMeasurementIsFixed);
+ public void onContentSizeChanged(int widthCss, int heightCss) {
+ doUpdate(widthCss, heightCss, mPageScaleFactor);
+ }
- mContentWidth = width;
- mContentHeight = height;
+ /**
+ * Update the contents page scale.
+ * This should be called whenever the content page scale factor changes (due to pinch zoom, for
+ * example).
+ */
+ public void onPageScaleChanged(double pageScaleFactor) {
+ doUpdate(mContentWidthCss, mContentHeightCss, pageScaleFactor);
+ }
+
+ private void doUpdate(int widthCss, int heightCss, double pageScaleFactor) {
+ boolean anyMeasurementNotFixed = !mWidthMeasurementIsFixed || !mHeightMeasurementIsFixed;
+ boolean layoutNeeded = (mContentWidthCss != widthCss && !mWidthMeasurementIsFixed) ||
+ (mContentHeightCss != heightCss && !mHeightMeasurementIsFixed) ||
+ (mPageScaleFactor != pageScaleFactor && anyMeasurementNotFixed);
+
+ mContentWidthCss = widthCss;
+ mContentHeightCss = heightCss;
+ mPageScaleFactor = pageScaleFactor;
if (layoutNeeded) {
mDelegate.requestLayout();
@@ -66,6 +89,9 @@ public class AwLayoutSizer {
int measuredHeight = heightSize;
int measuredWidth = widthSize;
+ int contentHeightPix = (int) (mContentHeightCss * mPageScaleFactor * mDIPScale);
+ int contentWidthPix = (int) (mContentWidthCss * mPageScaleFactor * mDIPScale);
+
// Always use the given size unless unspecified. This matches WebViewClassic behavior.
mWidthMeasurementIsFixed = (widthMode != MeasureSpec.UNSPECIFIED);
// Freeze the height if an exact size is given by the parent or if the content size has
@@ -73,21 +99,21 @@ public class AwLayoutSizer {
// TODO(mkosiba): Actually we'd like the reduction in content size to cause the WebView to
// shrink back again but only as a result of a page load.
mHeightMeasurementIsFixed = (heightMode == MeasureSpec.EXACTLY) ||
- (heightMode == MeasureSpec.AT_MOST && mContentHeight > heightSize);
+ (heightMode == MeasureSpec.AT_MOST && contentHeightPix > heightSize);
if (!mHeightMeasurementIsFixed) {
- measuredHeight = mContentHeight;
+ measuredHeight = contentHeightPix;
}
if (!mWidthMeasurementIsFixed) {
- measuredWidth = mContentWidth;
+ measuredWidth = contentWidthPix;
}
- if (measuredHeight < mContentHeight) {
+ if (measuredHeight < contentHeightPix) {
measuredHeight |= View.MEASURED_STATE_TOO_SMALL;
}
- if (measuredWidth < mContentWidth) {
+ if (measuredWidth < contentWidthPix) {
measuredWidth |= View.MEASURED_STATE_TOO_SMALL;
}

Powered by Google App Engine
This is Rietveld 408576698