Index: Source/core/rendering/svg/SVGRenderingContext.cpp |
diff --git a/Source/core/rendering/svg/SVGRenderingContext.cpp b/Source/core/rendering/svg/SVGRenderingContext.cpp |
index e4d7be5cbb3403a3a07902bec0ceb7dfd09266fb..6b9968b006394922f685b63662bd8ed24a003523 100644 |
--- a/Source/core/rendering/svg/SVGRenderingContext.cpp |
+++ b/Source/core/rendering/svg/SVGRenderingContext.cpp |
@@ -102,12 +102,20 @@ void SVGRenderingContext::prepareToRenderSVGContent(RenderObject* object, PaintI |
// Setup transparency layers before setting up SVG resources! |
bool isRenderingMask = isRenderingMaskImage(m_object); |
float opacity = isRenderingMask ? 1 : style->opacity(); |
+ BlendMode blendMode = isRenderingMask ? BlendModeNormal : style->blendMode(); |
const ShadowData* shadow = svgStyle->shadow(); |
- if (opacity < 1 || shadow) { |
+ if (opacity < 1 || shadow || blendMode != BlendModeNormal) { |
FloatRect repaintRect = m_object->repaintRectInLocalCoordinates(); |
- if (opacity < 1) { |
+ if (opacity < 1 || blendMode != BlendModeNormal) { |
m_paintInfo->context->clip(repaintRect); |
+ if (blendMode != BlendModeNormal) { |
+ if (!(m_renderingFlags & RestoreGraphicsContext)) { |
+ m_paintInfo->context->save(); |
+ m_renderingFlags |= RestoreGraphicsContext; |
+ } |
+ m_paintInfo->context->setCompositeOperation(CompositeSourceOver, blendMode); |
+ } |
m_paintInfo->context->beginTransparencyLayer(opacity); |
m_renderingFlags |= EndOpacityLayer; |
} |