Index: third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp b/third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp |
index ff138a75425ef30927cf662321e434e7097bdf63..ce7bfc18c1bb34d5cd26f584a344f0c1e41afef1 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp |
@@ -50,7 +50,7 @@ LayoutMultiColumnSet* LayoutMultiColumnSet::createAnonymous(LayoutFlowThread& fl |
return layoutObject; |
} |
-unsigned LayoutMultiColumnSet::fragmentainerGroupIndexAtFlowThreadOffset(LayoutUnit flowThreadOffset) const |
+unsigned LayoutMultiColumnSet::fragmentainerGroupIndexAtFlowThreadOffset(LayoutUnit flowThreadOffset, PageBoundaryRule rule) const |
{ |
ASSERT(m_fragmentainerGroups.size() > 0); |
if (flowThreadOffset <= 0) |
@@ -58,8 +58,12 @@ unsigned LayoutMultiColumnSet::fragmentainerGroupIndexAtFlowThreadOffset(LayoutU |
// TODO(mstensho): Introduce an interval tree or similar to speed up this. |
for (unsigned index = 0; index < m_fragmentainerGroups.size(); index++) { |
const auto& row = m_fragmentainerGroups[index]; |
- if (row.logicalTopInFlowThread() <= flowThreadOffset && row.logicalBottomInFlowThread() > flowThreadOffset) |
+ if (rule == AssociateWithLatterPage) { |
+ if (row.logicalTopInFlowThread() <= flowThreadOffset && row.logicalBottomInFlowThread() > flowThreadOffset) |
+ return index; |
+ } else if (row.logicalTopInFlowThread() < flowThreadOffset && row.logicalBottomInFlowThread() >= flowThreadOffset) { |
return index; |
+ } |
} |
return m_fragmentainerGroups.size() - 1; |
} |
@@ -104,12 +108,12 @@ LayoutUnit LayoutMultiColumnSet::pageLogicalHeightForOffset(LayoutUnit offsetInF |
return std::max(LayoutUnit(1), multicolHeightWithExtraRow - currentMulticolHeight); |
} |
} |
- return fragmentainerGroupAtFlowThreadOffset(offsetInFlowThread).logicalHeight(); |
+ return fragmentainerGroupAtFlowThreadOffset(offsetInFlowThread, AssociateWithLatterPage).logicalHeight(); |
} |
LayoutUnit LayoutMultiColumnSet::pageRemainingLogicalHeightForOffset(LayoutUnit offsetInFlowThread, PageBoundaryRule pageBoundaryRule) const |
{ |
- const MultiColumnFragmentainerGroup& row = fragmentainerGroupAtFlowThreadOffset(offsetInFlowThread); |
+ const MultiColumnFragmentainerGroup& row = fragmentainerGroupAtFlowThreadOffset(offsetInFlowThread, pageBoundaryRule); |
LayoutUnit pageLogicalHeight = row.logicalHeight(); |
ASSERT(pageLogicalHeight); // It's not allowed to call this method if the height is unknown. |
LayoutUnit pageLogicalBottom = row.columnLogicalTopForOffset(offsetInFlowThread) + pageLogicalHeight; |
@@ -291,7 +295,7 @@ bool LayoutMultiColumnSet::heightIsAuto() const |
LayoutSize LayoutMultiColumnSet::flowThreadTranslationAtOffset(LayoutUnit blockOffset, PageBoundaryRule rule, CoordinateSpaceConversion mode) const |
{ |
- return fragmentainerGroupAtFlowThreadOffset(blockOffset).flowThreadTranslationAtOffset(blockOffset, rule, mode); |
+ return fragmentainerGroupAtFlowThreadOffset(blockOffset, rule).flowThreadTranslationAtOffset(blockOffset, rule, mode); |
} |
LayoutPoint LayoutMultiColumnSet::visualPointToFlowThreadPoint(const LayoutPoint& visualPoint) const |
@@ -302,7 +306,7 @@ LayoutPoint LayoutMultiColumnSet::visualPointToFlowThreadPoint(const LayoutPoint |
LayoutUnit LayoutMultiColumnSet::pageLogicalTopForOffset(LayoutUnit offset) const |
{ |
- return fragmentainerGroupAtFlowThreadOffset(offset).columnLogicalTopForOffset(offset); |
+ return fragmentainerGroupAtFlowThreadOffset(offset, AssociateWithLatterPage).columnLogicalTopForOffset(offset); |
} |
bool LayoutMultiColumnSet::recalculateColumnHeight() |