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

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

Issue 2655783006: Top down version of algorithm to position margins and floats in LayoutNG (Closed)
Patch Set: git rebase-update Created 3 years, 10 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 NGBlockLayoutAlgorithm_h 5 #ifndef NGBlockLayoutAlgorithm_h
6 #define NGBlockLayoutAlgorithm_h 6 #define NGBlockLayoutAlgorithm_h
7 7
8 #include "core/CoreExport.h" 8 #include "core/CoreExport.h"
9 #include "core/layout/ng/ng_block_node.h" 9 #include "core/layout/ng/ng_block_node.h"
10 #include "core/layout/ng/ng_box_fragment.h"
10 #include "core/layout/ng/ng_layout_algorithm.h" 11 #include "core/layout/ng/ng_layout_algorithm.h"
11 #include "core/layout/ng/ng_units.h" 12 #include "core/layout/ng/ng_units.h"
12 #include "wtf/RefPtr.h" 13 #include "wtf/RefPtr.h"
13 14
14 namespace blink { 15 namespace blink {
15 16
16 class ComputedStyle; 17 class ComputedStyle;
17 class NGBlockBreakToken; 18 class NGBlockBreakToken;
18 class NGBreakToken; 19 class NGBreakToken;
19 class NGColumnMapper; 20 class NGColumnMapper;
20 class NGConstraintSpace; 21 class NGConstraintSpace;
21 class NGConstraintSpaceBuilder; 22 class NGConstraintSpaceBuilder;
22 class NGBoxFragment;
23 class NGFragment; 23 class NGFragment;
24 class NGFragmentBuilder; 24 class NGFragmentBuilder;
25 class NGPhysicalFragment; 25 class NGPhysicalFragment;
26 26
27 // A class for general block layout (e.g. a <div> with no special style). 27 // A class for general block layout (e.g. a <div> with no special style).
28 // Lays out the children in sequence. 28 // Lays out the children in sequence.
29 class CORE_EXPORT NGBlockLayoutAlgorithm : public NGLayoutAlgorithm { 29 class CORE_EXPORT NGBlockLayoutAlgorithm : public NGLayoutAlgorithm {
30 public: 30 public:
31 // Default constructor. 31 // Default constructor.
32 // @param layout_object The layout object associated with this block. 32 // @param layout_object The layout object associated with this block.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 // Get the amount of block space left in the current fragmentainer for the 90 // Get the amount of block space left in the current fragmentainer for the
91 // child that is about to be laid out. 91 // child that is about to be laid out.
92 LayoutUnit SpaceAvailableForCurrentChild() const; 92 LayoutUnit SpaceAvailableForCurrentChild() const;
93 93
94 LayoutUnit BorderEdgeForCurrentChild() const { 94 LayoutUnit BorderEdgeForCurrentChild() const {
95 // TODO(mstensho): Need to take care of margin collapsing somehow. We 95 // TODO(mstensho): Need to take care of margin collapsing somehow. We
96 // should at least attempt to estimate what the top margin is going to be. 96 // should at least attempt to estimate what the top margin is going to be.
97 return content_size_; 97 return content_size_;
98 } 98 }
99 99
100 // Computes collapsed margins for 2 adjoining blocks and updates the resultant 100 // Calculates offset for the provided fragment which is relative to the
101 // fragment's MarginStrut if needed. 101 // fragment's parent.
102 // See https://www.w3.org/TR/CSS2/box.html#collapsing-margins 102 NGLogicalOffset CalculateRelativeOffset(const NGBoxFragment& fragment);
103 //
104 // @param child_margins Margins information for the current child.
105 // @param fragment Current child's fragment.
106 // @return NGBoxStrut with margins block start/end.
107 NGBoxStrut CollapseMargins(const NGBoxStrut& child_margins,
108 const NGBoxFragment& fragment);
109
110 // Calculates position of the in-flow block-level fragment that needs to be
111 // positioned relative to the current fragment that is being built.
112 //
113 // @param fragment Fragment that needs to be placed.
114 // @param child_margins Margins information for the current child fragment.
115 // @return Position of the fragment in the parent's constraint space.
116 NGLogicalOffset PositionFragment(const NGFragment& fragment,
117 const NGBoxStrut& child_margins);
118
119 // Calculates position of the float fragment that needs to be
120 // positioned relative to the current fragment that is being built.
121 //
122 // @param fragment Fragment that needs to be placed.
123 // @param child_margins Margins information for the current child fragment.
124 // @return Position of the fragment in the parent's constraint space.
125 NGLogicalOffset PositionFloatFragment(const NGFragment& fragment,
126 const NGBoxStrut& child_margins);
127
128 // Updates block-{start|end} of the currently constructed fragment.
129 //
130 // This method is supposed to be called on every child but it only updates
131 // the block-start once (on the first non-zero height child fragment) and
132 // keeps updating block-end (on every non-zero height child).
133 void UpdateMarginStrut(const NGDeprecatedMarginStrut& from);
134 103
135 NGLogicalOffset GetChildSpaceOffset() const { 104 NGLogicalOffset GetChildSpaceOffset() const {
136 return NGLogicalOffset(border_and_padding_.inline_start, content_size_); 105 return NGLogicalOffset(border_and_padding_.inline_start, content_size_);
137 } 106 }
138 107
139 // Read-only Getters. 108 // Read-only Getters.
140 const ComputedStyle& CurrentChildStyle() const { 109 const ComputedStyle& CurrentChildStyle() const {
141 DCHECK(current_child_); 110 DCHECK(current_child_);
142 return *current_child_->Style(); 111 return *current_child_->Style();
143 } 112 }
(...skipping 23 matching lines...) Expand all
167 136
168 // Mapper from the fragmented flow coordinate space coordinates to visual 137 // Mapper from the fragmented flow coordinate space coordinates to visual
169 // coordinates. Only set on fragmentation context roots, such as multicol 138 // coordinates. Only set on fragmentation context roots, such as multicol
170 // containers. Keeps track of the current fragmentainer. 139 // containers. Keeps track of the current fragmentainer.
171 Member<NGColumnMapper> fragmentainer_mapper_; 140 Member<NGColumnMapper> fragmentainer_mapper_;
172 141
173 NGBoxStrut border_and_padding_; 142 NGBoxStrut border_and_padding_;
174 LayoutUnit content_size_; 143 LayoutUnit content_size_;
175 LayoutUnit max_inline_size_; 144 LayoutUnit max_inline_size_;
176 // MarginStrut for the previous child. 145 // MarginStrut for the previous child.
177 NGDeprecatedMarginStrut prev_child_margin_strut_; 146 NGMarginStrut curr_margin_strut_;
178 // Whether the block-start was set for the currently built 147 NGLogicalOffset bfc_offset_;
179 // fragment's margin strut. 148 NGLogicalOffset curr_bfc_offset_;
180 bool is_fragment_margin_strut_block_start_updated_ : 1;
181 NGBoxStrut curr_child_margins_; 149 NGBoxStrut curr_child_margins_;
182 }; 150 };
183 151
184 } // namespace blink 152 } // namespace blink
185 153
186 #endif // NGBlockLayoutAlgorithm_h 154 #endif // NGBlockLayoutAlgorithm_h
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/TestExpectations ('k') | third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698