Chromium Code Reviews| Index: Source/core/rendering/RenderMultiColumnSet.cpp |
| diff --git a/Source/core/rendering/RenderMultiColumnSet.cpp b/Source/core/rendering/RenderMultiColumnSet.cpp |
| index eee9aee2b43f70076d1e24d18b42c194744d8cd1..7311e3a30991dff23693f17ea58459514545cd1a 100644 |
| --- a/Source/core/rendering/RenderMultiColumnSet.cpp |
| +++ b/Source/core/rendering/RenderMultiColumnSet.cpp |
| @@ -193,7 +193,7 @@ LayoutUnit RenderMultiColumnSet::calculateColumnHeight(BalancedHeightCalculation |
| void RenderMultiColumnSet::addContentRun(LayoutUnit endOffsetFromFirstPage) |
| { |
| - if (!multiColumnFlowThread()->requiresBalancing()) |
| + if (!multiColumnFlowThread()->heightIsAuto()) |
| return; |
| if (!m_contentRuns.isEmpty() && endOffsetFromFirstPage <= m_contentRuns.last().breakOffset()) |
| return; |
| @@ -205,7 +205,7 @@ void RenderMultiColumnSet::addContentRun(LayoutUnit endOffsetFromFirstPage) |
| bool RenderMultiColumnSet::recalculateColumnHeight(BalancedHeightCalculation calculationMode) |
| { |
| - ASSERT(multiColumnFlowThread()->requiresBalancing()); |
| + ASSERT(multiColumnFlowThread()->heightIsAuto()); |
| LayoutUnit oldColumnHeight = m_columnHeight; |
| if (calculationMode == GuessFromFlowThreadPortion) { |
| @@ -254,7 +254,7 @@ void RenderMultiColumnSet::resetColumnHeight() |
| LayoutUnit oldColumnHeight = pageLogicalHeight(); |
| - if (multiColumnFlowThread()->requiresBalancing()) |
| + if (multiColumnFlowThread()->heightIsAuto()) |
| m_columnHeight = 0; |
| else |
| setAndConstrainColumnHeight(heightAdjustedForSetOffset(multiColumnFlowThread()->columnHeightAvailable())); |
| @@ -337,10 +337,15 @@ LayoutRect RenderMultiColumnSet::columnRectAt(unsigned index) const |
| LayoutUnit colLogicalTop = borderBefore() + paddingBefore(); |
| LayoutUnit colLogicalLeft = borderAndPaddingLogicalLeft(); |
| LayoutUnit colGap = columnGap(); |
| - if (style()->isLeftToRightDirection()) |
| - colLogicalLeft += index * (colLogicalWidth + colGap); |
| - else |
| - colLogicalLeft += contentLogicalWidth() - colLogicalWidth - index * (colLogicalWidth + colGap); |
| + |
| + if (multiColumnFlowThread()->progressionIsInline()) { |
| + if (style()->isLeftToRightDirection()) |
| + colLogicalLeft += index * (colLogicalWidth + colGap); |
| + else |
| + colLogicalLeft += contentLogicalWidth() - colLogicalWidth - index * (colLogicalWidth + colGap); |
| + } else { |
| + colLogicalTop += index * (colLogicalHeight + colGap); |
| + } |
| if (isHorizontalWritingMode()) |
| return LayoutRect(colLogicalLeft, colLogicalTop, colLogicalWidth, colLogicalHeight); |
| @@ -437,6 +442,9 @@ void RenderMultiColumnSet::paintColumnRules(PaintInfo& paintInfo, const LayoutPo |
| if (paintInfo.context->paintingDisabled()) |
| return; |
| + if (flowThread()->isRenderPagedFlowThread()) |
| + return; |
| + |
| RenderStyle* blockStyle = multiColumnBlockFlow()->style(); |
| const Color& ruleColor = resolveColor(blockStyle, CSSPropertyWebkitColumnRuleColor); |
| bool ruleTransparent = blockStyle->columnRuleIsTransparent(); |
| @@ -566,6 +574,12 @@ void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons |
| LayoutUnit colGap = columnGap(); |
| unsigned colCount = actualColumnCount(); |
| + RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread(); |
| + bool progressionIsInline = flowThread->progressionIsInline(); |
| + bool leftToRight = style()->isLeftToRightDirection(); |
| + |
| + LayoutUnit initialBlockOffset = logicalTop() - flowThread->logicalTop(); |
| + |
| for (unsigned i = startColumn; i <= endColumn; i++) { |
| // Get the portion of the flow thread that corresponds to this column. |
| LayoutRect flowThreadPortion = flowThreadPortionRectAt(i); |
| @@ -582,11 +596,15 @@ void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons |
| // We also need to intersect the dirty rect. We have to apply a translation and shift based off |
| // our column index. |
| LayoutPoint translationOffset; |
| - LayoutUnit inlineOffset = i * (colLogicalWidth + colGap); |
| - if (!style()->isLeftToRightDirection()) |
| + LayoutUnit inlineOffset = progressionIsInline ? i * (colLogicalWidth + colGap) : LayoutUnit(); |
| + if (!leftToRight) |
| inlineOffset = -inlineOffset; |
| translationOffset.setX(inlineOffset); |
| - LayoutUnit blockOffset = isHorizontalWritingMode() ? -flowThreadPortion.y() : -flowThreadPortion.x(); |
| + LayoutUnit blockOffset; |
| + if (progressionIsInline) |
| + blockOffset = initialBlockOffset + (isHorizontalWritingMode() ? -flowThreadPortion.y() : -flowThreadPortion.x()); |
| + else |
| + blockOffset = i * colGap; |
|
rune
2014/06/18 22:09:05
I had to stare at this for a while. I think this w
rune
2014/06/19 09:22:19
Never mind renaming. This is in RenderMultiColumnS
|
| if (isFlippedBlocksWritingMode(style()->writingMode())) |
| blockOffset = -blockOffset; |
| translationOffset.setY(blockOffset); |
| @@ -612,7 +630,7 @@ void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons |
| LayoutRect flippedFlowThreadOverflowPortion(flowThreadOverflowPortion); |
| // Flip it into more a physical (RenderLayer-style) rectangle. |
| - flowThread()->flipForWritingMode(flippedFlowThreadOverflowPortion); |
| + flowThread->flipForWritingMode(flippedFlowThreadOverflowPortion); |
| fragment.paginationClip = flippedFlowThreadOverflowPortion; |
| fragments.append(fragment); |
| } |