summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/rendering/RenderLayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/RenderLayer.cpp')
-rw-r--r--Source/WebCore/rendering/RenderLayer.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp
index d0cba5316..dae97f749 100644
--- a/Source/WebCore/rendering/RenderLayer.cpp
+++ b/Source/WebCore/rendering/RenderLayer.cpp
@@ -1805,15 +1805,15 @@ void RenderLayer::beginTransparencyLayers(GraphicsContext& context, const LayerP
context.clip(pixelSnappedClipRect);
#if ENABLE(CSS_COMPOSITING)
- // RenderSVGRoot takes care of its blend mode.
- if (!renderer().isSVGRoot() && hasBlendMode())
+ bool usesCompositeOperation = hasBlendMode() && !(renderer().isSVGRoot() && parent() && parent()->isRootLayer());
+ if (usesCompositeOperation)
context.setCompositeOperation(context.compositeOperation(), blendMode());
#endif
context.beginTransparencyLayer(renderer().opacity());
#if ENABLE(CSS_COMPOSITING)
- if (!renderer().isSVGRoot() && hasBlendMode())
+ if (usesCompositeOperation)
context.setCompositeOperation(context.compositeOperation(), BlendModeNormal);
#endif
@@ -6423,6 +6423,19 @@ void RenderLayer::repaintIncludingNonCompositingDescendants(RenderLayerModelObje
}
}
+static bool mayCreateGraphicalGroup(const RenderElement& renderer)
+{
+ bool createsGraphicalGroup = renderer.hasClipPath()
+ || renderer.hasFilter()
+ || renderer.hasBackdropFilter()
+#if ENABLE(CSS_COMPOSITING)
+ || renderer.hasBlendMode()
+#endif
+ || renderer.isTransparent()
+ || renderer.hasMask();
+ return createsGraphicalGroup || (renderer.style().willChange() && renderer.style().willChange()->canCreateGraphicalGroup());
+}
+
bool RenderLayer::shouldBeNormalFlowOnly() const
{
return (renderer().hasOverflowClip()
@@ -6434,20 +6447,14 @@ bool RenderLayer::shouldBeNormalFlowOnly() const
|| renderer().isRenderIFrame()
|| (renderer().style().specifiesColumns() && !isRootLayer())
|| renderer().isInFlowRenderFlowThread())
- && !renderer().isPositioned()
&& !renderer().hasTransformRelatedProperty()
- && !renderer().hasClipPath()
- && !renderer().hasFilter()
- && !renderer().hasBackdropFilter()
+ && !renderer().isPositioned()
+ && !needsCompositedScrolling()
+ && !renderer().style().hasFlowFrom()
#if PLATFORM(IOS)
&& !hasAcceleratedTouchScrolling()
#endif
-#if ENABLE(CSS_COMPOSITING)
- && !renderer().hasBlendMode()
-#endif
- && !isTransparent()
- && !needsCompositedScrolling()
- && !renderer().style().hasFlowFrom();
+ && !mayCreateGraphicalGroup(renderer());
}
bool RenderLayer::shouldBeSelfPaintingLayer() const