Title: [143546] trunk
Revision
143546
Author
hy...@apple.com
Date
2013-02-20 18:02:24 -0800 (Wed, 20 Feb 2013)

Log Message

[New Multicolumn] Fix overflow computation for column blocks.
https://bugs.webkit.org/show_bug.cgi?id=110392.

Reviewed by Simon Fraser.

Source/WebCore: 

* rendering/RenderBox.cpp:
(WebCore::RenderBox::addOverflowFromChild):
Exclude in-flow RenderFlowThreads from overflow propagation.

* rendering/RenderMultiColumnSet.h:
* rendering/RenderRegion.h:
(WebCore::RenderRegion::shouldHaveAutoLogicalHeight):
 * rendering/RenderRegionSet.h:
(RenderRegionSet):
Override shouldHaveAutoLogicalHeight to always be false
for region sets and for columns. Eventually we're going to try
to leverage this code to do column balancing, and that's why
RenderMultiColumnSet has a unique override.

LayoutTests: 

* fast/multicol/newmulticol/column-rules-fixed-height-expected.html:
* fast/multicol/newmulticol/column-rules-fixed-height.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (143545 => 143546)


--- trunk/LayoutTests/ChangeLog	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/LayoutTests/ChangeLog	2013-02-21 02:02:24 UTC (rev 143546)
@@ -1,3 +1,13 @@
+2013-02-20  David Hyatt  <hy...@apple.com>
+
+        [New Multicolumn] Fix overflow computation for column blocks.
+        https://bugs.webkit.org/show_bug.cgi?id=110392.
+
+        Reviewed by Simon Fraser.
+
+        * fast/multicol/newmulticol/column-rules-fixed-height-expected.html:
+        * fast/multicol/newmulticol/column-rules-fixed-height.html:
+
 2013-02-20  Christian Biesinger  <cbiesin...@chromium.org>
 
         Incorrect rendering for flex boxes with percentage height in a table cell

Modified: trunk/LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height-expected.html (143545 => 143546)


--- trunk/LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height-expected.html	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height-expected.html	2013-02-21 02:02:24 UTC (rev 143546)
@@ -1,4 +1,4 @@
-<body style="overflow:hidden">
+<body>
 <div style="-webkit-columns: 3; -webkit-column-rule: 4px solid maroon; padding: 0 10px; border:5px solid black; height:300px;">
 Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
 Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin bibendum justo ac enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed leo nulla, rutrum eu, dictum ut, posuere vel, arcu. Nam libero. Morbi orci. Maecenas pellentesque. Curabitur erat erat, ullamcorper at, gravida vitae, iaculis vitae, elit. Nullam quam. Quisque orci lectus, ullamcorper eu, imperdiet sed, accumsan et, ligula. Duis diam nisl, sagittis a, blandit volutpat, interdum sed, velit. <a href="" quam.</a>

Modified: trunk/LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height.html (143545 => 143546)


--- trunk/LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height.html	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height.html	2013-02-21 02:02:24 UTC (rev 143546)
@@ -1,7 +1,7 @@
 <script>
 internals.settings.setRegionBasedColumnsEnabled(true)
 </script>
-<body style="overflow:hidden">
+<body>
 <div style="-webkit-columns: 3; -webkit-column-rule: 4px solid maroon; padding: 0 10px; border:5px solid black; height:300px;">
 Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
 Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin bibendum justo ac enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed leo nulla, rutrum eu, dictum ut, posuere vel, arcu. Nam libero. Morbi orci. Maecenas pellentesque. Curabitur erat erat, ullamcorper at, gravida vitae, iaculis vitae, elit. Nullam quam. Quisque orci lectus, ullamcorper eu, imperdiet sed, accumsan et, ligula. Duis diam nisl, sagittis a, blandit volutpat, interdum sed, velit. <a href="" quam.</a>

Modified: trunk/Source/WebCore/ChangeLog (143545 => 143546)


--- trunk/Source/WebCore/ChangeLog	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/Source/WebCore/ChangeLog	2013-02-21 02:02:24 UTC (rev 143546)
@@ -1,3 +1,24 @@
+2013-02-20  David Hyatt  <hy...@apple.com>
+
+        [New Multicolumn] Fix overflow computation for column blocks.
+        https://bugs.webkit.org/show_bug.cgi?id=110392.
+
+        Reviewed by Simon Fraser.
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::addOverflowFromChild):
+        Exclude in-flow RenderFlowThreads from overflow propagation.
+
+        * rendering/RenderMultiColumnSet.h:
+        * rendering/RenderRegion.h:
+        (WebCore::RenderRegion::shouldHaveAutoLogicalHeight):
+         * rendering/RenderRegionSet.h:
+        (RenderRegionSet):
+        Override shouldHaveAutoLogicalHeight to always be false
+        for region sets and for columns. Eventually we're going to try
+        to leverage this code to do column balancing, and that's why
+        RenderMultiColumnSet has a unique override.
+
 2013-02-20  Brandon Jones  <bajo...@google.com>
  
         Printing WebGL canvases in Chrome uses stale data after first print

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (143545 => 143546)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2013-02-21 02:02:24 UTC (rev 143546)
@@ -4025,6 +4025,10 @@
 
 void RenderBox::addOverflowFromChild(RenderBox* child, const LayoutSize& delta)
 {
+    // Never allow flow threads to propagate overflow up to a parent.
+    if (child->isRenderFlowThread())
+        return;
+
     // Only propagate layout overflow from the child if the child isn't clipping its overflow.  If it is, then
     // its overflow is internal to it, and we don't care about it.  layoutOverflowRectForPropagation takes care of this
     // and just propagates the border box rect instead.

Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSet.h (143545 => 143546)


--- trunk/Source/WebCore/rendering/RenderMultiColumnSet.h	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSet.h	2013-02-21 02:02:24 UTC (rev 143546)
@@ -104,6 +104,10 @@
     
     // FIXME: This will change once we have column sets constrained by enclosing pages, etc.
     virtual LayoutUnit logicalHeightOfAllFlowThreadContent() const OVERRIDE { return m_computedColumnHeight; }
+
+    // FIXME: For now we return false, but it's likely we will leverage the auto height region code to do column
+    // balancing. That's why we have an override of this function that is distinct from RenderRegionSet's override.
+    virtual bool shouldHaveAutoLogicalHeight() const OVERRIDE { return false; }
     
     virtual void repaintFlowThreadContent(const LayoutRect& repaintRect, bool immediate) const OVERRIDE;
 

Modified: trunk/Source/WebCore/rendering/RenderRegion.cpp (143545 => 143546)


--- trunk/Source/WebCore/rendering/RenderRegion.cpp	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/Source/WebCore/rendering/RenderRegion.cpp	2013-02-21 02:02:24 UTC (rev 143546)
@@ -232,6 +232,13 @@
     }
 }
 
+bool RenderRegion::shouldHaveAutoLogicalHeight() const
+{
+    bool hasSpecifiedEndpointsForHeight = style()->logicalTop().isSpecified() && style()->logicalBottom().isSpecified();
+    bool hasAnchoredEndpointsForHeight = isOutOfFlowPositioned() && hasSpecifiedEndpointsForHeight;
+    return style()->logicalHeight().isAuto() && !hasAnchoredEndpointsForHeight;
+}
+    
 void RenderRegion::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
 {
     RenderBlock::styleDidChange(diff, oldStyle);

Modified: trunk/Source/WebCore/rendering/RenderRegion.h (143545 => 143546)


--- trunk/Source/WebCore/rendering/RenderRegion.h	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/Source/WebCore/rendering/RenderRegion.h	2013-02-21 02:02:24 UTC (rev 143546)
@@ -135,18 +135,13 @@
     void repaintFlowThreadContentRectangle(const LayoutRect& repaintRect, bool immediate, const LayoutRect& flowThreadPortionRect,
         const LayoutRect& flowThreadPortionOverflowRect, const LayoutPoint& regionLocation) const;
 
+    virtual bool shouldHaveAutoLogicalHeight() const;
+
 private:
     virtual const char* renderName() const { return "RenderRegion"; }
 
     virtual bool canHaveChildren() const OVERRIDE { return false; }
 
-    bool shouldHaveAutoLogicalHeight() const
-    {
-        bool hasSpecifiedEndpointsForHeight = style()->logicalTop().isSpecified() && style()->logicalBottom().isSpecified();
-        bool hasAnchoredEndpointsForHeight = isOutOfFlowPositioned() && hasSpecifiedEndpointsForHeight;
-        return style()->logicalHeight().isAuto() && !hasAnchoredEndpointsForHeight;
-    }
-
     virtual void insertedIntoTree() OVERRIDE;
     virtual void willBeRemovedFromTree() OVERRIDE;
 

Modified: trunk/Source/WebCore/rendering/RenderRegionSet.h (143545 => 143546)


--- trunk/Source/WebCore/rendering/RenderRegionSet.h	2013-02-21 01:35:01 UTC (rev 143545)
+++ trunk/Source/WebCore/rendering/RenderRegionSet.h	2013-02-21 02:02:24 UTC (rev 143546)
@@ -49,6 +49,9 @@
 public:
     RenderRegionSet(Element*, RenderFlowThread*);
     
+protected:
+    virtual bool shouldHaveAutoLogicalHeight() const OVERRIDE { return false; }
+
 private:
     virtual void installFlowThread() OVERRIDE;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to