Index: third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp |
diff --git a/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp b/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp |
index e2fae001494443f1b73553c66da12291d449c651..5af30a3bff4a1202b6c641892aa9fdaf2a86ff2d 100644 |
--- a/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp |
+++ b/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp |
@@ -98,7 +98,7 @@ bool MultiColumnFragmentainerGroup::recalculateColumnHeight() |
return true; // Need another pass. |
} |
-LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUnit offsetInFlowThread) const |
+LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUnit offsetInFlowThread, CoordinateSpaceConversion mode) const |
{ |
LayoutMultiColumnFlowThread* flowThread = m_columnSet.multiColumnFlowThread(); |
unsigned columnIndex = columnIndexAtOffset(offsetInFlowThread); |
@@ -107,6 +107,9 @@ LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUn |
LayoutRect columnRect(columnRectAt(columnIndex)); |
m_columnSet.flipForWritingMode(columnRect); |
LayoutSize translationRelativeToGroup = columnRect.location() - portionRect.location(); |
+ LayoutSize translationRelativeToFlowThread = translationRelativeToGroup + offsetFromColumnSet() + m_columnSet.topLeftLocationOffset() - flowThread->topLeftLocationOffset(); |
+ if (mode == CoordinateSpaceConversion::Containing) |
+ return translationRelativeToFlowThread; |
LayoutSize enclosingTranslation; |
if (LayoutMultiColumnFlowThread* enclosingFlowThread = flowThread->enclosingFlowThread()) { |
@@ -114,11 +117,11 @@ LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUn |
// Translation that would map points in the coordinate space of the outermost flow thread to |
// visual points in the first column in the first fragmentainer group (row) in our multicol |
// container. |
- LayoutSize enclosingTranslationOrigin = enclosingFlowThread->flowThreadTranslationAtOffset(firstRow.blockOffsetInEnclosingFragmentationContext()); |
+ LayoutSize enclosingTranslationOrigin = enclosingFlowThread->flowThreadTranslationAtOffset(firstRow.blockOffsetInEnclosingFragmentationContext(), mode); |
// Translation that would map points in the coordinate space of the outermost flow thread to |
// visual points in the first column in this fragmentainer group. |
- enclosingTranslation = enclosingFlowThread->flowThreadTranslationAtOffset(blockOffsetInEnclosingFragmentationContext()); |
+ enclosingTranslation = enclosingFlowThread->flowThreadTranslationAtOffset(blockOffsetInEnclosingFragmentationContext(), mode); |
// What we ultimately return from this method is a translation that maps points in the |
// coordinate space of our flow thread to a visual point in a certain column in this |
@@ -129,7 +132,7 @@ LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUn |
enclosingTranslation -= enclosingTranslationOrigin; |
} |
- return enclosingTranslation + translationRelativeToGroup + offsetFromColumnSet() + m_columnSet.topLeftLocationOffset() - flowThread->topLeftLocationOffset(); |
+ return enclosingTranslation + translationRelativeToFlowThread; |
} |
LayoutUnit MultiColumnFragmentainerGroup::columnLogicalTopForOffset(LayoutUnit offsetInFlowThread) const |
@@ -184,7 +187,7 @@ LayoutRect MultiColumnFragmentainerGroup::fragmentsBoundingBox(const LayoutRect& |
flowThread->flipForWritingMode(startColumnFlowThreadOverflowPortion); |
LayoutRect startColumnRect(boundingBoxInFlowThread); |
startColumnRect.intersect(startColumnFlowThreadOverflowPortion); |
- startColumnRect.move(flowThreadTranslationAtOffset(logicalTopInFlowThreadAt(startColumn))); |
+ startColumnRect.move(flowThreadTranslationAtOffset(logicalTopInFlowThreadAt(startColumn), CoordinateSpaceConversion::Containing)); |
if (startColumn == endColumn) |
return startColumnRect; // It all takes place in one column. We're done. |
@@ -192,7 +195,7 @@ LayoutRect MultiColumnFragmentainerGroup::fragmentsBoundingBox(const LayoutRect& |
flowThread->flipForWritingMode(endColumnFlowThreadOverflowPortion); |
LayoutRect endColumnRect(boundingBoxInFlowThread); |
endColumnRect.intersect(endColumnFlowThreadOverflowPortion); |
- endColumnRect.move(flowThreadTranslationAtOffset(logicalTopInFlowThreadAt(endColumn))); |
+ endColumnRect.move(flowThreadTranslationAtOffset(logicalTopInFlowThreadAt(endColumn), CoordinateSpaceConversion::Containing)); |
return unionRect(startColumnRect, endColumnRect); |
} |
@@ -251,7 +254,7 @@ void MultiColumnFragmentainerGroup::collectLayerFragments(PaintLayerFragments& f |
PaintLayerFragment fragment; |
// Set the physical translation offset. |
- fragment.paginationOffset = toLayoutPoint(flowThreadTranslationAtOffset(logicalTopInFlowThreadAt(i))); |
+ fragment.paginationOffset = toLayoutPoint(flowThreadTranslationAtOffset(logicalTopInFlowThreadAt(i), CoordinateSpaceConversion::Visual)); |
// Set the overflow clip rect that corresponds to the column. |
fragment.paginationClip = flowThreadPortionOverflowRectAt(i); |