Index: Source/platform/graphics/GraphicsContext.cpp |
diff --git a/Source/platform/graphics/GraphicsContext.cpp b/Source/platform/graphics/GraphicsContext.cpp |
index 1fdbb54a9eca53d367f662b2f557efa68680b116..c431e280370db130862470e507829647fe6fa26a 100644 |
--- a/Source/platform/graphics/GraphicsContext.cpp |
+++ b/Source/platform/graphics/GraphicsContext.cpp |
@@ -299,22 +299,31 @@ 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; |
- if (!color.alpha() || (!offset.width() && !offset.height() && !blur)) { |
+ OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create(); |
+ if (shadowMode == DrawForegroundOnly || (!color.alpha() || (!offset.width() && !offset.height() && !blur))) { |
+ if (shadowMode == DrawShadowOnly) { |
+ // shadow only, but there is no shadow: use an empty draw looper to silence rendering. |
Stephen White
2014/10/14 21:02:12
Not sure I understand this comment. "silence rende
|
+ setDrawLooper(drawLooperBuilder.release()); |
+ return; |
+ } |
+ // Drawing foreground only, or drawing shadow and forground with no shadow. |
clearShadow(); |
return; |
} |
- OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create(); |
drawLooperBuilder->addShadow(offset, blur, color, shadowTransformMode, shadowAlphaMode); |
- drawLooperBuilder->addUnmodifiedContent(); |
+ if (shadowMode == DrawShadowAndForeground) { |
+ drawLooperBuilder->addUnmodifiedContent(); |
+ } |
setDrawLooper(drawLooperBuilder.release()); |
} |
+ |
jbroman
2014/10/14 21:09:48
nit: spurious newline
|
void GraphicsContext::setDrawLooper(PassOwnPtr<DrawLooperBuilder> drawLooperBuilder) |
{ |
if (contextDisabled()) |