Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[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:



Canonical link: https://commits.webkit.org/128698@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@143546 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
David Hyatt committed Feb 21, 2013
1 parent 5d68520 commit 09be441
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 9 deletions.
10 changes: 10 additions & 0 deletions LayoutTests/ChangeLog
@@ -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
Expand Down
@@ -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>
Expand Down
@@ -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>
Expand Down
21 changes: 21 additions & 0 deletions Source/WebCore/ChangeLog
@@ -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
Expand Down
4 changes: 4 additions & 0 deletions Source/WebCore/rendering/RenderBox.cpp
Expand Up @@ -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.
Expand Down
4 changes: 4 additions & 0 deletions Source/WebCore/rendering/RenderMultiColumnSet.h
Expand Up @@ -104,6 +104,10 @@ class RenderMultiColumnSet : public RenderRegionSet {

// 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;

Expand Down
7 changes: 7 additions & 0 deletions Source/WebCore/rendering/RenderRegion.cpp
Expand Up @@ -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);
Expand Down
9 changes: 2 additions & 7 deletions Source/WebCore/rendering/RenderRegion.h
Expand Up @@ -135,18 +135,13 @@ class RenderRegion : public RenderBlock {
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;

Expand Down
3 changes: 3 additions & 0 deletions Source/WebCore/rendering/RenderRegionSet.h
Expand Up @@ -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;

Expand Down

0 comments on commit 09be441

Please sign in to comment.