Index: Source/core/rendering/RenderMultiColumnFlowThread.h |
diff --git a/Source/core/rendering/RenderMultiColumnFlowThread.h b/Source/core/rendering/RenderMultiColumnFlowThread.h |
index 1d9f67bdbebdf734c6916fd52866824f4ab26265..54f58b8fd02205479811b2678a168e38db502282 100644 |
--- a/Source/core/rendering/RenderMultiColumnFlowThread.h |
+++ b/Source/core/rendering/RenderMultiColumnFlowThread.h |
@@ -60,6 +60,21 @@ class RenderMultiColumnSpannerPlaceholder; |
// positioned and sized correctly. The column-span:all element is inside the flow thread, but its |
// containing block is the multicol container. |
// |
+// Some invariants for the render tree structure for multicol: |
+// - A multicol container is always a RenderBlockFlow |
+// - Every multicol container has one and only one RenderMultiColumnFlowThread |
+// - All multicol DOM children and pseudo-elements associated with the multicol container are |
+// reparented into the flow thread |
+// - The RenderMultiColumnFlowThread is the first child of the multicol container |
+// - A multicol container may only have RenderMultiColumnFlowThread, RenderMultiColumnSet and |
+// RenderMultiColumnSpannerPlaceholder children |
+// - A RenderMultiColumnSet may not be adjacent to another RenderMultiColumnSet; there are no |
+// use-cases for it, and there are also implementation limitations behind this requirement. |
+// - The flow thread is not in the containing block chain for children that are not to be laid out |
+// in columns. This means column spanners and absolutely positioned children whose containing |
+// block is outside column content |
+// - Each spanner (column-span:all) establishes a RenderMultiColumnSpannerPlaceholder |
+// |
// The width of the flow thread is the same as the column width. The width of a column set is the |
// same as the content box width of the multicol container; in other words exactly enough to hold |
// the number of columns to be used, stacked horizontally, plus column gaps between them. |
@@ -166,8 +181,8 @@ protected: |
private: |
void calculateColumnCountAndWidth(LayoutUnit& width, unsigned& count) const; |
- void createAndInsertMultiColumnSet(); |
- void createAndInsertSpannerPlaceholder(RenderBox* spanner); |
+ void createAndInsertMultiColumnSet(RenderBox* insertBefore = 0); |
+ void createAndInsertSpannerPlaceholder(RenderBox* spanner, RenderBox* insertBefore = 0); |
virtual bool descendantIsValidColumnSpanner(RenderObject* descendant) const; |
virtual const char* renderName() const override; |