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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h

Issue 1798263002: Rename isTreatedAsOrStackingContext to isStacked (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Markdown, isStacked, paintAllPhasesAtomically Created 4 years, 9 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 /* 1 /*
2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Intel Corporation. All rights reserved. 3 * Copyright (C) 2013 Intel Corporation. All rights reserved.
4 * 4 *
5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
6 * 6 *
7 * Other contributors: 7 * Other contributors:
8 * Robert O'Callahan <roc+@cs.cmu.edu> 8 * Robert O'Callahan <roc+@cs.cmu.edu>
9 * David Baron <dbaron@fas.harvard.edu> 9 * David Baron <dbaron@fas.harvard.edu>
10 * Christian Biesinger <cbiesinger@web.de> 10 * Christian Biesinger <cbiesinger@web.de>
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 class PaintLayerCompositor; 57 class PaintLayerCompositor;
58 class ComputedStyle; 58 class ComputedStyle;
59 class LayoutBoxModelObject; 59 class LayoutBoxModelObject;
60 60
61 // PaintLayerStackingNode represents anything that is a stacking 61 // PaintLayerStackingNode represents anything that is a stacking
62 // context or treated as a stacking context. 62 // context or treated as a stacking context.
63 // 63 //
64 // Stacking contexts are the basis for the CSS painting algorithm. The paint 64 // Stacking contexts are the basis for the CSS painting algorithm. The paint
65 // order is determined by walking stacking contexts (or elements treated like a 65 // order is determined by walking stacking contexts (or elements treated like a
66 // stacking context like positioned objects or floats) in an order defined by 66 // stacking context like positioned objects or floats) in an order defined by
67 // ‘z-index’. This walk is interleaved with content that is not a stacking. 67 // ‘z-index’. This walk is interleaved with content that is not a stacking
68 // context. See CSS 2.1 appendix E for the actual algorithm 68 // context. See CSS 2.1 appendix E for the actual algorithm
69 // http://www.w3.org/TR/CSS21/zindex.html 69 // http://www.w3.org/TR/CSS21/zindex.html
70 // See also PaintLayerPainter (in particular paintLayerContents) for 70 // See also PaintLayerPainter (in particular paintLayerContents) for
71 // our implementation of the walk. 71 // our implementation of the walk.
72 // 72 //
73 // Stacking contexts form a subtree over the layout tree. Ideally we would want 73 // Stacking contexts form a subtree over the layout tree. Ideally we would want
74 // objects of this class to be a node in this tree but there are potential 74 // objects of this class to be a node in this tree but there are potential
75 // issues with stale pointers so we rely on PaintLayer's tree 75 // issues with stale pointers so we rely on PaintLayer's tree
76 // structure. 76 // structure.
77 // 77 //
(...skipping 20 matching lines...) Expand all
98 98
99 bool zOrderListsDirty() const { return m_zOrderListsDirty; } 99 bool zOrderListsDirty() const { return m_zOrderListsDirty; }
100 void dirtyZOrderLists(); 100 void dirtyZOrderLists();
101 void updateZOrderLists(); 101 void updateZOrderLists();
102 void clearZOrderLists(); 102 void clearZOrderLists();
103 void dirtyStackingContextZOrderLists(); 103 void dirtyStackingContextZOrderLists();
104 104
105 bool hasPositiveZOrderList() const { return posZOrderList() && posZOrderList ()->size(); } 105 bool hasPositiveZOrderList() const { return posZOrderList() && posZOrderList ()->size(); }
106 bool hasNegativeZOrderList() const { return negZOrderList() && negZOrderList ()->size(); } 106 bool hasNegativeZOrderList() const { return negZOrderList() && negZOrderList ()->size(); }
107 107
108 bool isTreatedAsOrStackingContext() const { return m_isTreatedAsOrStackingCo ntext; } 108 bool isStacked() const { return m_isStacked; }
109 void updateIsTreatedAsStackingContext(); 109 void updateIsStacked();
110 110
111 void updateStackingNodesAfterStyleChange(const ComputedStyle* oldStyle); 111 void updateStackingNodesAfterStyleChange(const ComputedStyle* oldStyle);
112 112
113 PaintLayerStackingNode* ancestorStackingContextNode() const; 113 PaintLayerStackingNode* ancestorStackingContextNode() const;
114 114
115 PaintLayer* layer() const { return m_layer; } 115 PaintLayer* layer() const { return m_layer; }
116 116
117 #if ENABLE(ASSERT) 117 #if ENABLE(ASSERT)
118 bool layerListMutationAllowed() const { return m_layerListMutationAllowed; } 118 bool layerListMutationAllowed() const { return m_layerListMutationAllowed; }
119 void setLayerListMutationAllowed(bool flag) { m_layerListMutationAllowed = f lag; } 119 void setLayerListMutationAllowed(bool flag) { m_layerListMutationAllowed = f lag; }
120 #endif 120 #endif
121 121
122 // Stacking contexts and positioned elements[1] are stacked (sorted in negZO rderList
123 // and posZOrderList) in their enclosing stacking contexts.
124 //
125 // [1] According to CSS2.1, Appendix E.2.8 (https://www.w3.org/TR/CSS21/zind ex.html),
126 // positioned elements with 'z-index: auto' are "treated as if it created a new
127 // stacking context" and z-ordered together with other elements with 'z-inde x: 0'.
128 // The difference of them from normal stacking contexts is that they don't d etermine
129 // the stacking of the elements underneath them.
130 // (Note: There are also other elements treated as stacking context during p ainting,
131 // but not managed in stacks. See ObjectPainter::paintAllPhasesAtomically(). )
pdr. 2016/03/16 02:22:53 Optional, may want to add a link to the markdown t
Xianzhu 2016/03/16 18:10:24 Done.
132 static bool shouldStackObject(const LayoutObject& object) { return object.st yleRef().isStackingContext() || object.isPositioned(); }
133
122 private: 134 private:
123 friend class PaintLayerStackingNodeIterator; 135 friend class PaintLayerStackingNodeIterator;
124 friend class PaintLayerStackingNodeReverseIterator; 136 friend class PaintLayerStackingNodeReverseIterator;
125 friend class LayoutTreeAsText; 137 friend class LayoutTreeAsText;
126 138
127 Vector<PaintLayerStackingNode*>* posZOrderList() const 139 Vector<PaintLayerStackingNode*>* posZOrderList() const
128 { 140 {
129 ASSERT(!m_zOrderListsDirty); 141 ASSERT(!m_zOrderListsDirty);
130 ASSERT(isStackingContext() || !m_posZOrderList); 142 ASSERT(isStackingContext() || !m_posZOrderList);
131 return m_posZOrderList.get(); 143 return m_posZOrderList.get();
132 } 144 }
133 145
134 Vector<PaintLayerStackingNode*>* negZOrderList() const 146 Vector<PaintLayerStackingNode*>* negZOrderList() const
135 { 147 {
136 ASSERT(!m_zOrderListsDirty); 148 ASSERT(!m_zOrderListsDirty);
137 ASSERT(isStackingContext() || !m_negZOrderList); 149 ASSERT(isStackingContext() || !m_negZOrderList);
138 return m_negZOrderList.get(); 150 return m_negZOrderList.get();
139 } 151 }
140 152
141 void rebuildZOrderLists(); 153 void rebuildZOrderLists();
142 void collectLayers(OwnPtr<Vector<PaintLayerStackingNode*>>& posZOrderList, O wnPtr<Vector<PaintLayerStackingNode*>>& negZOrderList); 154 void collectLayers(OwnPtr<Vector<PaintLayerStackingNode*>>& posZOrderList, O wnPtr<Vector<PaintLayerStackingNode*>>& negZOrderList);
143 155
144 #if ENABLE(ASSERT) 156 #if ENABLE(ASSERT)
145 bool isInStackingParentZOrderLists() const; 157 bool isInStackingParentZOrderLists() const;
146 void updateStackingParentForZOrderLists(PaintLayerStackingNode* stackingPare nt); 158 void updateStackingParentForZOrderLists(PaintLayerStackingNode* stackingPare nt);
147 void setStackingParent(PaintLayerStackingNode* stackingParent) { m_stackingP arent = stackingParent; } 159 void setStackingParent(PaintLayerStackingNode* stackingParent) { m_stackingP arent = stackingParent; }
148 #endif 160 #endif
149 161
150 bool shouldBeTreatedAsOrStackingContext() const { return layoutObject()->sty le()->isTreatedAsOrStackingContext(); }
151
152 bool isDirtyStackingContext() const { return m_zOrderListsDirty && isStackin gContext(); } 162 bool isDirtyStackingContext() const { return m_zOrderListsDirty && isStackin gContext(); }
153 163
154 PaintLayerCompositor* compositor() const; 164 PaintLayerCompositor* compositor() const;
155 // We can't return a LayoutBox as LayoutInline can be a stacking context. 165 // We can't return a LayoutBox as LayoutInline can be a stacking context.
156 LayoutBoxModelObject* layoutObject() const; 166 LayoutBoxModelObject* layoutObject() const;
157 167
158 PaintLayer* m_layer; 168 PaintLayer* m_layer;
159 169
160 // m_posZOrderList holds a sorted list of all the descendant nodes within 170 // m_posZOrderList holds a sorted list of all the descendant nodes within
161 // that have z-indices of 0 or greater (auto will count as 0). 171 // that have z-indices of 0 (or is treated as 0 for positioned objects) or g reater.
162 // m_negZOrderList holds descendants within our stacking context with 172 // m_negZOrderList holds descendants within our stacking context with
163 // negative z-indices. 173 // negative z-indices.
164 OwnPtr<Vector<PaintLayerStackingNode*>> m_posZOrderList; 174 OwnPtr<Vector<PaintLayerStackingNode*>> m_posZOrderList;
165 OwnPtr<Vector<PaintLayerStackingNode*>> m_negZOrderList; 175 OwnPtr<Vector<PaintLayerStackingNode*>> m_negZOrderList;
166 176
167 // This boolean caches whether the z-order lists above are dirty. 177 // This boolean caches whether the z-order lists above are dirty.
168 // It is only ever set for stacking contexts, as no other element can 178 // It is only ever set for stacking contexts, as no other element can
169 // have z-order lists. 179 // have z-order lists.
170 unsigned m_zOrderListsDirty : 1; 180 unsigned m_zOrderListsDirty : 1;
171 181
172 // This attribute caches whether the element was a stacking context or 182 // This attribute caches whether the element was stacked, so that we can do comparison against
173 // was treated like a stacking context, so that we can do comparison against
174 // it during style change (styleDidChange in particular), as we have lost 183 // it during style change (styleDidChange in particular), as we have lost
175 // the previous style information. 184 // the previous style information.
176 unsigned m_isTreatedAsOrStackingContext: 1; 185 unsigned m_isStacked: 1;
177 186
178 #if ENABLE(ASSERT) 187 #if ENABLE(ASSERT)
179 unsigned m_layerListMutationAllowed : 1; 188 unsigned m_layerListMutationAllowed : 1;
180 PaintLayerStackingNode* m_stackingParent; 189 PaintLayerStackingNode* m_stackingParent;
181 #endif 190 #endif
182 }; 191 };
183 192
184 inline void PaintLayerStackingNode::clearZOrderLists() 193 inline void PaintLayerStackingNode::clearZOrderLists()
185 { 194 {
186 ASSERT(!isStackingContext()); 195 ASSERT(!isStackingContext());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 233
225 private: 234 private:
226 PaintLayerStackingNode* m_stackingNode; 235 PaintLayerStackingNode* m_stackingNode;
227 bool m_previousMutationAllowedState; 236 bool m_previousMutationAllowedState;
228 }; 237 };
229 #endif 238 #endif
230 239
231 } // namespace blink 240 } // namespace blink
232 241
233 #endif // PaintLayerStackingNode_h 242 #endif // PaintLayerStackingNode_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698