Index: third_party/WebKit/Source/core/layout/ng/ng_layout_result.h |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..49d206a2b560d311fbdb0b5aa8e5760c19165a1f |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h |
@@ -0,0 +1,73 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef NGLayoutResult_h |
+#define NGLayoutResult_h |
+ |
+#include "core/CoreExport.h" |
+#include "core/layout/ng/ng_physical_fragment.h" |
+#include "core/layout/ng/ng_units.h" |
+#include "platform/LayoutUnit.h" |
+#include "platform/heap/Handle.h" |
+#include "wtf/Vector.h" |
+ |
+namespace blink { |
+ |
+class LayoutObject; |
+class NGPhysicalFragment; |
+class NGBlockNode; |
+struct NGFloatingObject; |
+ |
+// The NGLayoutResult stores the resulting data from layout. This includes |
+// geometry information in form of a NGPhysicalFragment, which is kept around |
+// for painting, hit testing, etc., as well as additional data which is only |
+// necessary during layout and stored on this object. |
+// Layout code should access the NGPhysicalFragment through the wrappers in |
+// NGFragment et al. |
+class CORE_EXPORT NGLayoutResult : public RefCounted<NGLayoutResult> { |
+ public: |
+ RefPtr<NGPhysicalFragment> PhysicalFragment() const { |
+ return physical_fragment_; |
+ } |
+ |
+ const HeapLinkedHashSet<WeakMember<NGBlockNode>>& OutOfFlowDescendants() |
+ const { |
+ return out_of_flow_descendants_; |
+ } |
+ |
+ const Vector<NGStaticPosition>& OutOfFlowPositions() const { |
+ return out_of_flow_positions_; |
+ } |
+ |
+ // 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 Vector<Persistent<NGFloatingObject>>& UnpositionedFloats() const { |
+ return unpositioned_floats_; |
+ } |
+ |
+ private: |
+ friend class NGFragmentBuilder; |
+ |
+ NGLayoutResult(PassRefPtr<NGPhysicalFragment> physical_fragment, |
+ PersistentHeapLinkedHashSet<WeakMember<NGBlockNode>>& |
+ out_of_flow_descendants, |
+ Vector<NGStaticPosition> out_of_flow_positions, |
+ Vector<Persistent<NGFloatingObject>>& unpositioned_floats); |
+ |
+ RefPtr<NGPhysicalFragment> physical_fragment_; |
+ LayoutObject* layout_object_; |
+ PersistentHeapLinkedHashSet<WeakMember<NGBlockNode>> out_of_flow_descendants_; |
+ Vector<NGStaticPosition> out_of_flow_positions_; |
+ Vector<Persistent<NGFloatingObject>> unpositioned_floats_; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif // NGLayoutResult_h |