| Index: Source/core/layout/LayoutBlockFlow.cpp
|
| diff --git a/Source/core/layout/LayoutBlockFlow.cpp b/Source/core/layout/LayoutBlockFlow.cpp
|
| index 01ab7038773e0ec0bc5541ad2ac6054d82546cd0..3a221f7a5f242115be8f700535e67436b70f34a8 100644
|
| --- a/Source/core/layout/LayoutBlockFlow.cpp
|
| +++ b/Source/core/layout/LayoutBlockFlow.cpp
|
| @@ -153,7 +153,7 @@ static bool inNormalFlow(LayoutBox* child)
|
| LayoutBlock* curr = child->containingBlock();
|
| LayoutView* layoutView = child->view();
|
| while (curr && curr != layoutView) {
|
| - if (curr->hasColumns() || curr->isLayoutFlowThread())
|
| + if (curr->isLayoutFlowThread())
|
| return true;
|
| if (curr->isFloatingOrOutOfFlowPositioned())
|
| return false;
|
| @@ -209,29 +209,6 @@ void LayoutBlockFlow::checkForPaginationLogicalHeightChange(LayoutUnit& pageLogi
|
| LayoutUnit columnHeight = computedValues.m_extent - borderAndPaddingLogicalHeight() - scrollbarLogicalHeight();
|
| pageLogicalHeightChanged = columnHeight != flowThread->columnHeightAvailable();
|
| flowThread->setColumnHeightAvailable(std::max<LayoutUnit>(columnHeight, 0));
|
| - } else if (hasColumns()) {
|
| - ColumnInfo* colInfo = columnInfo();
|
| -
|
| - if (!pageLogicalHeight) {
|
| - LayoutUnit oldLogicalHeight = logicalHeight();
|
| - setLogicalHeight(0);
|
| - // We need to go ahead and set our explicit page height if one exists, so that we can
|
| - // avoid doing two layout passes.
|
| - updateLogicalHeight();
|
| - LayoutUnit columnHeight = contentLogicalHeight();
|
| - if (columnHeight > 0) {
|
| - pageLogicalHeight = columnHeight;
|
| - hasSpecifiedPageLogicalHeight = true;
|
| - }
|
| - setLogicalHeight(oldLogicalHeight);
|
| - }
|
| - if (colInfo->columnHeight() != pageLogicalHeight && everHadLayout()) {
|
| - colInfo->setColumnHeight(pageLogicalHeight);
|
| - pageLogicalHeightChanged = true;
|
| - }
|
| -
|
| - if (!hasSpecifiedPageLogicalHeight && !pageLogicalHeight)
|
| - colInfo->clearForcedBreaks();
|
| } else if (isLayoutFlowThread()) {
|
| LayoutFlowThread* flowThread = toLayoutFlowThread(this);
|
|
|
| @@ -250,47 +227,6 @@ void LayoutBlockFlow::checkForPaginationLogicalHeightChange(LayoutUnit& pageLogi
|
| }
|
| }
|
|
|
| -bool LayoutBlockFlow::shouldRelayoutForPagination(LayoutUnit& pageLogicalHeight, LayoutUnit layoutOverflowLogicalBottom) const
|
| -{
|
| - // FIXME: We don't balance properly at all in the presence of forced page breaks. We need to understand what
|
| - // the distance between forced page breaks is so that we can avoid making the minimum column height too tall.
|
| - ColumnInfo* colInfo = columnInfo();
|
| - LayoutUnit columnHeight = pageLogicalHeight;
|
| - const int minColumnCount = colInfo->forcedBreaks() + 1;
|
| - const int desiredColumnCount = colInfo->desiredColumnCount();
|
| - if (minColumnCount >= desiredColumnCount) {
|
| - // The forced page breaks are in control of the balancing. Just set the column height to the
|
| - // maximum page break distance.
|
| - if (!pageLogicalHeight) {
|
| - LayoutUnit distanceBetweenBreaks = std::max<LayoutUnit>(colInfo->maximumDistanceBetweenForcedBreaks(),
|
| - view()->layoutState()->pageLogicalOffset(*this, borderBefore() + paddingBefore() + layoutOverflowLogicalBottom) - colInfo->forcedBreakOffset());
|
| - columnHeight = std::max(colInfo->minimumColumnHeight(), distanceBetweenBreaks);
|
| - }
|
| - } else if (layoutOverflowLogicalBottom > boundedMultiply(pageLogicalHeight, desiredColumnCount)) {
|
| - // Now that we know the intrinsic height of the columns, we have to rebalance them.
|
| - columnHeight = std::max<LayoutUnit>(colInfo->minimumColumnHeight(), ceilf(layoutOverflowLogicalBottom.toFloat() / desiredColumnCount));
|
| - }
|
| -
|
| - if (columnHeight && columnHeight != pageLogicalHeight) {
|
| - pageLogicalHeight = columnHeight;
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -void LayoutBlockFlow::setColumnCountAndHeight(unsigned count, LayoutUnit pageLogicalHeight)
|
| -{
|
| - ColumnInfo* colInfo = columnInfo();
|
| - if (pageLogicalHeight)
|
| - colInfo->setColumnCountAndHeight(count, pageLogicalHeight);
|
| -
|
| - if (columnCount(colInfo)) {
|
| - setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeight() + borderAfter() + paddingAfter() + scrollbarLogicalHeight());
|
| - m_overflow.clear();
|
| - }
|
| -}
|
| -
|
| void LayoutBlockFlow::setBreakAtLineToAvoidWidow(int lineToBreak)
|
| {
|
| ASSERT(lineToBreak >= 0);
|
| @@ -349,10 +285,8 @@ void LayoutBlockFlow::layoutBlock(bool relayoutChildren)
|
| LayoutAnalyzer::BlockScope analyzer(*this);
|
| SubtreeLayoutScope layoutScope(*this);
|
|
|
| - // Multiple passes might be required for column and pagination based layout
|
| - // In the case of the old column code the number of passes will only be two
|
| - // however, in the newer column code the number of passes could equal the
|
| - // number of columns.
|
| + // Multiple passes might be required for column based layout.
|
| + // The number of passes could be as high as the number of columns.
|
| bool done = false;
|
| LayoutUnit pageLogicalHeight = 0;
|
| while (!done)
|
| @@ -399,7 +333,7 @@ inline bool LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit &
|
| if (pageLogicalHeightChanged)
|
| relayoutChildren = true;
|
|
|
| - LayoutState state(*this, locationOffset(), pageLogicalHeight, pageLogicalHeightChanged, columnInfo(), logicalWidthChanged);
|
| + LayoutState state(*this, locationOffset(), pageLogicalHeight, pageLogicalHeightChanged, logicalWidthChanged);
|
|
|
| // We use four values, maxTopPos, maxTopNeg, maxBottomPos, and maxBottomNeg, to track
|
| // our current maximal positive and negative margins. These values are used when we
|
| @@ -444,21 +378,6 @@ inline bool LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit &
|
| setChildNeedsLayout(MarkOnlyThis);
|
| return false;
|
| }
|
| - } else if (hasColumns()) {
|
| - OwnPtr<OverflowModel> savedOverflow = m_overflow.release();
|
| - if (childrenInline())
|
| - addOverflowFromInlineChildren();
|
| - else
|
| - addOverflowFromBlockChildren();
|
| - LayoutUnit layoutOverflowLogicalBottom = (isHorizontalWritingMode() ? layoutOverflowRect().maxY() : layoutOverflowRect().maxX()) - borderBefore() - paddingBefore();
|
| - m_overflow = savedOverflow.release();
|
| -
|
| - if (!hasSpecifiedPageLogicalHeight && shouldRelayoutForPagination(pageLogicalHeight, layoutOverflowLogicalBottom)) {
|
| - setEverHadLayout(true);
|
| - return false;
|
| - }
|
| -
|
| - setColumnCountAndHeight(ceilf(layoutOverflowLogicalBottom.toFloat() / pageLogicalHeight.toFloat()), pageLogicalHeight.toFloat());
|
| }
|
|
|
| if (shouldBreakAtLineToAvoidWidow()) {
|
| @@ -868,7 +787,7 @@ void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, La
|
|
|
| LayoutUnit LayoutBlockFlow::adjustForUnsplittableChild(LayoutBox& child, LayoutUnit logicalOffset, bool includeMargins)
|
| {
|
| - bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns() || flowThreadContainingBlock();
|
| + bool checkColumnBreaks = flowThreadContainingBlock();
|
| bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogicalHeight();
|
| bool isUnsplittable = child.isUnsplittableForPagination() || (checkColumnBreaks && child.style()->columnBreakInside() == PBAVOID)
|
| || (checkPageBreaks && child.style()->pageBreakInside() == PBAVOID);
|
| @@ -1731,20 +1650,15 @@ LayoutUnit LayoutBlockFlow::applyBeforeBreak(LayoutBox& child, LayoutUnit logica
|
| {
|
| // FIXME: Add page break checking here when we support printing.
|
| LayoutFlowThread* flowThread = flowThreadContainingBlock();
|
| - bool isInsideMulticolFlowThread = flowThread;
|
| - bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()->isPaginatingColumns();
|
| + bool checkColumnBreaks = flowThread;
|
| bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogicalHeight(); // FIXME: Once columns can print we have to check this.
|
| bool checkBeforeAlways = (checkColumnBreaks && child.style()->columnBreakBefore() == PBALWAYS)
|
| || (checkPageBreaks && child.style()->pageBreakBefore() == PBALWAYS);
|
| if (checkBeforeAlways && inNormalFlow(&child)) {
|
| if (checkColumnBreaks) {
|
| - if (isInsideMulticolFlowThread) {
|
| - LayoutUnit offsetBreakAdjustment = 0;
|
| - if (flowThread->addForcedColumnBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, &child, true, &offsetBreakAdjustment))
|
| - return logicalOffset + offsetBreakAdjustment;
|
| - } else {
|
| - view()->layoutState()->addForcedColumnBreak(child, logicalOffset);
|
| - }
|
| + LayoutUnit offsetBreakAdjustment = 0;
|
| + if (flowThread->addForcedColumnBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, &child, true, &offsetBreakAdjustment))
|
| + return logicalOffset + offsetBreakAdjustment;
|
| }
|
| return nextPageLogicalTop(logicalOffset, IncludePageBoundary);
|
| }
|
| @@ -1755,8 +1669,7 @@ LayoutUnit LayoutBlockFlow::applyAfterBreak(LayoutBox& child, LayoutUnit logical
|
| {
|
| // FIXME: Add page break checking here when we support printing.
|
| LayoutFlowThread* flowThread = flowThreadContainingBlock();
|
| - bool isInsideMulticolFlowThread = flowThread;
|
| - bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()->isPaginatingColumns();
|
| + bool checkColumnBreaks = flowThread;
|
| bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogicalHeight(); // FIXME: Once columns can print we have to check this.
|
| bool checkAfterAlways = (checkColumnBreaks && child.style()->columnBreakAfter() == PBALWAYS)
|
| || (checkPageBreaks && child.style()->pageBreakAfter() == PBALWAYS);
|
| @@ -1765,13 +1678,9 @@ LayoutUnit LayoutBlockFlow::applyAfterBreak(LayoutBox& child, LayoutUnit logical
|
| marginInfo.clearMargin();
|
|
|
| if (checkColumnBreaks) {
|
| - if (isInsideMulticolFlowThread) {
|
| - LayoutUnit offsetBreakAdjustment = 0;
|
| - if (flowThread->addForcedColumnBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, &child, false, &offsetBreakAdjustment))
|
| - return logicalOffset + offsetBreakAdjustment;
|
| - } else {
|
| - view()->layoutState()->addForcedColumnBreak(child, logicalOffset);
|
| - }
|
| + LayoutUnit offsetBreakAdjustment = 0;
|
| + if (flowThread->addForcedColumnBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, &child, false, &offsetBreakAdjustment))
|
| + return logicalOffset + offsetBreakAdjustment;
|
| }
|
| return nextPageLogicalTop(logicalOffset, IncludePageBoundary);
|
| }
|
| @@ -1795,7 +1704,7 @@ void LayoutBlockFlow::addOverflowFromFloats()
|
| void LayoutBlockFlow::computeOverflow(LayoutUnit oldClientAfterEdge, bool recomputeFloats)
|
| {
|
| LayoutBlock::computeOverflow(oldClientAfterEdge, recomputeFloats);
|
| - if (!hasColumns() && (recomputeFloats || createsNewFormattingContext() || hasSelfPaintingLayer()))
|
| + if (recomputeFloats || createsNewFormattingContext() || hasSelfPaintingLayer())
|
| addOverflowFromFloats();
|
| }
|
|
|
| @@ -2111,9 +2020,6 @@ void LayoutBlockFlow::invalidatePaintForOverflow()
|
| else
|
| paintInvalidationRect = LayoutRect(m_paintInvalidationLogicalTop, paintInvalidationLogicalLeft, m_paintInvalidationLogicalBottom - m_paintInvalidationLogicalTop, paintInvalidationLogicalRight - paintInvalidationLogicalLeft);
|
|
|
| - // The paint invalidation rect may be split across columns, in which case adjustRectForColumns() will return the union.
|
| - adjustRectForColumns(paintInvalidationRect);
|
| -
|
| if (hasOverflowClip()) {
|
| // Adjust the paint invalidation rect for scroll offset
|
| paintInvalidationRect.move(-scrolledContentOffset());
|
| @@ -2506,7 +2412,7 @@ bool LayoutBlockFlow::positionNewFloats(LineWidth* width)
|
|
|
| bool LayoutBlockFlow::hasOverhangingFloat(LayoutBox* layoutBox)
|
| {
|
| - if (!m_floatingObjects || hasColumns() || !parent())
|
| + if (!m_floatingObjects || !parent())
|
| return false;
|
|
|
| const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
|
| @@ -2752,7 +2658,7 @@ GapRects LayoutBlockFlow::selectionGaps(const LayoutBlock* rootBlock, const Layo
|
|
|
| GapRects result;
|
|
|
| - if (hasColumns() || hasTransformRelatedProperty() || style()->columnSpan())
|
| + if (hasTransformRelatedProperty() || style()->columnSpan())
|
| return result;
|
|
|
| if (childrenInline())
|
| @@ -3068,9 +2974,6 @@ LayoutMultiColumnFlowThread* LayoutBlockFlow::createMultiColumnFlowThread(FlowTh
|
|
|
| void LayoutBlockFlow::createOrDestroyMultiColumnFlowThreadIfNeeded(const ComputedStyle* oldStyle)
|
| {
|
| - if (!RuntimeEnabledFeatures::regionBasedColumnsEnabled())
|
| - return;
|
| -
|
| // Paged overflow trumps multicol in this implementation. Ideally, it should be possible to have
|
| // both paged overflow and multicol on the same element, but then we need two flow
|
| // threads. Anyway, this is nothing to worry about until we can actually nest multicol properly
|
|
|