Index: third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
index 879023cc861b0389e7769851d6193264e1a6df29..a108dbfab7c70003983ec3048c1c2c8eef9c4def 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc |
@@ -53,20 +53,6 @@ NGLogicalOffset GetOriginPointForFloats(const NGConstraintSpace& space, |
origin_point.block_offset += content_size; |
return origin_point; |
} |
- |
-void PositionPendingFloats(const NGLogicalOffset& origin_point, |
- NGConstraintSpace* space, |
- NGFragmentBuilder* builder) { |
- DCHECK(builder) << "Builder cannot be null here"; |
- |
- for (auto& floating_object : builder->UnpositionedFloats()) { |
- NGLogicalOffset offset = PositionFloat(origin_point, space->BfcOffset(), |
- floating_object.get(), space); |
- builder->AddFloatingObject(floating_object, offset); |
- } |
- builder->MutableUnpositionedFloats().clear(); |
-} |
- |
} // namespace |
NGInlineLayoutAlgorithm::NGInlineLayoutAlgorithm( |
@@ -89,6 +75,9 @@ NGInlineLayoutAlgorithm::NGInlineLayoutAlgorithm( |
Initialize(break_token->ItemIndex(), break_token->TextOffset()); |
else |
Initialize(0, 0); |
+ |
+ // BFC offset is known for inline fragments. |
+ container_builder_.SetBfcOffset(space->BfcOffset()); |
} |
bool NGInlineLayoutAlgorithm::CanFitOnLine() const { |
@@ -279,7 +268,7 @@ bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { |
NGLogicalOffset origin_point = |
GetOriginPointForFloats(ConstraintSpace(), content_size_); |
- PositionPendingFloats(origin_point, MutableConstraintSpace(), |
+ PositionPendingFloats(origin_point.block_offset, MutableConstraintSpace(), |
&container_builder_); |
FindNextLayoutOpportunity(); |
return true; |
@@ -339,9 +328,15 @@ void NGInlineLayoutAlgorithm::LayoutAndPositionFloat( |
float_space->WritingMode(), |
toNGPhysicalBoxFragment(layout_result->PhysicalFragment().get())); |
+ NGLogicalOffset origin_offset = |
+ GetOriginPointForFloats(ConstraintSpace(), content_size_); |
+ NGLogicalOffset from_offset = ConstraintSpace().BfcOffset(); |
+ // TODO(glebl): add margins calculation. |
+ NGBoxStrut margins; |
RefPtr<NGFloatingObject> floating_object = NGFloatingObject::Create( |
- float_space.get(), MutableConstraintSpace(), node->Style(), NGBoxStrut(), |
- current_opportunity_.size, layout_result->PhysicalFragment().get()); |
+ node->Style(), float_space->WritingMode(), current_opportunity_.size, |
+ origin_offset, from_offset, margins, |
+ layout_result->PhysicalFragment().get()); |
bool float_does_not_fit = end_position + float_fragment.InlineSize() > |
current_opportunity_.InlineSize(); |
@@ -351,11 +346,8 @@ void NGInlineLayoutAlgorithm::LayoutAndPositionFloat( |
float_does_not_fit) { |
container_builder_.AddUnpositionedFloat(floating_object); |
} else { |
- NGLogicalOffset origin_point = |
- GetOriginPointForFloats(ConstraintSpace(), content_size_); |
NGLogicalOffset offset = |
- PositionFloat(origin_point, ConstraintSpace().BfcOffset(), |
- floating_object.get(), MutableConstraintSpace()); |
+ PositionFloat(floating_object.get(), MutableConstraintSpace()); |
container_builder_.AddFloatingObject(floating_object, offset); |
FindNextLayoutOpportunity(); |
} |