| 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();
|
| }
|
|
|