| Index: third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc b/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
|
| index 93dd925e874e122b64977a1099b5f2d2709e707a..762b170aff419efd686b51fa05d7aaa9f704bd7c 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
|
| @@ -5,6 +5,7 @@
|
| #include "core/layout/ng/ng_floats_utils.h"
|
|
|
| #include "core/layout/ng/ng_box_fragment.h"
|
| +#include "core/layout/ng/ng_layout_opportunity_iterator.h"
|
|
|
| namespace blink {
|
| namespace {
|
| @@ -28,42 +29,15 @@ NGLogicalOffset AdjustToTopEdgeAlignmentRule(const NGConstraintSpace& space,
|
| return adjusted_offset;
|
| }
|
|
|
| -// Finds a layout opportunity for the fragment.
|
| -// It iterates over all layout opportunities in the constraint space and returns
|
| -// the first layout opportunity that is wider than the fragment or returns the
|
| -// last one which is always the widest.
|
| -//
|
| -// @param space Constraint space that is used to find layout opportunity for
|
| -// the fragment.
|
| -// @param fragment Fragment that needs to be placed.
|
| -// @param floating_object Floating object for which we need to find a layout
|
| -// opportunity.
|
| -// @return Layout opportunity for the fragment.
|
| -const NGLayoutOpportunity FindLayoutOpportunityForFragment(
|
| +NGLayoutOpportunity FindLayoutOpportunityForFloat(
|
| const NGConstraintSpace* space,
|
| const NGFragment& fragment,
|
| const NGFloatingObject* floating_object) {
|
| NGLogicalOffset adjusted_origin_point =
|
| AdjustToTopEdgeAlignmentRule(*space, floating_object->origin_offset);
|
| -
|
| - NGLayoutOpportunityIterator opportunity_iter(space->Exclusions().get(),
|
| - floating_object->available_size,
|
| - adjusted_origin_point);
|
| - NGLayoutOpportunity opportunity;
|
| - NGLayoutOpportunity opportunity_candidate = opportunity_iter.Next();
|
| -
|
| - NGBoxStrut margins = floating_object->margins;
|
| - while (!opportunity_candidate.IsEmpty()) {
|
| - opportunity = opportunity_candidate;
|
| - // Checking opportunity's block size is not necessary as a float cannot be
|
| - // positioned on top of another float inside of the same constraint space.
|
| - auto fragment_inline_size = fragment.InlineSize() + margins.InlineSum();
|
| - if (opportunity.size.inline_size >= fragment_inline_size)
|
| - break;
|
| -
|
| - opportunity_candidate = opportunity_iter.Next();
|
| - }
|
| - return opportunity;
|
| + return FindLayoutOpportunityForFragment(
|
| + space->Exclusions().get(), floating_object->available_size,
|
| + adjusted_origin_point, floating_object->margins, fragment);
|
| }
|
|
|
| // Calculates the logical offset for opportunity.
|
| @@ -128,7 +102,7 @@ NGLogicalOffset PositionFloat(NGFloatingObject* floating_object,
|
| ToNGPhysicalBoxFragment(floating_object->fragment.Get()));
|
|
|
| // Find a layout opportunity that will fit our float.
|
| - NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment(
|
| + NGLayoutOpportunity opportunity = FindLayoutOpportunityForFloat(
|
| new_parent_space, float_fragment, floating_object);
|
|
|
| // TODO(glebl): This should check for infinite opportunity instead.
|
| @@ -163,21 +137,16 @@ NGLogicalOffset PositionFloat(NGFloatingObject* floating_object,
|
| return logical_offset;
|
| }
|
|
|
| -void PositionPendingFloats(const LayoutUnit& origin_block_offset,
|
| - NGConstraintSpace* space,
|
| - NGFragmentBuilder* builder) {
|
| - DCHECK(builder) << "Builder cannot be null here";
|
| - DCHECK(builder->BfcOffset()) << "Parent BFC offset should be known here";
|
| - LayoutUnit bfc_block_offset = builder->BfcOffset().value().block_offset;
|
| -
|
| - for (auto& floating_object : builder->UnpositionedFloats()) {
|
| +void PositionFloats(LayoutUnit origin_block_offset,
|
| + LayoutUnit from_block_offset,
|
| + const Vector<RefPtr<NGFloatingObject>>& floating_objects,
|
| + NGConstraintSpace* space) {
|
| + for (auto& floating_object : floating_objects) {
|
| floating_object->origin_offset.block_offset = origin_block_offset;
|
| - floating_object->from_offset.block_offset = bfc_block_offset;
|
| -
|
| - NGLogicalOffset offset = PositionFloat(floating_object.Get(), space);
|
| - builder->AddFloatingObject(floating_object, offset);
|
| + floating_object->from_offset.block_offset = from_block_offset;
|
| + floating_object->logical_offset =
|
| + PositionFloat(floating_object.Get(), space);
|
| }
|
| - builder->MutableUnpositionedFloats().clear();
|
| }
|
|
|
| } // namespace blink
|
|
|