Index: third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
index 4731477579ec2afa4d170a3d00e8a856ae78947f..7a4e583df7aa4b9180ceedb195c799553f2c6703 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
@@ -37,8 +37,7 @@ LayoutMultiColumnFlowThread::LayoutMultiColumnFlowThread() |
: m_lastSetWorkedOn(nullptr) |
, m_columnCount(1) |
, m_columnHeightAvailable(0) |
- , m_inBalancingPass(false) |
- , m_needsColumnHeightsRecalculation(false) |
+ , m_columnHeightsChanged(false) |
, m_progressionIsInline(true) |
, m_isBeingEvacuated(false) |
{ |
@@ -354,25 +353,20 @@ void LayoutMultiColumnFlowThread::layoutColumns(SubtreeLayoutScope& layoutScope) |
// thread needs layout as well. |
layoutScope.setChildNeedsLayout(this); |
- m_needsColumnHeightsRecalculation = false; |
- |
m_blockOffsetInEnclosingFragmentationContext = enclosingFragmentationContext() ? multiColumnBlockFlow()->offsetFromLogicalTopOfFirstPage() : LayoutUnit(); |
for (LayoutBox* columnBox = firstMultiColumnBox(); columnBox; columnBox = columnBox->nextSiblingMultiColumnBox()) { |
if (!columnBox->isLayoutMultiColumnSet()) { |
ASSERT(columnBox->isLayoutMultiColumnSpannerPlaceholder()); // no other type is expected. |
- m_needsColumnHeightsRecalculation = true; |
continue; |
} |
LayoutMultiColumnSet* columnSet = toLayoutMultiColumnSet(columnBox); |
layoutScope.setChildNeedsLayout(columnSet); |
- if (!m_inBalancingPass) { |
+ if (!m_columnHeightsChanged) { |
// This is the initial layout pass. We need to reset the column height, because contents |
// typically have changed. |
columnSet->resetColumnHeight(); |
} |
- if (!m_needsColumnHeightsRecalculation) |
- m_needsColumnHeightsRecalculation = columnSet->heightIsAuto(); |
// Since column sets are regular block flow objects, and their position is changed in |
// regular block layout code (with no means for the multicol code to notice unless we add |
// hooks there), store the previous position now. If it changes in the imminent layout |
@@ -380,32 +374,10 @@ void LayoutMultiColumnFlowThread::layoutColumns(SubtreeLayoutScope& layoutScope) |
columnSet->storeOldPosition(); |
} |
+ m_columnHeightsChanged = false; |
invalidateColumnSets(); |
layout(); |
-} |
- |
-bool LayoutMultiColumnFlowThread::recalculateColumnHeights() |
-{ |
- // All column sets that needed layout have now been laid out, so we can finally validate them. |
validateColumnSets(); |
- |
- if (!m_needsColumnHeightsRecalculation) |
- return false; |
- |
- // Column heights may change here because of balancing. We may have to do multiple layout |
- // passes, depending on how the contents is fitted to the changed column heights. In most |
- // cases, laying out again twice or even just once will suffice. Sometimes we need more |
- // passes than that, though, but the number of retries should not exceed the number of |
- // columns, unless we have a bug. |
- bool needsRelayout = false; |
- for (LayoutMultiColumnSet* multicolSet = firstMultiColumnSet(); multicolSet; multicolSet = multicolSet->nextSiblingMultiColumnSet()) |
- needsRelayout |= multicolSet->recalculateColumnHeight(); |
- |
- if (needsRelayout) |
- setChildNeedsLayout(MarkOnlyThis); |
- |
- m_inBalancingPass = needsRelayout; |
- return needsRelayout; |
} |
void LayoutMultiColumnFlowThread::columnRuleStyleDidChange() |