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

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

Issue 2451123003: Make NGLayoutOpportunityIterator to support origin_point. (Closed)
Patch Set: 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
Index: third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.cc
index a44e3a31f08d030640f00604dd390df1ff68a833..dfcb0b331022510d3459f4b17726951b5d16e209 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.cc
@@ -23,6 +23,21 @@ void CollectAllOpportunities(const NGLayoutOpportunityTreeNode* node,
CollectAllOpportunities(node->right, opportunities);
}
+// Creates layout opportunity from the provided space and the origin point.
+NGLayoutOpportunity CreateLayoutOpportunityFromConstraintSpace(
+ const NGConstraintSpace& space,
+ const NGLogicalOffset& origin_point) {
+ NGLayoutOpportunity opportunity;
+ opportunity.offset = space.Offset();
+ opportunity.size = space.Size();
+
+ // adjust to the origin_point.
+ opportunity.offset += origin_point;
+ opportunity.size.inline_size -= origin_point.inline_offset;
+ opportunity.size.block_size -= origin_point.block_offset;
+ return opportunity;
+}
+
// Whether 2 edges overlap with each other.
bool IsOverlapping(const NGEdge& edge1, const NGEdge& edge2) {
return std::max(edge1.start, edge2.start) <= std::min(edge1.end, edge2.end);
@@ -205,20 +220,18 @@ bool CompareNGLayoutOpportunitesByStartPoint(const NGLayoutOpportunity& lhs,
NGLayoutOpportunityIterator::NGLayoutOpportunityIterator(
NGConstraintSpace* space,
- const NGLogicalOrigin origin_point,
- const NGLogicalLeader leader_point)
- : constraint_space_(space),
- origin_point_(origin_point),
- leader_point_(leader_point) {
+ const NGLogicalOffset origin_point,
+ const NGLogicalOffset leader_point)
+ : constraint_space_(space), leader_point_(leader_point) {
// TODO(chrome-layout-team): Combine exclusions that shadow each other.
auto exclusions = constraint_space_->PhysicalSpace()->Exclusions();
DCHECK(std::is_sorted(exclusions.begin(), exclusions.end(),
&CompareNGExclusionsByTopAsc))
<< "Exclusions are expected to be sorted by TOP";
- opportunity_tree_root_ = new NGLayoutOpportunityTreeNode(NGLayoutOpportunity(
- space->Offset().inline_offset, space->Offset().block_offset,
- space->Size().inline_size, space->Size().block_size));
+ NGLayoutOpportunity initial_opportunity =
+ CreateLayoutOpportunityFromConstraintSpace(*space, origin_point);
+ opportunity_tree_root_ = new NGLayoutOpportunityTreeNode(initial_opportunity);
for (const auto exclusion : exclusions) {
InsertExclusion(MutableOpportunityTreeRoot(), exclusion, opportunities_);
@@ -226,6 +239,7 @@ NGLayoutOpportunityIterator::NGLayoutOpportunityIterator(
CollectAllOpportunities(OpportunityTreeRoot(), opportunities_);
std::sort(opportunities_.begin(), opportunities_.end(),
&CompareNGLayoutOpportunitesByStartPoint);
+
opportunity_iter_ = opportunities_.begin();
}

Powered by Google App Engine
This is Rietveld 408576698