Index: Source/core/rendering/RenderMultiColumnFlowThread.h |
diff --git a/Source/core/rendering/RenderMultiColumnFlowThread.h b/Source/core/rendering/RenderMultiColumnFlowThread.h |
index e246d0d93d7ec24f5a61afc5b9feff220623ac37..639c9b513baa4bf2a5a1a6197027c7b7e714fff9 100644 |
--- a/Source/core/rendering/RenderMultiColumnFlowThread.h |
+++ b/Source/core/rendering/RenderMultiColumnFlowThread.h |
@@ -31,6 +31,25 @@ |
namespace WebCore { |
+class RenderMultiColumnSet; |
+ |
+// Flow thread implementation for CSS multicol. This will be inserted as an anonymous child block of |
+// the actual multicol container (i.e. the RenderBlockFlow whose style computes to non-auto |
+// column-count and/or column-width). RenderMultiColumnFlowThread is the heart of the multicol |
+// implementation, and there is only one instance per multicol container. Child content of the |
+// multicol container is parented into the flow thread at the time of renderer insertion. |
+// |
+// Apart from this flow thread child, the multicol container will also have RenderMultiColumnSet |
+// "region" children, which are used to position the columns visually. The flow thread is in charge |
+// of layout, and, after having calculated the column width, it lays out content as if everything |
+// were in one tall single column, except that there will typically be some amount of blank space |
+// (also known as pagination struts) at the offsets where the actual column boundaries are. This |
+// way, content that needs to be preceded by a break will appear at the top of the next |
+// column. Content needs to be preceded by a break when there's a forced break or when the content |
+// is unbreakable and cannot fully fit in the same column as the preceding piece of |
+// content. Although a RenderMultiColumnFlowThread is laid out, it does not take up any space in its |
+// container. It's the RenderMultiColumnSet objects that take up the necessary amount of space, and |
+// make sure that the columns are painted and hit-tested correctly. |
class RenderMultiColumnFlowThread FINAL : public RenderFlowThread { |
public: |
virtual ~RenderMultiColumnFlowThread(); |
@@ -39,6 +58,11 @@ public: |
RenderBlockFlow* multiColumnBlockFlow() const { return toRenderBlockFlow(parent()); } |
+ RenderMultiColumnSet* firstMultiColumnSet() const; |
+ RenderMultiColumnSet* lastMultiColumnSet() const; |
+ |
+ virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) OVERRIDE; |
+ |
// Populate the flow thread with what's currently its siblings. Called when a regular block |
// becomes a multicol container. |
void populate(); |
@@ -62,11 +86,13 @@ private: |
RenderMultiColumnFlowThread(); |
virtual const char* renderName() const OVERRIDE; |
+ virtual void addRegionToThread(RenderRegion*) OVERRIDE; |
+ virtual void willBeRemovedFromTree() OVERRIDE; |
virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&) const OVERRIDE; |
- virtual void autoGenerateRegionsToBlockOffset(LayoutUnit) OVERRIDE; |
virtual LayoutUnit initialLogicalWidth() const OVERRIDE; |
virtual void setPageBreak(LayoutUnit offset, LayoutUnit spaceShortage) OVERRIDE; |
virtual void updateMinimumPageHeight(LayoutUnit offset, LayoutUnit minHeight) OVERRIDE; |
+ virtual RenderRegion* regionAtBlockOffset(LayoutUnit) const OVERRIDE; |
virtual bool addForcedRegionBreak(LayoutUnit, RenderObject* breakChild, bool isBefore, LayoutUnit* offsetBreakAdjustment = 0) OVERRIDE; |
virtual bool isPageLogicalHeightKnown() const OVERRIDE; |