Index: third_party/WebKit/Source/core/layout/ColumnBalancer.h |
diff --git a/third_party/WebKit/Source/core/layout/ColumnBalancer.h b/third_party/WebKit/Source/core/layout/ColumnBalancer.h |
index 40fd612c4f522ca49773b5a17b546d94680b132c..ed35f4657de9960e9fc0d7cafb83fd322e922d37 100644 |
--- a/third_party/WebKit/Source/core/layout/ColumnBalancer.h |
+++ b/third_party/WebKit/Source/core/layout/ColumnBalancer.h |
@@ -2,18 +2,34 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "core/layout/MultiColumnFragmentainerGroup.h" |
+#include "core/layout/LayoutMultiColumnSet.h" |
namespace blink { |
-// A column balancer traverses the portion of the subtree of a flow thread that belongs to a given |
-// fragmentainer group, in order to collect certain data to be used for column balancing. This is an |
-// abstract class that just walks the subtree and leaves it to subclasses to actualy collect data. |
+// A column balancer traverses a portion of the subtree of a flow thread that belongs to one or |
+// more fragmentainer groups within one column set, in order to collect certain data to be used for |
+// column balancing. This is an abstract class that just walks the subtree and leaves it to |
+// subclasses to actually collect data. |
class ColumnBalancer { |
protected: |
- ColumnBalancer(const MultiColumnFragmentainerGroup&); |
+ ColumnBalancer(const LayoutMultiColumnSet&, LayoutUnit logicalTopInFlowThread, LayoutUnit logicalBottomInFlowThread); |
- const MultiColumnFragmentainerGroup& group() const { return m_group; } |
+ const LayoutMultiColumnSet& columnSet() const { return m_columnSet; } |
+ |
+ // The flow thread portion we're examining. It may be that of the entire column set, or just of |
+ // a fragmentainer group. |
+ const LayoutUnit logicalTopInFlowThread() const { return m_logicalTopInFlowThread; } |
+ const LayoutUnit logicalBottomInFlowThread() const { return m_logicalBottomInFlowThread; } |
+ |
+ const MultiColumnFragmentainerGroup& groupAtOffset(LayoutUnit offsetInFlowThread) const |
+ { |
+ return m_columnSet.fragmentainerGroupAtFlowThreadOffset(offsetInFlowThread); |
+ } |
+ |
+ LayoutUnit offsetFromColumnLogicalTop(LayoutUnit offsetInFlowThread) const |
+ { |
+ return offsetInFlowThread - groupAtOffset(offsetInFlowThread).columnLogicalTopForOffset(offsetInFlowThread); |
+ } |
// Flow thread offset for the layout object that we're currently examining. |
LayoutUnit flowThreadOffset() const { return m_flowThreadOffset; } |
@@ -21,41 +37,42 @@ protected: |
EBreak previousBreakAfterValue() const { return m_previousBreakAfterValue; } |
// Return true if the specified offset is at the top of a column, as long as it's not the first |
- // column in the fragmentainer group. |
+ // column in the flow thread portion. |
bool isFirstAfterBreak(LayoutUnit flowThreadOffset) const |
{ |
- if (flowThreadOffset != m_group.columnLogicalTopForOffset(flowThreadOffset)) |
- return false; // Not at the top of a column. |
- // The first column in the fragmentainer group is either not after any break at all, or |
- // after a break that belongs to the previous fragmentainer group. |
- return flowThreadOffset > m_group.logicalTopInFlowThread(); |
+ if (flowThreadOffset <= m_logicalTopInFlowThread) { |
+ // The first column is either not after any break at all, or after a break in a |
+ // previous fragmentainer group. |
+ return false; |
+ } |
+ return flowThreadOffset == groupAtOffset(flowThreadOffset).columnLogicalTopForOffset(flowThreadOffset); |
} |
bool isLogicalTopWithinBounds(LayoutUnit logicalTopInFlowThread) const |
{ |
- return logicalTopInFlowThread >= m_group.logicalTopInFlowThread() |
- && logicalTopInFlowThread < m_group.logicalBottomInFlowThread(); |
+ return logicalTopInFlowThread >= m_logicalTopInFlowThread |
+ && logicalTopInFlowThread < m_logicalBottomInFlowThread; |
} |
bool isLogicalBottomWithinBounds(LayoutUnit logicalBottomInFlowThread) const |
{ |
- return logicalBottomInFlowThread > m_group.logicalTopInFlowThread() |
- && logicalBottomInFlowThread <= m_group.logicalBottomInFlowThread(); |
+ return logicalBottomInFlowThread > m_logicalTopInFlowThread |
+ && logicalBottomInFlowThread <= m_logicalBottomInFlowThread; |
} |
// Examine and collect column balancing data from a layout box that has been found to intersect |
- // with this fragmentainer group. Does not recurse into children. flowThreadOffset() will |
- // return the offset from |box| to the flow thread. Two hooks are provided here. The first one |
- // is called right after entering and before traversing the subtree of the box, and the second |
- // one right after having traversed the subtree. |
+ // with the flow thread portion we're examining. Does not recurse into |
+ // children. flowThreadOffset() will return the offset from |box| to the flow thread. Two hooks |
+ // are provided here. The first one is called right after entering and before traversing the |
+ // subtree of the box, and the second one right after having traversed the subtree. |
virtual void examineBoxAfterEntering(const LayoutBox&) = 0; |
virtual void examineBoxBeforeLeaving(const LayoutBox&) = 0; |
// Examine and collect column balancing data from a line that has been found to intersect with |
- // this fragmentainer group. Does not recurse into layout objects on that line. |
+ // the flow thread portion. Does not recurse into layout objects on that line. |
virtual void examineLine(const RootInlineBox&) = 0; |
- // Examine and collect column balancing data for everything in the fragmentainer group. Will |
+ // Examine and collect column balancing data for everything in the flow thread portion. Will |
// trigger calls to examineBoxAfterEntering(), examineBoxBeforeLeaving() and examineLine() for |
// interesting boxes and lines. |
void traverse(); |
@@ -63,7 +80,10 @@ protected: |
private: |
void traverseSubtree(const LayoutBox&); |
- const MultiColumnFragmentainerGroup& m_group; |
+ const LayoutMultiColumnSet& m_columnSet; |
+ const LayoutUnit m_logicalTopInFlowThread; |
+ const LayoutUnit m_logicalBottomInFlowThread; |
+ |
LayoutUnit m_flowThreadOffset; |
// The break-after value from the previous in-flow block-level object to be joined with the |
@@ -81,7 +101,7 @@ private: |
// of this class, named MinimumSpaceShortageFinder. |
class InitialColumnHeightFinder final : public ColumnBalancer { |
public: |
- InitialColumnHeightFinder(const MultiColumnFragmentainerGroup&); |
+ InitialColumnHeightFinder(const LayoutMultiColumnSet&, LayoutUnit logicalTopInFlowThread, LayoutUnit logicalBottomInFlowThread); |
LayoutUnit initialMinimalBalancedHeight() const; |
@@ -172,7 +192,7 @@ private: |
// space shortage after having laid out with the current column height. |
class MinimumSpaceShortageFinder final : public ColumnBalancer { |
public: |
- MinimumSpaceShortageFinder(const MultiColumnFragmentainerGroup&); |
+ MinimumSpaceShortageFinder(const LayoutMultiColumnSet&, LayoutUnit logicalTopInFlowThread, LayoutUnit logicalBottomInFlowThread); |
LayoutUnit minimumSpaceShortage() const { return m_minimumSpaceShortage; } |
unsigned forcedBreaksCount() const { return m_forcedBreaksCount; } |