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

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h

Issue 2642823008: Introduce NGFloatingObject (Closed)
Patch Set: Update TestExpectations Created 3 years, 11 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_physical_fragment.h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
index b9ddfdfd1ae200e3b144228f846c317db12b34bb..a22283415ef72a176f85ef42942b4b42663cfbcd 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
@@ -15,8 +15,9 @@ namespace blink {
class NGBlockNode;
class NGBreakToken;
+struct NGFloatingObject;
-// The NGPhysicalFragmentBase contains the output information from layout. The
+// The NGPhysicalFragment contains the output information from layout. The
// fragment stores all of its information in the physical coordinate system for
// use by paint, hit-testing etc.
//
@@ -45,20 +46,20 @@ class CORE_EXPORT NGPhysicalFragment
// Returns the offset relative to the parent fragement's content-box.
LayoutUnit LeftOffset() const {
- DCHECK(has_been_placed_);
+ DCHECK(is_placed_);
return offset_.left;
}
LayoutUnit TopOffset() const {
- DCHECK(has_been_placed_);
+ DCHECK(is_placed_);
return offset_.top;
}
// Should only be used by the parent fragement's layout.
void SetOffset(NGPhysicalOffset offset) {
- DCHECK(!has_been_placed_);
+ DCHECK(!is_placed_);
offset_ = offset;
- has_been_placed_ = true;
+ is_placed_ = true;
}
NGBreakToken* BreakToken() const { return break_token_; }
@@ -72,6 +73,27 @@ class CORE_EXPORT NGPhysicalFragment
return out_of_flow_positions_;
}
+ bool IsPlaced() const { return is_placed_; }
+
+ // List of floats that need to be positioned by the next in-flow child that
+ // can determine its position in space.
+ // Use case example where it may be needed:
+ // <div><float></div>
+ // <div style="margin-top: 10px; height: 20px"></div>
+ // The float cannot be positioned right away inside of the 1st div because
+ // the vertical position is not known at that moment. It will be known only
+ // after the 2nd div collapses its margin with its parent.
+ const HeapVector<Member<NGFloatingObject>>& UnpositionedFloats() const {
+ return unpositioned_floats_;
+ }
+
+ // List of positioned float that need to be copied to the old layout tree.
+ // TODO(layout-ng): remove this once we change painting code to handle floats
+ // differently.
+ const HeapVector<Member<NGFloatingObject>>& PositionedFloats() const {
+ return positioned_floats_;
+ }
+
DECLARE_TRACE_AFTER_DISPATCH();
DECLARE_TRACE();
@@ -84,6 +106,8 @@ class CORE_EXPORT NGPhysicalFragment
NGFragmentType type,
HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
Vector<NGStaticPosition> out_of_flow_positions,
+ HeapVector<Member<NGFloatingObject>>& unpositioned_floats,
+ HeapVector<Member<NGFloatingObject>>& positioned_floats,
NGBreakToken* break_token = nullptr);
NGPhysicalSize size_;
@@ -92,9 +116,11 @@ class CORE_EXPORT NGPhysicalFragment
Member<NGBreakToken> break_token_;
HeapLinkedHashSet<WeakMember<NGBlockNode>> out_of_flow_descendants_;
Vector<NGStaticPosition> out_of_flow_positions_;
+ HeapVector<Member<NGFloatingObject>> unpositioned_floats_;
+ HeapVector<Member<NGFloatingObject>> positioned_floats_;
unsigned type_ : 1;
- unsigned has_been_placed_ : 1;
+ unsigned is_placed_ : 1;
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698