| 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 0b9ed3a64619e1c88b37719433a8a27b8f55e6d1..c8a234d1e1cb9aee533fa542ee1176a5ddbf9f30 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnSet.cpp
|
| @@ -97,6 +97,36 @@ bool LayoutMultiColumnSet::isPageLogicalHeightKnown() const
|
| return firstFragmentainerGroup().logicalHeight();
|
| }
|
|
|
| +LayoutUnit LayoutMultiColumnSet::nextLogicalTopForUnbreakableContent(LayoutUnit flowThreadOffset, LayoutUnit contentLogicalHeight) const
|
| +{
|
| + ASSERT(pageLogicalTopForOffset(flowThreadOffset) == flowThreadOffset);
|
| + LayoutMultiColumnFlowThread* enclosingFlowThread = multiColumnFlowThread()->enclosingFlowThread();
|
| + if (!enclosingFlowThread) {
|
| + // If there's no enclosing fragmentation context, there'll ever be only one row, and all
|
| + // columns there will have the same height.
|
| + return flowThreadOffset;
|
| + }
|
| +
|
| + // Assert the problematic situation. If we have no problem with the column height, why are we
|
| + // even here?
|
| + ASSERT(pageLogicalHeightForOffset(flowThreadOffset) < contentLogicalHeight);
|
| +
|
| + // There's a likelihood for subsequent rows to be taller than the first one.
|
| + // TODO(mstensho): if we're doubly nested (e.g. multicol in multicol in multicol), we need to
|
| + // look beyond the first row here.
|
| + const MultiColumnFragmentainerGroup& firstRow = firstFragmentainerGroup();
|
| + LayoutUnit firstRowLogicalBottomInFlowThread = firstRow.logicalTopInFlowThread() + firstRow.logicalHeight() * usedColumnCount();
|
| + if (flowThreadOffset >= firstRowLogicalBottomInFlowThread)
|
| + return flowThreadOffset; // We're not in the first row. Give up.
|
| + LayoutUnit newLogicalHeight = enclosingFlowThread->pageLogicalHeightForOffset(firstRowLogicalBottomInFlowThread);
|
| + if (contentLogicalHeight > newLogicalHeight) {
|
| + // The next outer column or page doesn't have enough space either. Give up and stay where
|
| + // we are.
|
| + return flowThreadOffset;
|
| + }
|
| + return firstRowLogicalBottomInFlowThread;
|
| +}
|
| +
|
| LayoutMultiColumnSet* LayoutMultiColumnSet::nextSiblingMultiColumnSet() const
|
| {
|
| for (LayoutObject* sibling = nextSibling(); sibling; sibling = sibling->nextSibling()) {
|
|
|