OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MultiColumnFragmentainerGroup_h | 5 #ifndef MultiColumnFragmentainerGroup_h |
6 #define MultiColumnFragmentainerGroup_h | 6 #define MultiColumnFragmentainerGroup_h |
7 | 7 |
8 #include "core/layout/LayoutMultiColumnFlowThread.h" | 8 #include "core/layout/LayoutMultiColumnFlowThread.h" |
9 #include "platform/wtf/Allocator.h" | 9 #include "platform/wtf/Allocator.h" |
10 | 10 |
(...skipping 26 matching lines...) Expand all Loading... | |
37 | 37 |
38 const LayoutMultiColumnSet& ColumnSet() const { return column_set_; } | 38 const LayoutMultiColumnSet& ColumnSet() const { return column_set_; } |
39 | 39 |
40 bool IsFirstGroup() const; | 40 bool IsFirstGroup() const; |
41 bool IsLastGroup() const; | 41 bool IsLastGroup() const; |
42 | 42 |
43 // Position within the LayoutMultiColumnSet. | 43 // Position within the LayoutMultiColumnSet. |
44 LayoutUnit LogicalTop() const { return logical_top_; } | 44 LayoutUnit LogicalTop() const { return logical_top_; } |
45 void SetLogicalTop(LayoutUnit logical_top) { logical_top_ = logical_top; } | 45 void SetLogicalTop(LayoutUnit logical_top) { logical_top_ = logical_top; } |
46 | 46 |
47 LayoutUnit LogicalHeight() const { return column_height_; } | 47 // Return the amount of block space that this fragmentainer group takes up in |
48 // its containing LayoutMultiColumnSet. | |
49 LayoutUnit GroupLogicalHeight() const { return logical_height_; } | |
50 | |
51 // Return the block size of a column (or fragmentainer) in this fragmentainer | |
52 // group. The spec says that this value must always be >= 1px, to ensure | |
eae
2017/05/12 16:31:21
These comments are great! Thank you.
| |
53 // progress. | |
54 LayoutUnit ColumnLogicalHeight() const { | |
55 // If the height hasn't been calculated yet, though, we allow returning 0 | |
56 // (and the caller is then expected to refrain from attempting to fragment). | |
57 if (!logical_height_) | |
58 return logical_height_; | |
59 | |
60 return std::max(LayoutUnit(1), logical_height_); | |
61 } | |
48 | 62 |
49 LayoutSize OffsetFromColumnSet() const; | 63 LayoutSize OffsetFromColumnSet() const; |
50 | 64 |
51 // Return the block offset from the enclosing fragmentation context, if | 65 // Return the block offset from the enclosing fragmentation context, if |
52 // nested. In the coordinate space of the enclosing fragmentation context. | 66 // nested. In the coordinate space of the enclosing fragmentation context. |
53 LayoutUnit BlockOffsetInEnclosingFragmentationContext() const; | 67 LayoutUnit BlockOffsetInEnclosingFragmentationContext() const; |
54 | 68 |
55 // The top of our flow thread portion | 69 // The top of our flow thread portion |
56 LayoutUnit LogicalTopInFlowThread() const { | 70 LayoutUnit LogicalTopInFlowThread() const { |
57 return logical_top_in_flow_thread_; | 71 return logical_top_in_flow_thread_; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
149 | 163 |
150 private: | 164 private: |
151 LayoutUnit HeightAdjustedForRowOffset(LayoutUnit height) const; | 165 LayoutUnit HeightAdjustedForRowOffset(LayoutUnit height) const; |
152 LayoutUnit CalculateMaxColumnHeight() const; | 166 LayoutUnit CalculateMaxColumnHeight() const; |
153 void SetAndConstrainColumnHeight(LayoutUnit); | 167 void SetAndConstrainColumnHeight(LayoutUnit); |
154 | 168 |
155 LayoutUnit RebalanceColumnHeightIfNeeded() const; | 169 LayoutUnit RebalanceColumnHeightIfNeeded() const; |
156 | 170 |
157 LayoutRect ColumnRectAt(unsigned column_index) const; | 171 LayoutRect ColumnRectAt(unsigned column_index) const; |
158 LayoutUnit LogicalTopInFlowThreadAt(unsigned column_index) const { | 172 LayoutUnit LogicalTopInFlowThreadAt(unsigned column_index) const { |
159 return logical_top_in_flow_thread_ + column_index * column_height_; | 173 return logical_top_in_flow_thread_ + column_index * ColumnLogicalHeight(); |
160 } | 174 } |
161 | 175 |
162 // Return the column that the specified visual point belongs to. Only the | 176 // Return the column that the specified visual point belongs to. Only the |
163 // coordinate on the column progression axis is relevant. Every point belongs | 177 // coordinate on the column progression axis is relevant. Every point belongs |
164 // to a column, even if said point is not inside any of the columns. | 178 // to a column, even if said point is not inside any of the columns. |
165 unsigned ColumnIndexAtVisualPoint(const LayoutPoint& visual_point) const; | 179 unsigned ColumnIndexAtVisualPoint(const LayoutPoint& visual_point) const; |
166 | 180 |
167 const LayoutMultiColumnSet& column_set_; | 181 const LayoutMultiColumnSet& column_set_; |
168 | 182 |
169 LayoutUnit logical_top_; | 183 LayoutUnit logical_top_; |
170 LayoutUnit logical_top_in_flow_thread_; | 184 LayoutUnit logical_top_in_flow_thread_; |
171 LayoutUnit logical_bottom_in_flow_thread_; | 185 LayoutUnit logical_bottom_in_flow_thread_; |
172 | 186 |
173 LayoutUnit column_height_; | 187 // Logical height of the group. This will also be the height of each column |
188 // in this group, with the difference that, while the logical height can be | |
189 // 0, the height of a column must be >= 1px. | |
190 LayoutUnit logical_height_; | |
174 | 191 |
175 LayoutUnit max_column_height_; // Maximum column height allowed. | 192 // Maximum logical height allowed. |
193 LayoutUnit max_logical_height_; | |
176 }; | 194 }; |
177 | 195 |
178 // List of all fragmentainer groups within a column set. There will always be at | 196 // List of all fragmentainer groups within a column set. There will always be at |
179 // least one group. Deleting the one group is not allowed (or possible). There | 197 // least one group. Deleting the one group is not allowed (or possible). There |
180 // will be more than one group if the owning column set lives in multiple outer | 198 // will be more than one group if the owning column set lives in multiple outer |
181 // fragmentainers (e.g. multicol inside paged media). | 199 // fragmentainers (e.g. multicol inside paged media). |
182 class CORE_EXPORT MultiColumnFragmentainerGroupList { | 200 class CORE_EXPORT MultiColumnFragmentainerGroupList { |
183 DISALLOW_NEW(); | 201 DISALLOW_NEW(); |
184 | 202 |
185 public: | 203 public: |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
220 | 238 |
221 private: | 239 private: |
222 LayoutMultiColumnSet& column_set_; | 240 LayoutMultiColumnSet& column_set_; |
223 | 241 |
224 Vector<MultiColumnFragmentainerGroup, 1> groups_; | 242 Vector<MultiColumnFragmentainerGroup, 1> groups_; |
225 }; | 243 }; |
226 | 244 |
227 } // namespace blink | 245 } // namespace blink |
228 | 246 |
229 #endif // MultiColumnFragmentainerGroup_h | 247 #endif // MultiColumnFragmentainerGroup_h |
OLD | NEW |