Chromium Code Reviews| Index: Source/core/layout/LayoutMultiColumnFlowThread.cpp |
| diff --git a/Source/core/layout/LayoutMultiColumnFlowThread.cpp b/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
| index b0c841ac62d4ceb5eb374af1c2908908239f6f26..97762bf2dc7da5ec9768285d0b560e84e4c76e7d 100644 |
| --- a/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
| +++ b/Source/core/layout/LayoutMultiColumnFlowThread.cpp |
| @@ -532,6 +532,21 @@ void LayoutMultiColumnFlowThread::flowThreadDescendantWasInserted(LayoutObject* |
| continue; |
| } |
| // This layoutObject is regular column content (i.e. not a spanner). Create a set if necessary. |
| + while (objectAfterSubtree) { |
| + // First skip objects that do not have this flow thread in their containing block |
|
dsinclair
2015/04/29 13:31:19
This comment is a bit confusing given it's placeme
mstensho (USE GERRIT)
2015/04/29 13:52:21
That works, except that it's siblings (or aunts),
|
| + // chain. They don't establish column sets. |
| + if (!objectAfterSubtree->isOutOfFlowPositioned()) { |
| + // In-flow objects are always part of the flow thread (unless it's a spanner - but |
| + // we'll deal with that further below). |
| + break; |
| + } |
| + if (objectAfterSubtree->containingBlock()->flowThreadContainingBlock() == this) { |
| + // This out-of-flow object is still part of the flow thread, because its containing |
| + // block (probably relatively positioned) is part of the flow thread. |
| + break; |
| + } |
| + objectAfterSubtree = objectAfterSubtree->nextInPreOrderAfterChildren(this); |
| + } |
| if (objectAfterSubtree) { |
| if (LayoutMultiColumnSpannerPlaceholder* placeholder = objectAfterSubtree->spannerPlaceholder()) { |
| // If inserted right before a spanner, we need to make sure that there's a set for us there. |