Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 31a847fe366c0a530aead2289ed17e7cf67fc4d6..344d7556c40475831d870f3c1fc41a97aba4d8ae 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -1341,22 +1341,16 @@ RenderLayerModelObject* RenderObject::containerForRepaint() const |
RenderLayerModelObject* repaintContainer = 0; |
if (v->usesCompositing()) { |
- if (RenderLayer* parentLayer = enclosingLayer()) { |
- // FIXME: CompositingState is not necessarily up to date for many callers of this function. |
- DisableCompositingQueryAsserts disabler; |
+ // FIXME: CompositingState is not necessarily up to date for many callers of this function. |
+ DisableCompositingQueryAsserts disabler; |
- RenderLayer* compLayer = parentLayer->enclosingCompositingLayerForRepaint(); |
- if (compLayer) |
- repaintContainer = compLayer->renderer(); |
- } |
+ if (RenderLayer* compositingLayer = enclosingLayer()->enclosingCompositingLayerForRepaint()) |
+ repaintContainer = compositingLayer->renderer(); |
} |
if (document().view()->hasSoftwareFilters()) { |
- if (RenderLayer* parentLayer = enclosingLayer()) { |
- RenderLayer* enclosingFilterLayer = parentLayer->enclosingFilterLayer(); |
- if (enclosingFilterLayer) |
- return enclosingFilterLayer->renderer(); |
- } |
+ if (RenderLayer* enclosingFilterLayer = enclosingLayer()->enclosingFilterLayer()) |
+ return enclosingFilterLayer->renderer(); |
} |
// If we have a flow thread, then we need to do individual repaints within the RenderRegions instead. |
@@ -1990,11 +1984,12 @@ void RenderObject::styleWillChange(StyleDifference diff, const RenderStyle* newS |
// Keep layer hierarchy visibility bits up to date if visibility changes. |
if (m_style->visibility() != newStyle->visibility()) { |
- if (RenderLayer* l = enclosingLayer()) { |
- if (newStyle->visibility() == VISIBLE) |
- l->setHasVisibleContent(); |
- else if (l->hasVisibleContent() && (this == l->renderer() || l->renderer()->style()->visibility() != VISIBLE)) { |
- l->dirtyVisibleContentStatus(); |
+ // We might not have an enclosing layer yet because we might not be in the tree. |
+ if (RenderLayer* layer = enclosingLayer()) { |
+ if (newStyle->visibility() == VISIBLE) { |
+ layer->setHasVisibleContent(); |
+ } else if (layer->hasVisibleContent() && (this == layer->renderer() || layer->renderer()->style()->visibility() != VISIBLE)) { |
+ layer->dirtyVisibleContentStatus(); |
if (diff > StyleDifferenceRepaintLayer) |
repaint(); |
} |
@@ -2376,21 +2371,15 @@ void RenderObject::computeLayerHitTestRects(LayerHitTestRects& layerRects) const |
if (!hasLayer()) { |
RenderObject* container = this->container(); |
- if (container) { |
- currentLayer = container->enclosingLayer(); |
- if (currentLayer && currentLayer->renderer() != container) { |
- layerOffset.move(container->offsetFromAncestorContainer(currentLayer->renderer())); |
- // If the layer itself is scrolled, we have to undo the subtraction of its scroll |
- // offset since we want the offset relative to the scrolling content, not the |
- // element itself. |
- if (currentLayer->renderer()->hasOverflowClip()) |
- layerOffset.move(currentLayer->renderBox()->scrolledContentOffset()); |
- } |
- } else { |
- currentLayer = enclosingLayer(); |
+ currentLayer = container->enclosingLayer(); |
+ if (container && currentLayer->renderer() != container) { |
+ layerOffset.move(container->offsetFromAncestorContainer(currentLayer->renderer())); |
+ // If the layer itself is scrolled, we have to undo the subtraction of its scroll |
+ // offset since we want the offset relative to the scrolling content, not the |
+ // element itself. |
+ if (currentLayer->renderer()->hasOverflowClip()) |
+ layerOffset.move(currentLayer->renderBox()->scrolledContentOffset()); |
} |
- if (!currentLayer) |
- return; |
} |
this->addLayerHitTestRects(layerRects, currentLayer, layerOffset, LayoutRect()); |
@@ -2643,8 +2632,8 @@ void RenderObject::willBeRemovedFromTree() |
// If we remove a visible child from an invisible parent, we don't know the layer visibility any more. |
RenderLayer* layer = 0; |
if (parent()->style()->visibility() != VISIBLE && style()->visibility() == VISIBLE && !hasLayer()) { |
- if ((layer = parent()->enclosingLayer())) |
- layer->dirtyVisibleContentStatus(); |
+ layer = parent()->enclosingLayer(); |
+ layer->dirtyVisibleContentStatus(); |
} |
// Keep our layer hierarchy updated. |