[New Multicolumn] Fix overflow computation for column blocks.
authorhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Feb 2013 02:02:24 +0000 (02:02 +0000)
committerhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Feb 2013 02:02:24 +0000 (02:02 +0000)
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:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@143546 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height-expected.html
LayoutTests/fast/multicol/newmulticol/column-rules-fixed-height.html
Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderMultiColumnSet.h
Source/WebCore/rendering/RenderRegion.cpp
Source/WebCore/rendering/RenderRegion.h
Source/WebCore/rendering/RenderRegionSet.h

index 2c2a89c..3455a01 100644 (file)
@@ -1,3 +1,13 @@
+2013-02-20  David Hyatt  <hyatt@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  <cbiesinger@chromium.org>
 
         Incorrect rendering for flex boxes with percentage height in a table cell
index ad21844..02dd3f2 100644 (file)
@@ -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="#">Vestibulum quam.</a>
index ce112e8..c0dd9f4 100644 (file)
@@ -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="#">Vestibulum quam.</a>
index 41fdbc2..0ebd8a6 100644 (file)
@@ -1,3 +1,24 @@
+2013-02-20  David Hyatt  <hyatt@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  <bajones@google.com>
  
         Printing WebGL canvases in Chrome uses stale data after first print
index 73587aa..a7e63c5 100644 (file)
@@ -4025,6 +4025,10 @@ void RenderBox::addVisualEffectOverflow()
 
 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.
index d8b90b3..547d149 100644 (file)
@@ -104,6 +104,10 @@ private:
     
     // 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;
 
index 37e2599..dfc172f 100644 (file)
@@ -232,6 +232,13 @@ void RenderRegion::updateRegionHasAutoLogicalHeightFlag()
     }
 }
 
+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);
index a6accaf..fb475c3 100644 (file)
@@ -135,18 +135,13 @@ protected:
     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;
 
index a70cc4c..aa8969d 100644 (file)
@@ -49,6 +49,9 @@ class RenderRegionSet : public RenderRegion {
 public:
     RenderRegionSet(Element*, RenderFlowThread*);
     
+protected:
+    virtual bool shouldHaveAutoLogicalHeight() const OVERRIDE { return false; }
+
 private:
     virtual void installFlowThread() OVERRIDE;