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

Side by Side Diff: third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc

Issue 2850893003: Add container_block_offset,top_offset to NGFloatingObject. (Closed)
Patch Set: add-inline-to-block-flow-with-block-children-that-do-not-need-anonymous-boxes.html is still broken Created 3 years, 7 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 #include "core/layout/ng/ng_floats_utils.h" 5 #include "core/layout/ng/ng_floats_utils.h"
6 6
7 #include "core/layout/ng/ng_box_fragment.h" 7 #include "core/layout/ng/ng_box_fragment.h"
8 #include "core/layout/ng/ng_layout_opportunity_iterator.h" 8 #include "core/layout/ng/ng_layout_opportunity_iterator.h"
9 9
10 namespace blink { 10 namespace blink {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 exclusion.type = exclusion_type; 71 exclusion.type = exclusion_type;
72 NGLogicalRect& rect = exclusion.rect; 72 NGLogicalRect& rect = exclusion.rect;
73 rect.offset = opportunity.offset; 73 rect.offset = opportunity.offset;
74 rect.offset.inline_offset += float_offset; 74 rect.offset.inline_offset += float_offset;
75 75
76 rect.size.inline_size = fragment.InlineSize() + margins.InlineSum(); 76 rect.size.inline_size = fragment.InlineSize() + margins.InlineSum();
77 rect.size.block_size = fragment.BlockSize() + margins.BlockSum(); 77 rect.size.block_size = fragment.BlockSize() + margins.BlockSum();
78 return exclusion; 78 return exclusion;
79 } 79 }
80 80
81 // Calculates the Floating Object's left offset from the provided parent_space 81 // Updates the Floating Object's left and top offsets.
82 // and {@code floating_object}'s space and margins. 82 NGPhysicalOffset CalculateFloatingObjectPaintOffset(
83 LayoutUnit CalculateLeftOffset(const NGConstraintSpace& new_parent_space, 83 const NGConstraintSpace& new_parent_space,
84 const NGLogicalOffset& float_logical_offset, 84 const NGLogicalOffset& float_logical_offset,
85 const NGFloatingObject& floating_object) { 85 const NGFloatingObject& floating_object) {
86 // TODO(glebl): We should use physical offset here. 86 // TODO(glebl): We should use physical offset here.
87 return floating_object.from_offset.inline_offset - 87 LayoutUnit left_offset = floating_object.from_offset.inline_offset -
88 new_parent_space.BfcOffset().inline_offset + 88 new_parent_space.BfcOffset().inline_offset +
89 float_logical_offset.inline_offset; 89 float_logical_offset.inline_offset;
90 DCHECK(floating_object.parent_bfc_block_offset);
91 LayoutUnit top_offset = floating_object.from_offset.block_offset -
92 floating_object.parent_bfc_block_offset.value() +
93 float_logical_offset.block_offset;
94 return {left_offset, top_offset};
90 } 95 }
91 } // namespace 96 } // namespace
92 97
93 NGPositionedFloat PositionFloat(NGFloatingObject* floating_object, 98 NGPositionedFloat PositionFloat(NGFloatingObject* floating_object,
94 NGConstraintSpace* new_parent_space) { 99 NGConstraintSpace* new_parent_space) {
95 DCHECK(floating_object); 100 DCHECK(floating_object);
96 DCHECK(floating_object->fragment) << "Fragment cannot be null here"; 101 DCHECK(floating_object->fragment) << "Fragment cannot be null here";
97 102
98 // TODO(ikilpatrick): The writing mode switching here looks wrong. 103 // TODO(ikilpatrick): The writing mode switching here looks wrong.
99 NGBoxFragment float_fragment( 104 NGBoxFragment float_fragment(
(...skipping 24 matching lines...) Expand all
124 } 129 }
125 130
126 // Add the float as an exclusion. 131 // Add the float as an exclusion.
127 const NGExclusion exclusion = CreateExclusion( 132 const NGExclusion exclusion = CreateExclusion(
128 float_fragment, opportunity, float_offset, floating_object->margins, 133 float_fragment, opportunity, float_offset, floating_object->margins,
129 floating_object->exclusion_type); 134 floating_object->exclusion_type);
130 new_parent_space->AddExclusion(exclusion); 135 new_parent_space->AddExclusion(exclusion);
131 136
132 NGLogicalOffset logical_offset = CalculateLogicalOffsetForOpportunity( 137 NGLogicalOffset logical_offset = CalculateLogicalOffsetForOpportunity(
133 opportunity, float_offset, floating_object); 138 opportunity, float_offset, floating_object);
134 139 NGPhysicalOffset paint_offset = CalculateFloatingObjectPaintOffset(
135 LayoutUnit left_offset = 140 *new_parent_space, logical_offset, *floating_object);
136 CalculateLeftOffset(*new_parent_space, logical_offset, *floating_object);
137 141
138 return NGPositionedFloat(floating_object->fragment, logical_offset, 142 return NGPositionedFloat(floating_object->fragment, logical_offset,
139 left_offset); 143 paint_offset);
140 } 144 }
141 145
142 const Vector<NGPositionedFloat> PositionFloats( 146 const Vector<NGPositionedFloat> PositionFloats(
143 LayoutUnit origin_block_offset, 147 LayoutUnit origin_block_offset,
144 LayoutUnit from_block_offset, 148 LayoutUnit from_block_offset,
149 LayoutUnit parent_bfc_offset,
145 const Vector<RefPtr<NGFloatingObject>>& floating_objects, 150 const Vector<RefPtr<NGFloatingObject>>& floating_objects,
146 NGConstraintSpace* space) { 151 NGConstraintSpace* space) {
147 Vector<NGPositionedFloat> positioned_floats; 152 Vector<NGPositionedFloat> positioned_floats;
148 positioned_floats.ReserveCapacity(floating_objects.size()); 153 positioned_floats.ReserveCapacity(floating_objects.size());
149 154
150 for (auto& floating_object : floating_objects) { 155 for (auto& floating_object : floating_objects) {
151 floating_object->origin_offset.block_offset = origin_block_offset; 156 floating_object->origin_offset.block_offset = origin_block_offset;
152 floating_object->from_offset.block_offset = from_block_offset; 157 floating_object->from_offset.block_offset = from_block_offset;
158 floating_object->parent_bfc_block_offset = parent_bfc_offset;
153 positioned_floats.push_back(PositionFloat(floating_object.Get(), space)); 159 positioned_floats.push_back(PositionFloat(floating_object.Get(), space));
154 } 160 }
155 161
156 return positioned_floats; 162 return positioned_floats;
157 } 163 }
158 164
159 } // namespace blink 165 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698