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

Side by Side Diff: third_party/WebKit/Source/core/layout/ng/ng_block_node.h

Issue 2921463004: [LayoutNG] PODify NGLayoutInputNode and sub-classes. (Closed)
Patch Set: new ng-bot expectations Created 3 years, 6 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 #ifndef NGBlockNode_h 5 #ifndef NGBlockNode_h
6 #define NGBlockNode_h 6 #define NGBlockNode_h
7 7
8 #include "core/CoreExport.h" 8 #include "core/CoreExport.h"
9 #include "core/layout/LayoutBox.h" 9 #include "core/layout/LayoutBox.h"
10 #include "core/layout/ng/ng_layout_input_node.h" 10 #include "core/layout/ng/ng_layout_input_node.h"
11 #include "core/layout/ng/ng_physical_box_fragment.h" 11 #include "core/layout/ng/ng_physical_box_fragment.h"
12 #include "platform/heap/Handle.h" 12 #include "platform/heap/Handle.h"
13 13
14 namespace blink { 14 namespace blink {
15 15
16 class ComputedStyle;
17 class LayoutObject; 16 class LayoutObject;
18 class NGBreakToken; 17 class NGBreakToken;
19 class NGConstraintSpace; 18 class NGConstraintSpace;
20 class NGLayoutResult; 19 class NGLayoutResult;
21 struct NGLogicalOffset; 20 struct NGLogicalOffset;
22 struct MinMaxContentSize; 21 struct MinMaxContentSize;
23 22
24 // Represents a node to be laid out. 23 // Represents a node to be laid out.
25 class CORE_EXPORT NGBlockNode final : public NGLayoutInputNode { 24 class CORE_EXPORT NGBlockNode final : public NGLayoutInputNode {
26 friend NGLayoutInputNode; 25 friend NGLayoutInputNode;
27
28 public: 26 public:
29 explicit NGBlockNode(LayoutObject*); 27 explicit NGBlockNode(LayoutBox*);
30
31 ~NGBlockNode() override;
32 28
33 RefPtr<NGLayoutResult> Layout(NGConstraintSpace* constraint_space, 29 RefPtr<NGLayoutResult> Layout(NGConstraintSpace* constraint_space,
34 NGBreakToken* break_token = nullptr) override; 30 NGBreakToken* break_token = nullptr);
35 NGLayoutInputNode* NextSibling() override; 31 NGLayoutInputNode NextSibling() const;
36 LayoutObject* GetLayoutObject() const override;
37 32
38 // Computes the value of min-content and max-content for this box. 33 // Computes the value of min-content and max-content for this box.
39 // If the underlying layout algorithm's ComputeMinMaxContentSize returns 34 // If the underlying layout algorithm's ComputeMinMaxContentSize returns
40 // no value, this function will synthesize these sizes using Layout with 35 // no value, this function will synthesize these sizes using Layout with
41 // special constraint spaces -- infinite available size for max content, zero 36 // special constraint spaces -- infinite available size for max content, zero
42 // available size for min content, and percentage resolution size zero for 37 // available size for min content, and percentage resolution size zero for
43 // both. 38 // both.
44 MinMaxContentSize ComputeMinMaxContentSize() override; 39 MinMaxContentSize ComputeMinMaxContentSize();
45 40
46 const ComputedStyle& Style() const override; 41 NGLayoutInputNode FirstChild();
47 42
48 NGLayoutInputNode* FirstChild(); 43 // Runs layout on the underlying LayoutObject and creates a fragment for the
49 44 // resulting geometry.
50 DECLARE_VIRTUAL_TRACE();
51
52 // Runs layout on layout_box_ and creates a fragment for the resulting
53 // geometry.
54 RefPtr<NGLayoutResult> RunOldLayout(const NGConstraintSpace&); 45 RefPtr<NGLayoutResult> RunOldLayout(const NGConstraintSpace&);
55 46
56 // Called if this is an out-of-flow block which needs to be 47 // Called if this is an out-of-flow block which needs to be
57 // positioned with legacy layout. 48 // positioned with legacy layout.
58 void UseOldOutOfFlowPositioning(); 49 void UseOldOutOfFlowPositioning();
59 50
60 // Save static position for legacy AbsPos layout. 51 // Save static position for legacy AbsPos layout.
61 void SaveStaticOffsetForLegacy(const NGLogicalOffset&); 52 void SaveStaticOffsetForLegacy(const NGLogicalOffset&);
62 53
63 bool CanUseNewLayout() const; 54 bool CanUseNewLayout() const;
64 55
65 String ToString() const override; 56 String ToString() const;
66 57
67 private: 58 private:
68 // After we run the layout algorithm, this function copies back the geometry 59 // After we run the layout algorithm, this function copies back the geometry
69 // data to the layout box. 60 // data to the layout box.
70 void CopyFragmentDataToLayoutBox(const NGConstraintSpace&, NGLayoutResult*); 61 void CopyFragmentDataToLayoutBox(const NGConstraintSpace&, NGLayoutResult*);
71
72 // We can either wrap a layout_box_ or a next_sibling_/first_child_
73 // combination.
74 LayoutBox* layout_box_;
75 Member<NGLayoutInputNode> next_sibling_;
76 Member<NGLayoutInputNode> first_child_;
77 }; 62 };
78 63
79 DEFINE_TYPE_CASTS(NGBlockNode, 64 DEFINE_TYPE_CASTS(NGBlockNode,
80 NGLayoutInputNode, 65 NGLayoutInputNode,
81 node, 66 node,
82 node->IsBlock(), 67 node->IsBlock(),
83 node.IsBlock()); 68 node.IsBlock());
84 69
85 } // namespace blink 70 } // namespace blink
86 71
87 #endif // NGBlockNode 72 #endif // NGBlockNode
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698