Title: [146272] trunk
Revision
146272
Author
o...@chromium.org
Date
2013-03-19 15:37:55 -0700 (Tue, 19 Mar 2013)

Log Message

Make intrinsic size keywords on flexboxes work
https://bugs.webkit.org/show_bug.cgi?id=112652

Reviewed by Tony Chang.

Source/WebCore:

Tests: fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html
       fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html

* platform/Length.h:
(WebCore::Length::isSpecifiedOrIntrinsic):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax):
(WebCore::RenderBox::computeLogicalWidthInRegion):
(WebCore::RenderBox::computeLogicalWidthInRegionUsing):
Pass in the Length so that RenderFlexibleBox can call this method and avoid
doing a bunch of code duplication.

* rendering/RenderBox.h:
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
Instead of just calling valueForLength, call computeLogicalWidthInRegionUsing so that
we properly resolve intrinsic Length types. Incidentally, this should also make viewport
percentage units work.

(WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
Resolve intrinsic min/max Lengths. Also, instead of calling minPreferredLogicalWidth for the
min-width: auto case, call computeMainAxisExtentForChild to correctly compute the min intrinsic size.

LayoutTests:

* fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items-expected.txt: Added.
* fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html: Added.
* fast/css-intrinsic-dimensions/intrinsic-sized-flex-items-expected.txt: Added.
* fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html: Added.
* platform/chromium-linux/css3/flexbox/flexbox-baseline-expected.png:
* platform/chromium-win/css3/flexbox/flexbox-baseline-expected.txt:
This looks like a rounding difference. The new result matches the non-column result
in this same test, so it looks more correct to me.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (146271 => 146272)


--- trunk/LayoutTests/ChangeLog	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/ChangeLog	2013-03-19 22:37:55 UTC (rev 146272)
@@ -1,3 +1,19 @@
+2013-03-18  Ojan Vafai  <o...@chromium.org>
+
+        Make intrinsic size keywords on flexboxes work
+        https://bugs.webkit.org/show_bug.cgi?id=112652
+
+        Reviewed by Tony Chang.
+
+        * fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items-expected.txt: Added.
+        * fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html: Added.
+        * fast/css-intrinsic-dimensions/intrinsic-sized-flex-items-expected.txt: Added.
+        * fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html: Added.
+        * platform/chromium-linux/css3/flexbox/flexbox-baseline-expected.png:
+        * platform/chromium-win/css3/flexbox/flexbox-baseline-expected.txt:
+        This looks like a rounding difference. The new result matches the non-column result
+        in this same test, so it looks more correct to me.
+
 2013-03-19  Dean Jackson  <d...@apple.com>
 
         Unreviewed. Skipping plugin snapshot tests temporarily to work out compositing issues. 

Added: trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items-expected.txt (0 => 146272)


--- trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items-expected.txt	2013-03-19 22:37:55 UTC (rev 146272)
@@ -0,0 +1,16 @@
+Tests intrinsic width values on flex-items.
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS

Added: trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html (0 => 146272)


--- trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html	2013-03-19 22:37:55 UTC (rev 146272)
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<style>
+@import "resources/width-keyword-classes.css";
+
+.container {
+    border: 5px solid blue;
+    width: 250px;
+    height: 250px;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-flex-direction: column;
+    flex-direction: column;
+}
+.child {
+    border: 5px solid pink;
+    -webkit-flex: none;
+    flex: none;
+    display: -webkit-flex;
+    display: flex;
+}
+.content {
+    display: inline-block;
+    width: 100px;
+    height: 100px;
+    background-color: salmon;
+}
+</style>
+
+Tests intrinsic width values on flex-items.
+
+<!-- width tests -->
+<div class="container">
+    <div class="child max-content" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child min-content" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child fit-content" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container" style="width: 50px">
+    <div class="child fit-content" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child fill-available" data-expected-width="250">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<!-- min-width tests -->
+<div class="container">
+    <div class="child min-width-max-content" style="width: 10px;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+<div class="container">
+    <div class="child min-width-min-content" style="width: 10px;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child min-width-fit-content" style="width: 10px;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container" style="width: 50px">
+    <div class="child min-width-fit-content" style="width: 10px;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child min-width-fill-available" style="width: 10px;" data-expected-width="250">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<!-- max-width tests -->
+<div class="container">
+    <div class="child max-width-max-content" style="width: 1000px; min-width: 0;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child max-width-min-content" style="width: 1000px; min-width: 0;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child max-width-fit-content" style="width: 1000px; min-width: 0;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container" style="width: 50px">
+    <div class="child max-width-fit-content" style="width: 1000px; min-width: 0;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child max-width-fill-available" style="width: 1000px; min-width: 0;" data-expected-width="250">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<script src=""
+<script>
+checkLayout(".container");
+</script>

Added: trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items-expected.txt (0 => 146272)


--- trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items-expected.txt	2013-03-19 22:37:55 UTC (rev 146272)
@@ -0,0 +1,16 @@
+Tests intrinsic width values on flex-items.
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS

Added: trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html (0 => 146272)


--- trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html	2013-03-19 22:37:55 UTC (rev 146272)
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<style>
+@import "resources/width-keyword-classes.css";
+
+.container {
+    border: 5px solid blue;
+    width: 250px;
+    height: 250px;
+    display: -webkit-flex;
+    display: flex;
+}
+.child {
+    border: 5px solid pink;
+    -webkit-flex: none;
+    flex: none;
+    display: -webkit-flex;
+    display: flex;
+}
+.content {
+    display: inline-block;
+    width: 100px;
+    height: 100px;
+    background-color: salmon;
+}
+</style>
+
+Tests intrinsic width values on flex-items.
+
+<!-- width tests -->
+<div class="container">
+    <div class="child max-content" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child min-content" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child fit-content" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container" style="width: 50px">
+    <div class="child fit-content" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child fill-available" data-expected-width="250">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<!-- min-width tests -->
+<div class="container">
+    <div class="child min-width-max-content" style="width: 10px;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+<div class="container">
+    <div class="child min-width-min-content" style="width: 10px;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child min-width-fit-content" style="width: 10px;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container" style="width: 50px">
+    <div class="child min-width-fit-content" style="width: 10px;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child min-width-fill-available" style="width: 10px;" data-expected-width="250">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<!-- max-width tests -->
+<div class="container">
+    <div class="child max-width-max-content" style="width: 1000px; min-width: 0;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child max-width-min-content" style="width: 1000px; min-width: 0;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child max-width-fit-content" style="width: 1000px; min-width: 0;" data-expected-width="210">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container" style="width: 50px">
+    <div class="child max-width-fit-content" style="width: 1000px; min-width: 0;" data-expected-width="110">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="child max-width-fill-available" style="width: 1000px; min-width: 0;" data-expected-width="250">
+        <div><div class="content"></div><div class="content"></div></div>
+    </div>
+</div>
+
+<script src=""
+<script>
+checkLayout(".container");
+</script>

Modified: trunk/LayoutTests/platform/chromium/TestExpectations (146271 => 146272)


--- trunk/LayoutTests/platform/chromium/TestExpectations	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/platform/chromium/TestExpectations	2013-03-19 22:37:55 UTC (rev 146272)
@@ -4410,6 +4410,8 @@
 # Need rebaseline
 webkit.org/b/110837 [ Mac ] fast/forms/color/input-appearance-color.html [ Failure ]
 
+Bug(ojan) [ Mac Win ] css3/flexbox/flexbox-baseline.html [ ImageOnlyFailure Failure ]
+
 # Flaky tests
 webkit.org/b/112598 [ Win Mac Linux ] http/tests/security/mixedContent/insecure-audio-video-in-main-frame.html [ Failure Pass ]
 webkit.org/b/112601 http/tests/security/cross-frame-access-port-explicit-domain.html [ Failure Pass ]

Modified: trunk/LayoutTests/platform/chromium-linux/css3/flexbox/flexbox-baseline-expected.png


(Binary files differ)

Modified: trunk/LayoutTests/platform/chromium-win/css3/flexbox/flexbox-baseline-expected.txt (146271 => 146272)


--- trunk/LayoutTests/platform/chromium-win/css3/flexbox/flexbox-baseline-expected.txt	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/platform/chromium-win/css3/flexbox/flexbox-baseline-expected.txt	2013-03-19 22:37:55 UTC (rev 146272)
@@ -94,13 +94,13 @@
       RenderText {#text} at (117,25) size 57x19
         text run at (117,25) width 57: " after text"
     RenderBlock {DIV} at (0,417) size 800x45
-      RenderText {#text} at (0,11) size 169x19
-        text run at (0,11) width 169: "should align with the middle "
+      RenderText {#text} at (0,10) size 169x19
+        text run at (0,10) width 169: "should align with the middle "
       RenderFlexibleBox {DIV} at (169,5) size 40x40 [bgcolor=#D3D3D3]
         RenderBlock {DIV} at (0,0) size 40x21 [border: none (1px solid #000000) none]
-        RenderBlock {DIV} at (0,21) size 40x20
-      RenderText {#text} at (209,11) size 116x19
-        text run at (209,11) width 116: " of the grey flexbox"
+        RenderBlock {DIV} at (0,20) size 40x20
+      RenderText {#text} at (209,10) size 116x19
+        text run at (209,10) width 116: " of the grey flexbox"
     RenderBlock {DIV} at (0,462) size 800x40
       RenderText {#text} at (0,20) size 172x19
         text run at (0,20) width 172: "should align with the bottom "

Modified: trunk/LayoutTests/platform/efl/TestExpectations (146271 => 146272)


--- trunk/LayoutTests/platform/efl/TestExpectations	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/platform/efl/TestExpectations	2013-03-19 22:37:55 UTC (rev 146272)
@@ -1851,6 +1851,8 @@
 
 webkit.org/b/111058 plugins/plugin-clip-subframe.html [ Failure ]
 
+Bug(ojan) css3/flexbox/flexbox-baseline.html [ Failure ]
+
 # Newly added tests in r144190 are failing.
 webkit.org/b/111172 compositing/overlap-blending/children-opacity-huge.html [ ImageOnlyFailure ]
 webkit.org/b/111172 compositing/overlap-blending/children-opacity-no-overlap.html [ ImageOnlyFailure ]

Modified: trunk/LayoutTests/platform/gtk/TestExpectations (146271 => 146272)


--- trunk/LayoutTests/platform/gtk/TestExpectations	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/platform/gtk/TestExpectations	2013-03-19 22:37:55 UTC (rev 146272)
@@ -1430,6 +1430,8 @@
 webkit.org/b/111606 fast/borders/border-fit-2.html [ Failure ]
 webkit.org/b/111606 fast/repaint/border-fit-lines.html [ Failure ]
 
+Bug(ojan) css3/flexbox/flexbox-baseline.html [ Failure ]
+
 webkit.org/b/112109 fast/box-shadow/box-shadow-with-zero-radius.html [ ImageOnlyFailure ]
 
 webkit.org/b/112110 media/track/track-cue-container-rendering-position.html [ Failure ]

Modified: trunk/LayoutTests/platform/mac/TestExpectations (146271 => 146272)


--- trunk/LayoutTests/platform/mac/TestExpectations	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2013-03-19 22:37:55 UTC (rev 146272)
@@ -1493,6 +1493,8 @@
 webkit.org/b/111606 fast/borders/border-fit.html [ Failure Pass ]
 webkit.org/b/111606 fast/repaint/border-fit-lines.html [ Failure Pass ]
 
+Bug(ojan) css3/flexbox/flexbox-baseline.html [ Failure ]
+
 # Flakey
 webkit.org/b/112533 media/auto-play-in-sandbox-with-allow-scripts.html [ Pass Failure ]
 

Modified: trunk/LayoutTests/platform/qt/TestExpectations (146271 => 146272)


--- trunk/LayoutTests/platform/qt/TestExpectations	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/LayoutTests/platform/qt/TestExpectations	2013-03-19 22:37:55 UTC (rev 146272)
@@ -2687,6 +2687,8 @@
 # Need support for ResourceHandle::didChangePriority and DRT support
 webkit.org/b/111016 http/tests/loading/promote-img-preload-priority.html [ Failure ]
 
+Bug(ojan) css3/flexbox/flexbox-baseline.html [ Failure ]
+
 # Border-fit should happen at layout time rather than paint time
 webkit.org/b/111606 fast/borders/border-fit-2.html [ Skip ]
 webkit.org/b/111606 fast/borders/border-fit.html [ Skip ]

Modified: trunk/Source/WebCore/ChangeLog (146271 => 146272)


--- trunk/Source/WebCore/ChangeLog	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/Source/WebCore/ChangeLog	2013-03-19 22:37:55 UTC (rev 146272)
@@ -1,3 +1,33 @@
+2013-03-18  Ojan Vafai  <o...@chromium.org>
+
+        Make intrinsic size keywords on flexboxes work
+        https://bugs.webkit.org/show_bug.cgi?id=112652
+
+        Reviewed by Tony Chang.
+
+        Tests: fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html
+               fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html
+
+        * platform/Length.h:
+        (WebCore::Length::isSpecifiedOrIntrinsic):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax):
+        (WebCore::RenderBox::computeLogicalWidthInRegion):
+        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
+        Pass in the Length so that RenderFlexibleBox can call this method and avoid
+        doing a bunch of code duplication.
+
+        * rendering/RenderBox.h:
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
+        Instead of just calling valueForLength, call computeLogicalWidthInRegionUsing so that
+        we properly resolve intrinsic Length types. Incidentally, this should also make viewport
+        percentage units work.
+
+        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
+        Resolve intrinsic min/max Lengths. Also, instead of calling minPreferredLogicalWidth for the
+        min-width: auto case, call computeMainAxisExtentForChild to correctly compute the min intrinsic size.
+
 2013-03-19  Geoffrey Garen  <gga...@apple.com>
 
         Try to fix the Windows build.

Modified: trunk/Source/WebCore/platform/Length.h (146271 => 146272)


--- trunk/Source/WebCore/platform/Length.h	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/Source/WebCore/platform/Length.h	2013-03-19 22:37:55 UTC (rev 146272)
@@ -223,6 +223,7 @@
     bool isLegacyIntrinsic() const { return type() == Intrinsic || type() == MinIntrinsic; }
     bool isIntrinsic() const { return type() == MinContent || type() == MaxContent || type() == FillAvailable || type() == FitContent; }
     bool isSpecified() const { return type() == Fixed || type() == Percent || type() == Calculated || isViewportPercentage(); }
+    bool isSpecifiedOrIntrinsic() const { return isSpecified() || isIntrinsic(); }
     bool isCalculated() const { return type() == Calculated; }
     bool isCalculatedEqual(const Length&) const;
     bool isMinContent() const { return type() == MinContent; }

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (146271 => 146272)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2013-03-19 22:37:55 UTC (rev 146272)
@@ -481,8 +481,8 @@
 {
     RenderStyle* styleToUse = style();
     if (!styleToUse->logicalMaxWidth().isUndefined())
-        logicalWidth = min(logicalWidth, computeLogicalWidthInRegionUsing(MaxSize, availableWidth, cb, region, offsetFromLogicalTopOfFirstPage));
-    return max(logicalWidth, computeLogicalWidthInRegionUsing(MinSize, availableWidth, cb, region, offsetFromLogicalTopOfFirstPage));
+        logicalWidth = min(logicalWidth, computeLogicalWidthInRegionUsing(MaxSize, styleToUse->logicalMaxWidth(), availableWidth, cb, region, offsetFromLogicalTopOfFirstPage));
+    return max(logicalWidth, computeLogicalWidthInRegionUsing(MinSize, styleToUse->logicalMinWidth(), availableWidth, cb, region, offsetFromLogicalTopOfFirstPage));
 }
 
 LayoutUnit RenderBox::constrainLogicalHeightByMinMax(LayoutUnit logicalHeight) const
@@ -2077,7 +2077,7 @@
         LayoutUnit containerWidthInInlineDirection = containerLogicalWidth;
         if (hasPerpendicularContainingBlock)
             containerWidthInInlineDirection = perpendicularContainingBlockLogicalHeight();
-        LayoutUnit preferredWidth = computeLogicalWidthInRegionUsing(MainOrPreferredSize, containerWidthInInlineDirection, cb, region, offsetFromLogicalTopOfFirstPage);
+        LayoutUnit preferredWidth = computeLogicalWidthInRegionUsing(MainOrPreferredSize, styleToUse->logicalWidth(), containerWidthInInlineDirection, cb, region, offsetFromLogicalTopOfFirstPage);
         computedValues.m_extent = constrainLogicalWidthInRegionByMinMax(preferredWidth, containerWidthInInlineDirection, cb, region, offsetFromLogicalTopOfFirstPage);
     }
 
@@ -2147,20 +2147,9 @@
     return 0;
 }
 
-LayoutUnit RenderBox::computeLogicalWidthInRegionUsing(SizeType widthType, LayoutUnit availableLogicalWidth,
+LayoutUnit RenderBox::computeLogicalWidthInRegionUsing(SizeType widthType, Length logicalWidth, LayoutUnit availableLogicalWidth,
     const RenderBlock* cb, RenderRegion* region, LayoutUnit offsetFromLogicalTopOfFirstPage) const
 {
-    RenderStyle* styleToUse = style();
-    Length logicalWidth;
-    if (widthType == MainOrPreferredSize)
-        logicalWidth = styleToUse->logicalWidth();
-    else if (widthType == MinSize)
-        logicalWidth = styleToUse->logicalMinWidth();
-    else
-        logicalWidth = styleToUse->logicalMaxWidth();
-
-    ASSERT(!logicalWidth.isUndefined());
-
     if (widthType == MinSize && logicalWidth.isAuto())
         return adjustBorderBoxLogicalWidthForBoxSizing(0);
     

Modified: trunk/Source/WebCore/rendering/RenderBox.h (146271 => 146272)


--- trunk/Source/WebCore/rendering/RenderBox.h	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2013-03-19 22:37:55 UTC (rev 146272)
@@ -409,7 +409,7 @@
 
     LayoutUnit shrinkLogicalWidthToAvoidFloats(LayoutUnit childMarginStart, LayoutUnit childMarginEnd, const RenderBlock* cb, RenderRegion*, LayoutUnit offsetFromLogicalTopOfFirstPage) const;
 
-    LayoutUnit computeLogicalWidthInRegionUsing(SizeType, LayoutUnit availableLogicalWidth, const RenderBlock* containingBlock, RenderRegion*, LayoutUnit offsetFromLogicalTopOfFirstPage) const;
+    LayoutUnit computeLogicalWidthInRegionUsing(SizeType, Length, LayoutUnit availableLogicalWidth, const RenderBlock* containingBlock, RenderRegion*, LayoutUnit offsetFromLogicalTopOfFirstPage) const;
     LayoutUnit computeLogicalHeightUsing(SizeType, const Length& height) const;
     LayoutUnit computeContentLogicalHeight(SizeType, const Length& height) const;
     LayoutUnit computeContentAndScrollbarLogicalHeightUsing(SizeType, const Length& height) const;

Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp (146271 => 146272)


--- trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp	2013-03-19 22:30:31 UTC (rev 146271)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp	2013-03-19 22:37:55 UTC (rev 146272)
@@ -536,7 +536,12 @@
     // to figure out the logical height/width.
     if (isColumnFlow())
         return child->computeContentLogicalHeight(sizeType, size);
-    return child->adjustContentBoxLogicalWidthForBoxSizing(valueForLength(size, contentLogicalWidth(), view()));
+    if (size.isAuto())
+        return -1;
+    // FIXME: Figure out how this should work for regions and pass in the appropriate values.
+    LayoutUnit offsetFromLogicalTopOfFirstPage = 0;
+    RenderRegion* region = 0;
+    return child->computeLogicalWidthInRegionUsing(sizeType, size, contentLogicalWidth(), this, region, offsetFromLogicalTopOfFirstPage) - child->borderAndPaddingLogicalWidth();
 }
 
 WritingMode RenderFlexibleBox::transformedWritingMode() const
@@ -921,9 +926,8 @@
 
 LayoutUnit RenderFlexibleBox::adjustChildSizeForMinAndMax(RenderBox* child, LayoutUnit childSize)
 {
-    // FIXME: Support intrinsic min/max lengths.
     Length max = isHorizontalFlow() ? child->style()->maxWidth() : child->style()->maxHeight();
-    if (max.isSpecified()) {
+    if (max.isSpecifiedOrIntrinsic()) {
         LayoutUnit maxExtent = computeMainAxisExtentForChild(child, MaxSize, max);
         if (maxExtent != -1 && childSize > maxExtent)
             childSize = maxExtent;
@@ -931,11 +935,13 @@
 
     Length min = isHorizontalFlow() ? child->style()->minWidth() : child->style()->minHeight();
     LayoutUnit minExtent = 0;
-    if (min.isSpecified())
+    if (min.isSpecifiedOrIntrinsic())
         minExtent = computeMainAxisExtentForChild(child, MinSize, min);
     else if (min.isAuto()) {
-        minExtent = hasOrthogonalFlow(child) ? child->logicalHeight() : child->minPreferredLogicalWidth();
-        minExtent -= mainAxisBorderAndPaddingExtentForChild(child);
+        if (hasOrthogonalFlow(child))
+            minExtent = child->logicalHeight() - child->borderAndPaddingLogicalHeight();
+        else
+            minExtent = computeMainAxisExtentForChild(child, MinSize, Length(MinContent));
     }
     return std::max(childSize, minExtent);
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to