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

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

Issue 2945213004: [LayoutNG] Float behavior simplification before larger patch. (Closed)
Patch Set: update test expectations. Created 3 years, 5 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 NGUnpositionedFloat_h 5 #ifndef NGUnpositionedFloat_h
6 #define NGUnpositionedFloat_h 6 #define NGUnpositionedFloat_h
7 7
8 #include "core/layout/ng/geometry/ng_box_strut.h" 8 #include "core/layout/ng/geometry/ng_box_strut.h"
9 #include "core/layout/ng/geometry/ng_logical_size.h" 9 #include "core/layout/ng/geometry/ng_logical_size.h"
10 #include "core/layout/ng/ng_block_break_token.h" 10 #include "core/layout/ng/ng_block_break_token.h"
11 #include "core/layout/ng/ng_block_node.h" 11 #include "core/layout/ng/ng_block_node.h"
12 #include "core/layout/ng/ng_exclusion.h" 12 #include "core/layout/ng/ng_exclusion.h"
13 #include "core/style/ComputedStyleConstants.h" 13 #include "core/style/ComputedStyleConstants.h"
14 #include "platform/wtf/Optional.h" 14 #include "platform/wtf/Optional.h"
15 #include "platform/wtf/RefPtr.h" 15 #include "platform/wtf/RefPtr.h"
16 16
17 namespace blink { 17 namespace blink {
18 18
19 class NGPhysicalBoxFragment; 19 class NGPhysicalBoxFragment;
20 20
21 // Struct that keeps all information needed to position floats in LayoutNG. 21 // Struct that keeps all information needed to position floats in LayoutNG.
22 struct CORE_EXPORT NGUnpositionedFloat 22 struct CORE_EXPORT NGUnpositionedFloat
23 : public RefCounted<NGUnpositionedFloat> { 23 : public RefCounted<NGUnpositionedFloat> {
24 public: 24 public:
25 static RefPtr<NGUnpositionedFloat> Create(NGLogicalSize available_size, 25 static RefPtr<NGUnpositionedFloat> Create(NGLogicalSize available_size,
26 NGLogicalSize percentage_size, 26 NGLogicalSize percentage_size,
27 NGLogicalOffset origin_offset, 27 LayoutUnit origin_bfc_inline_offset,
28 NGLogicalOffset from_offset, 28 LayoutUnit bfc_inline_offset,
29 NGBoxStrut margins, 29 NGBoxStrut margins,
30 NGBlockNode node, 30 NGBlockNode node,
31 NGBlockBreakToken* token) { 31 NGBlockBreakToken* token) {
32 return AdoptRef(new NGUnpositionedFloat(margins, available_size, 32 return AdoptRef(new NGUnpositionedFloat(
33 percentage_size, origin_offset, 33 margins, available_size, percentage_size, origin_bfc_inline_offset,
34 from_offset, node, token)); 34 bfc_inline_offset, node, token));
35 } 35 }
36 36
37 NGBlockNode node; 37 NGBlockNode node;
38 RefPtr<NGBlockBreakToken> token; 38 RefPtr<NGBlockBreakToken> token;
39 39
40 // Available size of the constraint space that will be used by 40 // Available size of the constraint space that will be used by
41 // NGLayoutOpportunityIterator to position this floating object. 41 // NGLayoutOpportunityIterator to position this floating object.
42 NGLogicalSize available_size; 42 NGLogicalSize available_size;
43 NGLogicalSize percentage_size; 43 NGLogicalSize percentage_size;
44 44
45 // To correctly position a float we need 2 offsets: 45 // This is the BFC inline-offset for where we begin searching for layout
46 // - origin_offset which represents the layout point for this float. 46 // opportunities for this float.
47 // - from_offset which represents the point from where we need to calculate 47 LayoutUnit origin_bfc_inline_offset;
48 // the relative logical offset for this float.
49 // Layout details:
50 // At the time when this float is created only *inline* offsets are known.
51 // Block offset will be set when we are about to place this float, i.e. when
52 // we resolved MarginStrut, adjusted the offset to clearance line etc.
53 NGLogicalOffset origin_offset;
54 NGLogicalOffset from_offset;
55 48
56 // To correctly **paint** a float we need to know the BFC offset of the 49 // This is the BFC inline-offset for the float's parent. This is used for
57 // container to which we are attaching this float. It's used to calculate 50 // calculating the offset between the float and its parent.
58 // {@code paint_offset}. 51 LayoutUnit bfc_inline_offset;
59 // In most situations {@code paint_offset} equals to float's logical
60 // offset except the cases where a float needs to be re-attached to a non-zero
61 // height parent.
62 //
63 // Example:
64 // <body>
65 // <p style="height: 60px">Example</p>
66 // <div id="zero-height-div"><float></div>
67 //
68 // Here the float's logical offset is 0 relative to its #zero-height-div
69 // parent. Because of the "zero height" div this float is re-attached to the
70 // 1st non-empty parent => body. To paint this float correctly we provide the
71 // modified {@code paint_offset} which is relative to the float's new
72 // parent.
73 // I.e. for our example {@code paint_offset.top} ==
74 // #zero-height-div's BFC offset
75 // - body's BFC offset + float's logical offset
76 //
77 // For code safety reasons {@code parent_bfc_block_offset} is Optional here
78 // because the block's offset can be only determined before the actual float's
79 // placement event.
80 WTF::Optional<LayoutUnit> parent_bfc_block_offset;
81 52
82 // The margins are relative to the writing mode of the block formatting 53 // The margins are relative to the writing mode of the block formatting
83 // context. They are stored for convinence and could be recomputed with other 54 // context. They are stored for convinence and could be recomputed with other
84 // data on this object. 55 // data on this object.
85 NGBoxStrut margins; 56 NGBoxStrut margins;
86 57
87 // The fragment for this unpositioned float. This is only present if it's in 58 // The fragment for this unpositioned float. This is only present if it's in
88 // a different writing mode than the BFC. 59 // a different writing mode than the BFC.
89 WTF::Optional<RefPtr<NGPhysicalBoxFragment>> fragment; 60 WTF::Optional<RefPtr<NGPhysicalBoxFragment>> fragment;
90 61
91 bool IsLeft() const; 62 bool IsLeft() const;
92 bool IsRight() const; 63 bool IsRight() const;
93 EClear ClearType() const; 64 EClear ClearType() const;
94 65
95 private: 66 private:
96 NGUnpositionedFloat(const NGBoxStrut& margins, 67 NGUnpositionedFloat(const NGBoxStrut& margins,
97 const NGLogicalSize& available_size, 68 const NGLogicalSize& available_size,
98 const NGLogicalSize& percentage_size, 69 const NGLogicalSize& percentage_size,
99 const NGLogicalOffset& origin_offset, 70 LayoutUnit origin_bfc_inline_offset,
100 const NGLogicalOffset& from_offset, 71 LayoutUnit bfc_inline_offset,
101 NGBlockNode node, 72 NGBlockNode node,
102 NGBlockBreakToken* token) 73 NGBlockBreakToken* token)
103 : node(node), 74 : node(node),
104 token(token), 75 token(token),
105 available_size(available_size), 76 available_size(available_size),
106 percentage_size(percentage_size), 77 percentage_size(percentage_size),
107 origin_offset(origin_offset), 78 origin_bfc_inline_offset(origin_bfc_inline_offset),
108 from_offset(from_offset), 79 bfc_inline_offset(bfc_inline_offset),
109 margins(margins) {} 80 margins(margins) {}
110 }; 81 };
111 82
112 } // namespace blink 83 } // namespace blink
113 84
114 #endif // NGUnpositionedFloat_h 85 #endif // NGUnpositionedFloat_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698