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

Unified 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: Fix windows compile 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
index 15a42259b6a14da477a716952d36812365143d2f..6826c9c54e2c9fe162c833713a1e7e6e5415df99 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
@@ -58,30 +58,38 @@ class PaintLayerCompositor;
class ComputedStyle;
class LayoutBoxModelObject;
-// PaintLayerStackingNode represents anything that is a stacking
-// context or treated as a stacking context.
+// PaintLayerStackingNode represents a stacked element which is either a
+// stacking context (i.e. an element with non-auto z-index) or a positioned
+// element with auto z-index which is treated as a stacking context but
+// doesn't contain other stacked elements.
+// See https://chromium.googlesource.com/chromium/src.git/+/master/third_party/WebKit/Source/core/paint/README.md
+// for more details of stacked elements.
//
-// Stacking contexts are the basis for the CSS painting algorithm. The paint
-// order is determined by walking stacking contexts (or elements treated like a
-// stacking context like positioned objects or floats) in an order defined by
-// ‘z-index’. This walk is interleaved with content that is not a stacking.
-// context. See CSS 2.1 appendix E for the actual algorithm
+// Stacked elements are the basis for the CSS painting algorithm. The paint
+// order is determined by walking stacked elements in an order defined by
+// ‘z-index’. This walk is interleaved with non-stacked contents.
+// See CSS 2.1 appendix E for the actual algorithm
// http://www.w3.org/TR/CSS21/zindex.html
// See also PaintLayerPainter (in particular paintLayerContents) for
// our implementation of the walk.
//
-// Stacking contexts form a subtree over the layout tree. Ideally we would want
+// Stacked elements form a subtree over the layout tree. Ideally we would want
// objects of this class to be a node in this tree but there are potential
// issues with stale pointers so we rely on PaintLayer's tree
// structure.
//
-// This class's purpose is to represent a node in the stacking context tree
+// This class's purpose is to represent a node in the stacked element tree
// (aka paint tree). It currently caches the z-order lists for painting and
// hit-testing.
//
// To implement any z-order list iterations, use
// PaintLayerStackingNodeIterator and
// PaintLayerStackingNodeReverseIterator.
+//
+// Only a real stacking context can have non-empty z-order lists thus contain
+// child nodes in the tree. The z-order lists of a positioned element with auto
+// z-index are always empty (i.e. it's a leaf of the stacked element tree).
+// A real stacking context can also be a leaf if it doesn't contain any stacked elements.
class CORE_EXPORT PaintLayerStackingNode {
USING_FAST_MALLOC(PaintLayerStackingNode);
WTF_MAKE_NONCOPYABLE(PaintLayerStackingNode);
@@ -93,6 +101,11 @@ public:
bool isStackingContext() const { return layoutObject()->style()->isStackingContext(); }
+ // Whether the node is stacked. See documentation for the class about "stacked".
+ // For now every PaintLayer has a PaintLayerStackingNode, even if the layer is not stacked
+ // (e.g. a scrollable layer which is statically positioned and is not a stacking context).
+ bool isStacked() const { return m_isStacked; }
+
// Update our normal and z-index lists.
void updateLayerListsIfNeeded();
@@ -105,10 +118,7 @@ public:
bool hasPositiveZOrderList() const { return posZOrderList() && posZOrderList()->size(); }
bool hasNegativeZOrderList() const { return negZOrderList() && negZOrderList()->size(); }
- bool isTreatedAsOrStackingContext() const { return m_isTreatedAsOrStackingContext; }
- void updateIsTreatedAsStackingContext();
-
- void updateStackingNodesAfterStyleChange(const ComputedStyle* oldStyle);
+ void styleDidChange(const ComputedStyle* oldStyle);
PaintLayerStackingNode* ancestorStackingContextNode() const;
@@ -147,8 +157,6 @@ private:
void setStackingParent(PaintLayerStackingNode* stackingParent) { m_stackingParent = stackingParent; }
#endif
- bool shouldBeTreatedAsOrStackingContext() const { return layoutObject()->style()->isTreatedAsOrStackingContext(); }
-
bool isDirtyStackingContext() const { return m_zOrderListsDirty && isStackingContext(); }
PaintLayerCompositor* compositor() const;
@@ -158,7 +166,7 @@ private:
PaintLayer* m_layer;
// m_posZOrderList holds a sorted list of all the descendant nodes within
- // that have z-indices of 0 or greater (auto will count as 0).
+ // that have z-indices of 0 (or is treated as 0 for positioned objects) or greater.
// m_negZOrderList holds descendants within our stacking context with
// negative z-indices.
OwnPtr<Vector<PaintLayerStackingNode*>> m_posZOrderList;
@@ -167,16 +175,15 @@ private:
// This boolean caches whether the z-order lists above are dirty.
// It is only ever set for stacking contexts, as no other element can
// have z-order lists.
- unsigned m_zOrderListsDirty : 1;
+ bool m_zOrderListsDirty : 1;
- // This attribute caches whether the element was a stacking context or
- // was treated like a stacking context, so that we can do comparison against
- // it during style change (styleDidChange in particular), as we have lost
- // the previous style information.
- unsigned m_isTreatedAsOrStackingContext: 1;
+ // This attribute caches whether the element was stacked. It's needed to check the
+ // current stacked status (instead of the new stacked status determined by the new
+ // style which has not been realized yet) when a layer is removed due to style change.
+ bool m_isStacked : 1;
#if ENABLE(ASSERT)
- unsigned m_layerListMutationAllowed : 1;
+ bool m_layerListMutationAllowed : 1;
PaintLayerStackingNode* m_stackingParent;
#endif
};
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintLayer.cpp ('k') | third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698