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

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc

Issue 2438313003: [LayoutNG] Remove derived constraint spaces from opportunity iterator. (Closed)
Patch Set: address comments. Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
index 24ec11459275cba7c3080c5c31a4fd5e59c7a85d..1f126b242f35a5842d0064cf22eb60e3df9bdf8f 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
@@ -28,12 +28,12 @@ LayoutUnit ComputeCollapsedMarginBlockStart(
// Creates an exclusion from the fragment that will be placed in the provided
// layout opportunity.
NGExclusion* CreateExclusion(const NGFragment& fragment,
- const NGConstraintSpace* opportunity,
+ const NGLayoutOpportunity& opportunity,
LayoutUnit float_offset,
NGBoxStrut margins) {
- LayoutUnit exclusion_top = opportunity->Offset().block_offset;
+ LayoutUnit exclusion_top = opportunity.offset.block_offset;
- LayoutUnit exclusion_left = opportunity->Offset().inline_offset;
+ LayoutUnit exclusion_left = opportunity.offset.inline_offset;
exclusion_left += float_offset;
LayoutUnit exclusion_bottom = exclusion_top + fragment.BlockSize();
@@ -56,25 +56,29 @@ NGExclusion* CreateExclusion(const NGFragment& fragment,
// the fragment.
// @param fragment Fragment that needs to be placed.
// @return Layout opportunity for the fragment.
-const NGConstraintSpace* FindLayoutOpportunityForFragment(
+const NGLayoutOpportunity FindLayoutOpportunityForFragment(
const Member<NGConstraintSpace>& space,
const NGFragment& fragment) {
NGLayoutOpportunityIterator* opportunity_iter = space->LayoutOpportunities();
- const NGConstraintSpace* opportunity = nullptr;
- while (const NGConstraintSpace* opportunity_candidate =
- opportunity_iter->Next()) {
+ NGLayoutOpportunity opportunity;
+ NGLayoutOpportunity opportunity_candidate = opportunity_iter->Next();
+
+ 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.
- if (opportunity->Size().inline_size > fragment.InlineSize())
+ if (opportunity.size.inline_size > fragment.InlineSize())
break;
+
+ opportunity_candidate = opportunity_iter->Next();
}
+
return opportunity;
}
// Calculates the logical offset for opportunity.
NGLogicalOffset CalculateLogicalOffsetForOpportunity(
- const NGConstraintSpace* opportunity,
+ const NGLayoutOpportunity& opportunity,
NGBoxStrut border_padding,
LayoutUnit float_offset,
NGBoxStrut margins) {
@@ -89,8 +93,8 @@ NGLogicalOffset CalculateLogicalOffsetForOpportunity(
block_offset += margins.block_start;
// Offset from the opportunity's block/inline start.
- inline_offset += opportunity->Offset().inline_offset;
- block_offset += opportunity->Offset().block_offset;
+ inline_offset += opportunity.offset.inline_offset;
+ block_offset += opportunity.offset.block_offset;
inline_offset += float_offset;
@@ -323,14 +327,14 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PositionFloatFragment(
NGBoxStrut margins) {
// TODO(glebl@chromium.org): Support the top edge alignment rule.
// Find a layout opportunity that will fit our float.
- const NGConstraintSpace* opportunity = FindLayoutOpportunityForFragment(
+ const NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment(
constraint_space_for_children_, fragment);
- DCHECK(opportunity) << "Opportunity is NULL but it shouldn't be";
+ DCHECK(!opportunity.IsEmpty()) << "Opportunity is empty but it shouldn't be";
// Calculate the float offset if needed.
LayoutUnit float_offset;
if (current_child_->Style()->floating() == EFloat::Right) {
- float_offset = opportunity->Size().inline_size - fragment.InlineSize();
+ float_offset = opportunity.size.inline_size - fragment.InlineSize();
}
// Add the float as an exclusion.
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698