Index: Source/platform/graphics/GraphicsContext.cpp |
diff --git a/Source/platform/graphics/GraphicsContext.cpp b/Source/platform/graphics/GraphicsContext.cpp |
index 1fdbb54a9eca53d367f662b2f557efa68680b116..07f090479d9a18b5a6e5731ad119ba19223a00a2 100644 |
--- a/Source/platform/graphics/GraphicsContext.cpp |
+++ b/Source/platform/graphics/GraphicsContext.cpp |
@@ -299,19 +299,26 @@ void GraphicsContext::setFillGradient(PassRefPtr<Gradient> gradient) |
void GraphicsContext::setShadow(const FloatSize& offset, float blur, const Color& color, |
DrawLooperBuilder::ShadowTransformMode shadowTransformMode, |
- DrawLooperBuilder::ShadowAlphaMode shadowAlphaMode) |
+ DrawLooperBuilder::ShadowAlphaMode shadowAlphaMode, ShadowMode shadowMode) |
{ |
if (contextDisabled()) |
return; |
+ OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create(); |
if (!color.alpha() || (!offset.width() && !offset.height() && !blur)) { |
+ if (shadowMode == DrawShadowOnly) { |
+ // shadow only, but there is no shadow: use an empty draw looper to disable rendering of the source primitive |
+ setDrawLooper(drawLooperBuilder.release()); |
+ return; |
+ } |
clearShadow(); |
return; |
} |
- OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create(); |
drawLooperBuilder->addShadow(offset, blur, color, shadowTransformMode, shadowAlphaMode); |
- drawLooperBuilder->addUnmodifiedContent(); |
+ if (shadowMode == DrawShadowAndForeground) { |
+ drawLooperBuilder->addUnmodifiedContent(); |
+ } |
setDrawLooper(drawLooperBuilder.release()); |
} |