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

Unified Diff: Source/core/rendering/RenderLayerStackingNode.cpp

Issue 307933010: Restore sanity to RenderLayerStackingNode::shouldBeNormalFlowOnly (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 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: Source/core/rendering/RenderLayerStackingNode.cpp
diff --git a/Source/core/rendering/RenderLayerStackingNode.cpp b/Source/core/rendering/RenderLayerStackingNode.cpp
index f335b4bd269a3342f9d6e2c878267c68c83608cc..a6ad456c69f5c955a97a3415e2faf3f584441177 100644
--- a/Source/core/rendering/RenderLayerStackingNode.cpp
+++ b/Source/core/rendering/RenderLayerStackingNode.cpp
@@ -56,8 +56,6 @@ namespace WebCore {
// layer about some of its state.
RenderLayerStackingNode::RenderLayerStackingNode(RenderLayer* layer)
: m_layer(layer)
- , m_descendantsAreContiguousInStackingOrder(false)
- , m_descendantsAreContiguousInStackingOrderDirty(true)
, m_normalFlowListDirty(true)
#if !ASSERT_DISABLED
, m_layerListMutationAllowed(true)
@@ -92,8 +90,7 @@ static inline bool compareZIndex(RenderLayerStackingNode* first, RenderLayerStac
RenderLayerCompositor* RenderLayerStackingNode::compositor() const
{
- if (!renderer()->view())
- return 0;
+ ASSERT(renderer()->view());
return renderer()->view()->compositor();
}
@@ -112,20 +109,13 @@ void RenderLayerStackingNode::dirtyZOrderLists()
m_negZOrderList->clear();
m_zOrderListsDirty = true;
- m_descendantsAreContiguousInStackingOrderDirty = true;
-
if (!renderer()->documentBeingDestroyed())
compositor()->setCompositingLayersNeedRebuild();
}
void RenderLayerStackingNode::dirtyStackingContextZOrderLists()
{
- RenderLayerStackingNode* stackingContextNode = ancestorStackingContextNode();
- if (stackingContextNode)
- stackingContextNode->dirtyZOrderLists();
-
- RenderLayerStackingNode* stackingNode = ancestorStackingNode();
- if (stackingNode && stackingNode != stackingContextNode)
+ if (RenderLayerStackingNode* stackingNode = ancestorStackingContextNode())
stackingNode->dirtyZOrderLists();
}
@@ -141,9 +131,8 @@ void RenderLayerStackingNode::dirtyNormalFlowList()
m_normalFlowList->clear();
m_normalFlowListDirty = true;
- if (!renderer()->documentBeingDestroyed()) {
+ if (!renderer()->documentBeingDestroyed())
compositor()->setCompositingLayersNeedRebuild();
- }
}
void RenderLayerStackingNode::rebuildZOrderLists()
@@ -303,7 +292,7 @@ void RenderLayerStackingNode::updateStackingNodesAfterStyleChange(const RenderSt
EVisibility oldVisibility = oldStyle ? oldStyle->visibility() : VISIBLE;
int oldZIndex = oldStyle ? oldStyle->zIndex() : 0;
- // FIXME: RenderLayer already handles visibility changes through our visiblity dirty bits. This logic could
+ // FIXME: RenderLayer already handles visibility changes through our visibility dirty bits. This logic could
// likely be folded along with the rest.
bool isStackingContext = this->isStackingContext();
if (isStackingContext == wasStackingContext && oldVisibility == renderer()->style()->visibility() && oldZIndex == zIndex())
@@ -319,22 +308,7 @@ void RenderLayerStackingNode::updateStackingNodesAfterStyleChange(const RenderSt
bool RenderLayerStackingNode::shouldBeNormalFlowOnly() const
{
- const bool couldBeNormalFlow = renderer()->hasOverflowClip()
- || renderer()->hasReflection()
- || renderer()->hasMask()
- || renderer()->isCanvas()
- || renderer()->isVideo()
- || renderer()->isEmbeddedObject()
- || renderer()->isRenderIFrame()
- || (renderer()->style()->specifiesColumns() && !layer()->isRootLayer());
- const bool preventsElementFromBeingNormalFlow = renderer()->isPositioned()
- || renderer()->hasTransform()
- || renderer()->hasClipPath()
- || renderer()->hasFilter()
- || renderer()->hasBlendMode()
- || layer()->isTransparent();
-
- return couldBeNormalFlow && !preventsElementFromBeingNormalFlow;
+ return !isStackingContext() && !renderer()->isPositioned();
}
void RenderLayerStackingNode::updateIsNormalFlowOnly()
@@ -351,21 +325,11 @@ void RenderLayerStackingNode::updateIsNormalFlowOnly()
RenderLayerStackingNode* RenderLayerStackingNode::ancestorStackingContextNode() const
{
- RenderLayer* ancestor = layer()->parent();
- while (ancestor && !ancestor->stackingNode()->isStackingContext())
- ancestor = ancestor->parent();
- if (ancestor)
- return ancestor->stackingNode();
- return 0;
-}
-
-RenderLayerStackingNode* RenderLayerStackingNode::ancestorStackingNode() const
-{
- RenderLayer* ancestor = layer()->parent();
- while (ancestor && !ancestor->stackingNode()->isStackingContext())
- ancestor = ancestor->parent();
- if (ancestor)
- return ancestor->stackingNode();
+ for (RenderLayer* ancestor = layer()->parent(); ancestor; ancestor = ancestor->parent()) {
+ RenderLayerStackingNode* stackingNode = ancestor->stackingNode();
+ if (stackingNode->isStackingContext())
+ return stackingNode;
+ }
return 0;
}
« LayoutTests/TestExpectations ('K') | « Source/core/rendering/RenderLayerStackingNode.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698