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