Chromium Code Reviews| Index: Source/core/rendering/RenderBlockFlow.cpp |
| diff --git a/Source/core/rendering/RenderBlockFlow.cpp b/Source/core/rendering/RenderBlockFlow.cpp |
| index b5994d08990b45aa1ce3e574ec06079b2622e745..5d7a47b8a5c040eb278d374d3e19402d31023d5a 100644 |
| --- a/Source/core/rendering/RenderBlockFlow.cpp |
| +++ b/Source/core/rendering/RenderBlockFlow.cpp |
| @@ -379,7 +379,6 @@ inline bool RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit & |
| m_repaintLogicalTop = 0; |
| m_repaintLogicalBottom = 0; |
| - LayoutUnit maxFloatLogicalBottom = 0; |
| if (!firstChild() && !isAnonymousBlock()) |
| setChildrenInline(true); |
| @@ -388,7 +387,7 @@ inline bool RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit & |
| if (childrenInline()) |
| layoutInlineChildren(relayoutChildren, m_repaintLogicalTop, m_repaintLogicalBottom, afterEdge); |
| else |
| - layoutBlockChildren(relayoutChildren, maxFloatLogicalBottom, layoutScope, beforeEdge, afterEdge); |
| + layoutBlockChildren(relayoutChildren, layoutScope, beforeEdge, afterEdge); |
| // Expand our intrinsic height to encompass floats. |
| if (lowestFloatLogicalBottom() > (logicalHeight() - afterEdge) && createsBlockFormattingContext()) |
| @@ -430,15 +429,14 @@ inline bool RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit & |
| updateLogicalHeight(); |
| LayoutUnit newHeight = logicalHeight(); |
| - if (oldHeight != newHeight) { |
| - if (oldHeight > newHeight && maxFloatLogicalBottom > newHeight && !childrenInline()) { |
| - // One of our children's floats may have become an overhanging float for us. We need to look for it. |
| - for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { |
| - if (child->isRenderBlockFlow() && !child->isFloatingOrOutOfFlowPositioned()) { |
| - RenderBlockFlow* block = toRenderBlockFlow(child); |
| - if (block->lowestFloatLogicalBottom() + block->logicalTop() > newHeight) |
| - addOverhangingFloats(block, false); |
| - } |
| + if (oldHeight > newHeight && !childrenInline()) { |
| + // One of our children's floats may have become an overhanging float for us. |
| + for (RenderObject* child = lastChild(); child; child = child->previousSibling()) { |
| + if (child->isRenderBlockFlow() && !child->isFloatingOrOutOfFlowPositioned()) { |
| + RenderBlockFlow* block = toRenderBlockFlow(child); |
| + if (block->lowestFloatLogicalBottom() + block->logicalTop() <= newHeight) |
| + break; |
| + addOverhangingFloats(block, false); |
| } |
| } |
| } |
| @@ -502,7 +500,7 @@ void RenderBlockFlow::setLogicalTopForChild(RenderBox* child, LayoutUnit logical |
| } |
| } |
| -void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, LayoutUnit& previousFloatLogicalBottom, LayoutUnit& maxFloatLogicalBottom) |
| +void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, LayoutUnit& previousFloatLogicalBottom) |
| { |
| LayoutUnit oldPosMarginBefore = maxPositiveMarginBefore(); |
| LayoutUnit oldNegMarginBefore = maxNegativeMarginBefore(); |
| @@ -629,8 +627,8 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, |
| } |
| // If the child has overhanging floats that intrude into following siblings (or possibly out |
| // of this block), then the parent gets notified of the floats now. |
| - if (childRenderBlockFlow && childRenderBlockFlow->containsFloats()) |
| - maxFloatLogicalBottom = max(maxFloatLogicalBottom, addOverhangingFloats(childRenderBlockFlow, !childNeededLayout)); |
| + if (childRenderBlockFlow) |
|
leviw_travelin_and_unemployed
2014/04/15 20:27:30
You're taking out the check because we already che
|
| + addOverhangingFloats(childRenderBlockFlow, !childNeededLayout); |
| if (childOffset.width() || childOffset.height()) { |
| if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
| @@ -887,7 +885,7 @@ void RenderBlockFlow::rebuildFloatsFromIntruding() |
| } |
| } |
| -void RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, LayoutUnit& maxFloatLogicalBottom, SubtreeLayoutScope& layoutScope, LayoutUnit beforeEdge, LayoutUnit afterEdge) |
| +void RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, SubtreeLayoutScope& layoutScope, LayoutUnit beforeEdge, LayoutUnit afterEdge) |
| { |
| dirtyForLayoutFromPercentageHeightDescendants(layoutScope); |
| @@ -900,7 +898,6 @@ void RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, LayoutUnit& max |
| RenderObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren, layoutScope); |
| LayoutUnit previousFloatLogicalBottom = 0; |
| - maxFloatLogicalBottom = 0; |
| RenderBox* next = firstChildBox(); |
| RenderBox* lastNormalFlowChild = 0; |
| @@ -929,7 +926,7 @@ void RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, LayoutUnit& max |
| } |
| // Lay out the child. |
| - layoutBlockChild(child, marginInfo, previousFloatLogicalBottom, maxFloatLogicalBottom); |
| + layoutBlockChild(child, marginInfo, previousFloatLogicalBottom); |
| lastNormalFlowChild = child; |
| } |
| @@ -1178,7 +1175,7 @@ LayoutUnit RenderBlockFlow::collapseMargins(RenderBox* child, MarginInfo& margin |
| // any floats from the parent will now overhang. |
| LayoutUnit oldLogicalHeight = logicalHeight(); |
| setLogicalHeight(logicalTop); |
| - if (previousBlockFlow->containsFloats() && !previousBlockFlow->avoidsFloats() && (previousBlockFlow->logicalTop() + previousBlockFlow->lowestFloatLogicalBottom()) > logicalTop) |
| + if (!previousBlockFlow->avoidsFloats() && (previousBlockFlow->logicalTop() + previousBlockFlow->lowestFloatLogicalBottom()) > logicalTop) |
| addOverhangingFloats(previousBlockFlow, false); |
| setLogicalHeight(oldLogicalHeight); |
| @@ -2444,15 +2441,14 @@ void RenderBlockFlow::addIntrudingFloats(RenderBlockFlow* prev, LayoutUnit logic |
| } |
| } |
| -LayoutUnit RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool makeChildPaintOtherFloats) |
| +void RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool makeChildPaintOtherFloats) |
| { |
| // Prevent floats from being added to the canvas by the root element, e.g., <html>. |
| if (child->hasOverflowClip() || !child->containsFloats() || child->isDocumentElement() || child->hasColumns() || child->isWritingModeRoot()) |
| - return 0; |
| + return; |
| LayoutUnit childLogicalTop = child->logicalTop(); |
| LayoutUnit childLogicalLeft = child->logicalLeft(); |
| - LayoutUnit lowestFloatLogicalBottom = 0; |
| // Floats that will remain the child's responsibility to paint should factor into its |
| // overflow. |
| @@ -2461,7 +2457,6 @@ LayoutUnit RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool ma |
| FloatingObject* floatingObject = *childIt; |
| LayoutUnit logicalBottomForFloat = min(this->logicalBottomForFloat(floatingObject), LayoutUnit::max() - childLogicalTop); |
| LayoutUnit logicalBottom = childLogicalTop + logicalBottomForFloat; |
| - lowestFloatLogicalBottom = max(lowestFloatLogicalBottom, logicalBottom); |
| if (logicalBottom > logicalHeight()) { |
| // If the object is not in the list, we add it now. |
| @@ -2500,7 +2495,6 @@ LayoutUnit RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool ma |
| child->addOverflowFromChild(floatingObject->renderer(), LayoutSize(xPositionForFloatIncludingMargin(floatingObject), yPositionForFloatIncludingMargin(floatingObject))); |
| } |
| } |
| - return lowestFloatLogicalBottom; |
| } |
| LayoutUnit RenderBlockFlow::lowestFloatLogicalBottom(FloatingObject::Type floatType) const |