Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h

Issue 2966863002: [LayoutNG] Add floats_bfc_offset to constraint space. (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/geometry/ng_logical_offset.h" 9 #include "core/layout/ng/geometry/ng_logical_offset.h"
10 #include "core/layout/ng/geometry/ng_logical_size.h" 10 #include "core/layout/ng/geometry/ng_logical_size.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 87 }
88 88
89 bool IsBlockDirectionTriggersScrollbar() const { 89 bool IsBlockDirectionTriggersScrollbar() const {
90 return is_block_direction_triggers_scrollbar_; 90 return is_block_direction_triggers_scrollbar_;
91 } 91 }
92 92
93 // Some layout modes “stretch” their children to a fixed size (e.g. flex, 93 // Some layout modes “stretch” their children to a fixed size (e.g. flex,
94 // grid). These flags represented whether a layout needs to produce a 94 // grid). These flags represented whether a layout needs to produce a
95 // fragment that satisfies a fixed constraint in the inline and block 95 // fragment that satisfies a fixed constraint in the inline and block
96 // direction respectively. 96 // direction respectively.
97 //
97 // If these flags are true, the AvailableSize() is interpreted as the fixed 98 // If these flags are true, the AvailableSize() is interpreted as the fixed
98 // border-box size of this box in the respective dimension. 99 // border-box size of this box in the respective dimension.
99 bool IsFixedSizeInline() const { return is_fixed_size_inline_; } 100 bool IsFixedSizeInline() const { return is_fixed_size_inline_; }
100 101
101 bool IsFixedSizeBlock() const { return is_fixed_size_block_; } 102 bool IsFixedSizeBlock() const { return is_fixed_size_block_; }
102 103
103 // Whether an auto inline-size should be interpreted as shrink-to-fit 104 // Whether an auto inline-size should be interpreted as shrink-to-fit
104 // (ie. fit-content). This is used for inline-block, floats, etc. 105 // (ie. fit-content). This is used for inline-block, floats, etc.
105 bool IsShrinkToFit() const { return is_shrink_to_fit_; } 106 bool IsShrinkToFit() const { return is_shrink_to_fit_; }
106 107
107 // If specified a layout should produce a Fragment which fragments at the 108 // If specified a layout should produce a Fragment which fragments at the
108 // blockSize if possible. 109 // blockSize if possible.
109 NGFragmentationType BlockFragmentationType() const; 110 NGFragmentationType BlockFragmentationType() const;
110 111
111 // Return true if this contraint space participates in a fragmentation 112 // Return true if this contraint space participates in a fragmentation
112 // context. 113 // context.
113 bool HasBlockFragmentation() const { 114 bool HasBlockFragmentation() const {
114 return BlockFragmentationType() != kFragmentNone; 115 return BlockFragmentationType() != kFragmentNone;
115 } 116 }
116 117
117 NGMarginStrut MarginStrut() const { return margin_strut_; } 118 NGMarginStrut MarginStrut() const { return margin_strut_; }
118 119
120 // The BfcOffset is where the MarginStrut is placed within the block
121 // formatting context.
122 //
123 // The current layout or a descendant layout may "resolve" the BFC offset,
124 // i.e. decide where the current fragment should be placed within the BFC.
125 //
126 // This is done by:
127 // bfc_block_offset =
128 // space.BfcOffset().block_offset + space.MarginStrut().Sum();
129 //
130 // The BFC offset can get "resolved" in many circumstances (including, but
131 // not limited to):
132 // - block_start border or padding in the current layout.
133 // - Text content, atomic inlines, (see NGLineBreaker).
134 // - The current layout having a block_size.
119 NGLogicalOffset BfcOffset() const { return bfc_offset_; } 135 NGLogicalOffset BfcOffset() const { return bfc_offset_; }
120 136
137 // If present, and the current layout hasn't resolved its BFC offset yet (see
138 // BfcOffset), the layout should position all of its unpositioned floats at
139 // this offset.
140 //
141 // This value should be propogated to child layouts if the current layout
142 // hasn't resolved its BFC offset yet.
143 //
144 // This value is calculated *after* an initial pass of the tree, this value
145 // should only be present during the second pass.
146 WTF::Optional<NGLogicalOffset> FloatsBfcOffset() const {
147 return floats_bfc_offset_;
148 }
149
121 Vector<RefPtr<NGUnpositionedFloat>>& UnpositionedFloats() { 150 Vector<RefPtr<NGUnpositionedFloat>>& UnpositionedFloats() {
122 return unpositioned_floats_; 151 return unpositioned_floats_;
123 } 152 }
124 153
125 WTF::Optional<LayoutUnit> ClearanceOffset() const { 154 WTF::Optional<LayoutUnit> ClearanceOffset() const {
126 return clearance_offset_; 155 return clearance_offset_;
127 } 156 }
128 157
129 bool operator==(const NGConstraintSpace&) const; 158 bool operator==(const NGConstraintSpace&) const;
130 bool operator!=(const NGConstraintSpace&) const; 159 bool operator!=(const NGConstraintSpace&) const;
(...skipping 12 matching lines...) Expand all
143 bool is_fixed_size_inline, 172 bool is_fixed_size_inline,
144 bool is_fixed_size_block, 173 bool is_fixed_size_block,
145 bool is_shrink_to_fit, 174 bool is_shrink_to_fit,
146 bool is_inline_direction_triggers_scrollbar, 175 bool is_inline_direction_triggers_scrollbar,
147 bool is_block_direction_triggers_scrollbar, 176 bool is_block_direction_triggers_scrollbar,
148 NGFragmentationType block_direction_fragmentation_type, 177 NGFragmentationType block_direction_fragmentation_type,
149 bool is_new_fc, 178 bool is_new_fc,
150 bool is_anonymous, 179 bool is_anonymous,
151 const NGMarginStrut& margin_strut, 180 const NGMarginStrut& margin_strut,
152 const NGLogicalOffset& bfc_offset, 181 const NGLogicalOffset& bfc_offset,
182 const WTF::Optional<NGLogicalOffset>& floats_bfc_offset,
153 const std::shared_ptr<NGExclusions>& exclusions, 183 const std::shared_ptr<NGExclusions>& exclusions,
154 Vector<RefPtr<NGUnpositionedFloat>>& unpositioned_floats, 184 Vector<RefPtr<NGUnpositionedFloat>>& unpositioned_floats,
155 const WTF::Optional<LayoutUnit>& clearance_offset); 185 const WTF::Optional<LayoutUnit>& clearance_offset);
156 186
157 NGPhysicalSize InitialContainingBlockSize() const { 187 NGPhysicalSize InitialContainingBlockSize() const {
158 return initial_containing_block_size_; 188 return initial_containing_block_size_;
159 } 189 }
160 190
161 NGLogicalSize available_size_; 191 NGLogicalSize available_size_;
162 NGLogicalSize percentage_resolution_size_; 192 NGLogicalSize percentage_resolution_size_;
(...skipping 15 matching lines...) Expand all
178 // formatting Context 208 // formatting Context
179 unsigned is_new_fc_ : 1; 209 unsigned is_new_fc_ : 1;
180 210
181 unsigned is_anonymous_ : 1; 211 unsigned is_anonymous_ : 1;
182 212
183 unsigned writing_mode_ : 3; 213 unsigned writing_mode_ : 3;
184 unsigned direction_ : 1; 214 unsigned direction_ : 1;
185 215
186 NGMarginStrut margin_strut_; 216 NGMarginStrut margin_strut_;
187 NGLogicalOffset bfc_offset_; 217 NGLogicalOffset bfc_offset_;
218 WTF::Optional<NGLogicalOffset> floats_bfc_offset_;
219
188 const std::shared_ptr<NGExclusions> exclusions_; 220 const std::shared_ptr<NGExclusions> exclusions_;
189 WTF::Optional<LayoutUnit> clearance_offset_; 221 WTF::Optional<LayoutUnit> clearance_offset_;
190 Vector<RefPtr<NGUnpositionedFloat>> unpositioned_floats_; 222 Vector<RefPtr<NGUnpositionedFloat>> unpositioned_floats_;
191 }; 223 };
192 224
193 inline std::ostream& operator<<(std::ostream& stream, 225 inline std::ostream& operator<<(std::ostream& stream,
194 const NGConstraintSpace& value) { 226 const NGConstraintSpace& value) {
195 return stream << value.ToString(); 227 return stream << value.ToString();
196 } 228 }
197 229
198 } // namespace blink 230 } // namespace blink
199 231
200 #endif // NGConstraintSpace_h 232 #endif // NGConstraintSpace_h
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698