Index: Source/core/rendering/RenderLayer.cpp |
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
index ea83bc9e465458e5b59d3e73b430a8b72a3eb3e3..17401aeda2daafa8fe6154e781412250bc707934 100644 |
--- a/Source/core/rendering/RenderLayer.cpp |
+++ b/Source/core/rendering/RenderLayer.cpp |
@@ -118,6 +118,7 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer, LayerType type) |
, m_has3DTransformedDescendant(false) |
, m_containsDirtyOverlayScrollbars(false) |
, m_hasFilterInfo(false) |
+ , m_hasClipPathInfo(false) |
, m_needsAncestorDependentCompositingInputsUpdate(true) |
, m_needsDescendantDependentCompositingInputsUpdate(true) |
, m_childNeedsCompositingInputsUpdate(true) |
@@ -162,6 +163,7 @@ RenderLayer::~RenderLayer() |
} |
removeFilterInfoIfNeeded(); |
+ removeClipPathInfoIfNeeded(); |
if (groupedMapping()) { |
DisableCompositingQueryAsserts disabler; |
@@ -3549,6 +3551,27 @@ void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle* |
updateOrRemoveFilterEffectRenderer(); |
} |
+void RenderLayer::updateClipPath(const RenderStyle* oldStyle, const RenderStyle* newStyle) |
+{ |
+ if (!newStyle->clipPath() && (!oldStyle || !oldStyle->clipPath())) |
+ return; |
+ |
+ updateOrRemoveClipPathClients(); |
+} |
+ |
+void RenderLayer::updateOrRemoveClipPathClients() |
+{ |
+ if (!hasClipPath()) { |
+ removeClipPathInfoIfNeeded(); |
+ return; |
+ } |
+ |
+ if (renderer()->style()->clipPath()->type() == ClipPathOperation::REFERENCE) |
+ ensureClipPathInfo()->updateReferenceClipPathClients(renderer()->style()->clipPath()); |
+ else if (hasClipPathInfo()) |
+ clipPathInfo()->removeReferenceClipPathClients(); |
+} |
+ |
bool RenderLayer::attemptDirectCompositingUpdate(StyleDifference diff, const RenderStyle* oldStyle) |
{ |
CompositingReasons oldPotentialCompositingReasonsFromStyle = m_potentialCompositingReasonsFromStyle; |
@@ -3634,6 +3657,7 @@ void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle |
updateTransform(oldStyle, renderer()->style()); |
updateFilters(oldStyle, renderer()->style()); |
+ updateClipPath(oldStyle, renderer()->style()); |
setNeedsCompositingInputsUpdate(); |
} |