diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderLayer.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderLayer.cpp | 33 |
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 |