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 44b48823ee430393d50682711a1cf0479d6ff31f..c46fc02b98d9c5370b0daff18a8ddee58caf6c4b 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 |
@@ -35,11 +35,12 @@ NGLogicalOffset AdjustToTopEdgeAlignmentRule(const NGConstraintSpace& space, |
} |
NGLayoutOpportunity FindLayoutOpportunityForFloat( |
+ const NGLogicalOffset& origin_offset, |
const NGConstraintSpace& space, |
const NGUnpositionedFloat& unpositioned_float, |
LayoutUnit inline_size) { |
NGLogicalOffset adjusted_origin_point = |
- AdjustToTopEdgeAlignmentRule(space, unpositioned_float.origin_offset); |
+ AdjustToTopEdgeAlignmentRule(space, origin_offset); |
WTF::Optional<LayoutUnit> clearance_offset = |
GetClearanceOffset(space.Exclusions(), unpositioned_float.ClearType()); |
@@ -55,6 +56,7 @@ NGLayoutOpportunity FindLayoutOpportunityForFloat( |
NGLogicalOffset CalculateLogicalOffsetForOpportunity( |
const NGLayoutOpportunity& opportunity, |
const LayoutUnit float_offset, |
+ const LayoutUnit parent_bfc_block_offset, |
const NGUnpositionedFloat* unpositioned_float) { |
DCHECK(unpositioned_float); |
auto margins = unpositioned_float->margins; |
@@ -67,7 +69,8 @@ NGLogicalOffset CalculateLogicalOffsetForOpportunity( |
// Adjust to float: right offset if needed. |
result.inline_offset += float_offset; |
- result -= unpositioned_float->from_offset; |
+ result -= {unpositioned_float->bfc_inline_offset, parent_bfc_block_offset}; |
+ |
return result; |
} |
@@ -94,17 +97,16 @@ NGLogicalOffset CalculateFloatingObjectPaintOffset( |
const NGConstraintSpace& new_parent_space, |
const NGLogicalOffset& float_logical_offset, |
const NGUnpositionedFloat& unpositioned_float) { |
- LayoutUnit inline_offset = unpositioned_float.from_offset.inline_offset - |
+ LayoutUnit inline_offset = unpositioned_float.bfc_inline_offset - |
new_parent_space.BfcOffset().inline_offset + |
float_logical_offset.inline_offset; |
- DCHECK(unpositioned_float.parent_bfc_block_offset); |
- LayoutUnit block_offset = unpositioned_float.from_offset.block_offset - |
- unpositioned_float.parent_bfc_block_offset.value() + |
- float_logical_offset.block_offset; |
+ LayoutUnit block_offset = float_logical_offset.block_offset; |
return {inline_offset, block_offset}; |
} |
+// TODO(ikilpatrick): origin_block_offset looks wrong for fragmentation here. |
WTF::Optional<LayoutUnit> CalculateFragmentationOffset( |
+ const LayoutUnit origin_block_offset, |
const NGUnpositionedFloat& unpositioned_float, |
const NGConstraintSpace& parent_space) { |
const ComputedStyle& style = unpositioned_float.node.Style(); |
@@ -112,8 +114,7 @@ WTF::Optional<LayoutUnit> CalculateFragmentationOffset( |
parent_space.WritingMode()); |
if (parent_space.HasBlockFragmentation()) { |
- return parent_space.FragmentainerSpaceAvailable() - |
- unpositioned_float.origin_offset.block_offset; |
+ return parent_space.FragmentainerSpaceAvailable() - origin_block_offset; |
} |
return WTF::nullopt; |
@@ -198,15 +199,20 @@ LayoutUnit ComputeInlineSizeForUnpositionedFloat( |
.InlineSize(); |
} |
-NGPositionedFloat PositionFloat(NGUnpositionedFloat* unpositioned_float, |
+NGPositionedFloat PositionFloat(LayoutUnit origin_block_offset, |
+ LayoutUnit parent_bfc_block_offset, |
+ NGUnpositionedFloat* unpositioned_float, |
NGConstraintSpace* new_parent_space) { |
DCHECK(unpositioned_float); |
LayoutUnit inline_size = ComputeInlineSizeForUnpositionedFloat( |
new_parent_space, unpositioned_float); |
+ NGLogicalOffset origin_offset = {unpositioned_float->origin_bfc_inline_offset, |
+ origin_block_offset}; |
+ |
// Find a layout opportunity that will fit our float. |
NGLayoutOpportunity opportunity = FindLayoutOpportunityForFloat( |
- *new_parent_space, *unpositioned_float, inline_size); |
+ origin_offset, *new_parent_space, *unpositioned_float, inline_size); |
#if DCHECK_IS_ON() |
bool is_same_writing_mode = |
@@ -228,7 +234,8 @@ NGPositionedFloat PositionFloat(NGUnpositionedFloat* unpositioned_float, |
DCHECK(is_same_writing_mode); |
#endif |
WTF::Optional<LayoutUnit> fragmentation_offset = |
- CalculateFragmentationOffset(*unpositioned_float, *new_parent_space); |
+ CalculateFragmentationOffset(origin_block_offset, *unpositioned_float, |
+ *new_parent_space); |
RefPtr<NGConstraintSpace> space = CreateConstraintSpaceForFloat( |
*unpositioned_float, new_parent_space, fragmentation_offset); |
@@ -268,7 +275,7 @@ NGPositionedFloat PositionFloat(NGUnpositionedFloat* unpositioned_float, |
new_parent_space->AddExclusion(exclusion); |
NGLogicalOffset logical_offset = CalculateLogicalOffsetForOpportunity( |
- opportunity, float_offset, unpositioned_float); |
+ opportunity, float_offset, parent_bfc_block_offset, unpositioned_float); |
NGLogicalOffset paint_offset = CalculateFloatingObjectPaintOffset( |
*new_parent_space, logical_offset, *unpositioned_float); |
@@ -278,18 +285,16 @@ NGPositionedFloat PositionFloat(NGUnpositionedFloat* unpositioned_float, |
const Vector<NGPositionedFloat> PositionFloats( |
LayoutUnit origin_block_offset, |
- LayoutUnit from_block_offset, |
- LayoutUnit parent_bfc_offset, |
+ LayoutUnit parent_bfc_block_offset, |
const Vector<RefPtr<NGUnpositionedFloat>>& unpositioned_floats, |
NGConstraintSpace* space) { |
Vector<NGPositionedFloat> positioned_floats; |
positioned_floats.ReserveCapacity(unpositioned_floats.size()); |
for (auto& unpositioned_float : unpositioned_floats) { |
- unpositioned_float->origin_offset.block_offset = origin_block_offset; |
- unpositioned_float->from_offset.block_offset = from_block_offset; |
- unpositioned_float->parent_bfc_block_offset = parent_bfc_offset; |
- positioned_floats.push_back(PositionFloat(unpositioned_float.Get(), space)); |
+ positioned_floats.push_back(PositionFloat(origin_block_offset, |
+ parent_bfc_block_offset, |
+ unpositioned_float.Get(), space)); |
} |
return positioned_floats; |