OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 NGConstraintSpace_h | 5 #ifndef NGConstraintSpace_h |
6 #define NGConstraintSpace_h | 6 #define NGConstraintSpace_h |
7 | 7 |
8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
9 #include "core/layout/ng/ng_units.h" | 9 #include "core/layout/ng/ng_units.h" |
10 #include "core/layout/ng/ng_writing_mode.h" | 10 #include "core/layout/ng/ng_writing_mode.h" |
11 #include "platform/heap/Handle.h" | 11 #include "platform/heap/Handle.h" |
| 12 #include "wtf/Optional.h" |
12 #include "wtf/text/WTFString.h" | 13 #include "wtf/text/WTFString.h" |
13 | 14 |
14 namespace blink { | 15 namespace blink { |
15 | 16 |
16 class LayoutBox; | 17 class LayoutBox; |
17 class NGBoxFragment; | 18 class NGBoxFragment; |
18 class NGLayoutOpportunityIterator; | 19 class NGLayoutOpportunityIterator; |
19 | 20 |
20 // TODO(glebl@): unused, delete. | |
21 enum NGExclusionType { | |
22 kNGClearNone = 0, | |
23 kNGClearFloatLeft = 1, | |
24 kNGClearFloatRight = 2, | |
25 kNGClearFragment = 4 | |
26 }; | |
27 | |
28 enum NGFragmentationType { | 21 enum NGFragmentationType { |
29 kFragmentNone, | 22 kFragmentNone, |
30 kFragmentPage, | 23 kFragmentPage, |
31 kFragmentColumn, | 24 kFragmentColumn, |
32 kFragmentRegion | 25 kFragmentRegion |
33 }; | 26 }; |
34 | 27 |
35 // The NGConstraintSpace represents a set of constraints and available space | 28 // The NGConstraintSpace represents a set of constraints and available space |
36 // which a layout algorithm may produce a NGFragment within. | 29 // which a layout algorithm may produce a NGFragment within. |
37 class CORE_EXPORT NGConstraintSpace final | 30 class CORE_EXPORT NGConstraintSpace final |
(...skipping 20 matching lines...) Expand all Loading... |
58 // The size to use for percentage resolution. | 51 // The size to use for percentage resolution. |
59 // See: https://drafts.csswg.org/css-sizing/#percentage-sizing | 52 // See: https://drafts.csswg.org/css-sizing/#percentage-sizing |
60 NGLogicalSize PercentageResolutionSize() const { | 53 NGLogicalSize PercentageResolutionSize() const { |
61 return percentage_resolution_size_; | 54 return percentage_resolution_size_; |
62 } | 55 } |
63 | 56 |
64 // The available space size. | 57 // The available space size. |
65 // See: https://drafts.csswg.org/css-sizing/#available | 58 // See: https://drafts.csswg.org/css-sizing/#available |
66 NGLogicalSize AvailableSize() const { return available_size_; } | 59 NGLogicalSize AvailableSize() const { return available_size_; } |
67 | 60 |
68 // Offset relative to the root constraint space. | |
69 NGLogicalOffset Offset() const { return offset_; } | |
70 // TODO(layout-ng): Set offset via NGConstraintSpacebuilder. | |
71 void SetOffset(const NGLogicalOffset& offset) { offset_ = offset; } | |
72 | |
73 // Return the block-direction space available in the current fragmentainer. | 61 // Return the block-direction space available in the current fragmentainer. |
74 LayoutUnit FragmentainerSpaceAvailable() const { | 62 LayoutUnit FragmentainerSpaceAvailable() const { |
75 DCHECK(HasBlockFragmentation()); | 63 DCHECK(HasBlockFragmentation()); |
76 return fragmentainer_space_available_; | 64 return fragmentainer_space_available_; |
77 } | 65 } |
78 | 66 |
79 // Whether the current constraint space is for the newly established | 67 // Whether the current constraint space is for the newly established |
80 // Formatting Context. | 68 // Formatting Context. |
81 bool IsNewFormattingContext() const { return is_new_fc_; } | 69 bool IsNewFormattingContext() const { return is_new_fc_; } |
82 | 70 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 bool HasBlockFragmentation() const { | 103 bool HasBlockFragmentation() const { |
116 return BlockFragmentationType() != kFragmentNone; | 104 return BlockFragmentationType() != kFragmentNone; |
117 } | 105 } |
118 | 106 |
119 // Modifies constraint space to account for a placed fragment. Depending on | 107 // Modifies constraint space to account for a placed fragment. Depending on |
120 // the shape of the fragment this will either modify the inline or block | 108 // the shape of the fragment this will either modify the inline or block |
121 // size, or add an exclusion. | 109 // size, or add an exclusion. |
122 void Subtract(const NGBoxFragment*); | 110 void Subtract(const NGBoxFragment*); |
123 | 111 |
124 NGLayoutOpportunityIterator* LayoutOpportunities( | 112 NGLayoutOpportunityIterator* LayoutOpportunities( |
125 unsigned clear = kNGClearNone, | 113 const WTF::Optional<NGLogicalOffset>& opt_origin_point = WTF::nullopt); |
126 bool for_inline_or_bfc = false); | 114 |
| 115 NGMarginStrut MarginStrut() const { return margin_strut_; } |
| 116 |
| 117 NGLogicalOffset BfcOffset() const { return bfc_offset_; } |
127 | 118 |
128 DEFINE_INLINE_VIRTUAL_TRACE() {} | 119 DEFINE_INLINE_VIRTUAL_TRACE() {} |
129 | 120 |
130 String ToString() const; | 121 String ToString() const; |
131 | 122 |
132 private: | 123 private: |
133 friend class NGConstraintSpaceBuilder; | 124 friend class NGConstraintSpaceBuilder; |
134 // Default constructor. | 125 // Default constructor. |
135 NGConstraintSpace(NGWritingMode, | 126 NGConstraintSpace(NGWritingMode, |
136 TextDirection, | 127 TextDirection, |
137 NGLogicalSize available_size, | 128 NGLogicalSize available_size, |
138 NGLogicalSize percentage_resolution_size, | 129 NGLogicalSize percentage_resolution_size, |
139 LayoutUnit fragmentainer_space_available, | 130 LayoutUnit fragmentainer_space_available, |
140 bool is_fixed_size_inline, | 131 bool is_fixed_size_inline, |
141 bool is_fixed_size_block, | 132 bool is_fixed_size_block, |
142 bool is_shrink_to_fit, | 133 bool is_shrink_to_fit, |
143 bool is_inline_direction_triggers_scrollbar, | 134 bool is_inline_direction_triggers_scrollbar, |
144 bool is_block_direction_triggers_scrollbar, | 135 bool is_block_direction_triggers_scrollbar, |
145 NGFragmentationType block_direction_fragmentation_type, | 136 NGFragmentationType block_direction_fragmentation_type, |
146 bool is_new_fc, | 137 bool is_new_fc, |
| 138 const NGMarginStrut& margin_strut, |
| 139 const NGLogicalOffset& bfc_offset, |
147 const std::shared_ptr<NGExclusions>& exclusions); | 140 const std::shared_ptr<NGExclusions>& exclusions); |
148 | 141 |
149 NGLogicalSize available_size_; | 142 NGLogicalSize available_size_; |
150 NGLogicalSize percentage_resolution_size_; | 143 NGLogicalSize percentage_resolution_size_; |
151 | 144 |
152 LayoutUnit fragmentainer_space_available_; | 145 LayoutUnit fragmentainer_space_available_; |
153 | 146 |
154 unsigned is_fixed_size_inline_ : 1; | 147 unsigned is_fixed_size_inline_ : 1; |
155 unsigned is_fixed_size_block_ : 1; | 148 unsigned is_fixed_size_block_ : 1; |
156 | 149 |
157 unsigned is_shrink_to_fit_ : 1; | 150 unsigned is_shrink_to_fit_ : 1; |
158 | 151 |
159 unsigned is_inline_direction_triggers_scrollbar_ : 1; | 152 unsigned is_inline_direction_triggers_scrollbar_ : 1; |
160 unsigned is_block_direction_triggers_scrollbar_ : 1; | 153 unsigned is_block_direction_triggers_scrollbar_ : 1; |
161 | 154 |
162 unsigned block_direction_fragmentation_type_ : 2; | 155 unsigned block_direction_fragmentation_type_ : 2; |
163 | 156 |
164 // Whether the current constraint space is for the newly established | 157 // Whether the current constraint space is for the newly established |
165 // formatting Context | 158 // formatting Context |
166 unsigned is_new_fc_ : 1; | 159 unsigned is_new_fc_ : 1; |
167 | 160 |
168 NGLogicalOffset offset_; | |
169 unsigned writing_mode_ : 3; | 161 unsigned writing_mode_ : 3; |
170 unsigned direction_ : 1; | 162 unsigned direction_ : 1; |
171 | 163 |
| 164 NGMarginStrut margin_strut_; |
| 165 NGLogicalOffset bfc_offset_; |
172 const std::shared_ptr<NGExclusions> exclusions_; | 166 const std::shared_ptr<NGExclusions> exclusions_; |
173 }; | 167 }; |
174 | 168 |
175 inline std::ostream& operator<<(std::ostream& stream, | 169 inline std::ostream& operator<<(std::ostream& stream, |
176 const NGConstraintSpace& value) { | 170 const NGConstraintSpace& value) { |
177 return stream << value.ToString(); | 171 return stream << value.ToString(); |
178 } | 172 } |
179 | 173 |
180 } // namespace blink | 174 } // namespace blink |
181 | 175 |
182 #endif // NGConstraintSpace_h | 176 #endif // NGConstraintSpace_h |
OLD | NEW |