| Index: third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
|
| index ae3eb0644134baa052ccada51abe33b0c8a858af..e33bdc9017a0f9f9ad5778157c3dcc7356238788 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
|
| @@ -94,6 +94,7 @@ class CORE_EXPORT NGConstraintSpace final
|
| // grid). These flags represented whether a layout needs to produce a
|
| // fragment that satisfies a fixed constraint in the inline and block
|
| // direction respectively.
|
| + //
|
| // If these flags are true, the AvailableSize() is interpreted as the fixed
|
| // border-box size of this box in the respective dimension.
|
| bool IsFixedSizeInline() const { return is_fixed_size_inline_; }
|
| @@ -116,8 +117,36 @@ class CORE_EXPORT NGConstraintSpace final
|
|
|
| NGMarginStrut MarginStrut() const { return margin_strut_; }
|
|
|
| + // The BfcOffset is where the MarginStrut is placed within the block
|
| + // formatting context.
|
| + //
|
| + // The current layout or a descendant layout may "resolve" the BFC offset,
|
| + // i.e. decide where the current fragment should be placed within the BFC.
|
| + //
|
| + // This is done by:
|
| + // bfc_block_offset =
|
| + // space.BfcOffset().block_offset + space.MarginStrut().Sum();
|
| + //
|
| + // The BFC offset can get "resolved" in many circumstances (including, but
|
| + // not limited to):
|
| + // - block_start border or padding in the current layout.
|
| + // - Text content, atomic inlines, (see NGLineBreaker).
|
| + // - The current layout having a block_size.
|
| NGLogicalOffset BfcOffset() const { return bfc_offset_; }
|
|
|
| + // If present, and the current layout hasn't resolved its BFC offset yet (see
|
| + // BfcOffset), the layout should position all of its unpositioned floats at
|
| + // this offset.
|
| + //
|
| + // This value should be propogated to child layouts if the current layout
|
| + // hasn't resolved its BFC offset yet.
|
| + //
|
| + // This value is calculated *after* an initial pass of the tree, this value
|
| + // should only be present during the second pass.
|
| + WTF::Optional<NGLogicalOffset> FloatsBfcOffset() const {
|
| + return floats_bfc_offset_;
|
| + }
|
| +
|
| Vector<RefPtr<NGUnpositionedFloat>>& UnpositionedFloats() {
|
| return unpositioned_floats_;
|
| }
|
| @@ -150,6 +179,7 @@ class CORE_EXPORT NGConstraintSpace final
|
| bool is_anonymous,
|
| const NGMarginStrut& margin_strut,
|
| const NGLogicalOffset& bfc_offset,
|
| + const WTF::Optional<NGLogicalOffset>& floats_bfc_offset,
|
| const std::shared_ptr<NGExclusions>& exclusions,
|
| Vector<RefPtr<NGUnpositionedFloat>>& unpositioned_floats,
|
| const WTF::Optional<LayoutUnit>& clearance_offset);
|
| @@ -185,6 +215,8 @@ class CORE_EXPORT NGConstraintSpace final
|
|
|
| NGMarginStrut margin_strut_;
|
| NGLogicalOffset bfc_offset_;
|
| + WTF::Optional<NGLogicalOffset> floats_bfc_offset_;
|
| +
|
| const std::shared_ptr<NGExclusions> exclusions_;
|
| WTF::Optional<LayoutUnit> clearance_offset_;
|
| Vector<RefPtr<NGUnpositionedFloat>> unpositioned_floats_;
|
|
|