aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBlitter_A8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkBlitter_A8.cpp')
-rw-r--r--src/core/SkBlitter_A8.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/core/SkBlitter_A8.cpp b/src/core/SkBlitter_A8.cpp
index cb7d718f54..66976143c8 100644
--- a/src/core/SkBlitter_A8.cpp
+++ b/src/core/SkBlitter_A8.cpp
@@ -230,8 +230,10 @@ SkA8_Shader_Blitter::SkA8_Shader_Blitter(const SkPixmap& device, const SkPaint&
SkShader::Context* shaderContext)
: INHERITED(device, paint, shaderContext)
{
- fXfermode = SkXfermode::Peek(paint.getBlendMode());
- SkASSERT(!fXfermode || fShaderContext);
+ if ((fXfermode = paint.getXfermode()) != nullptr) {
+ fXfermode->ref();
+ SkASSERT(fShaderContext);
+ }
int width = device.width();
fBuffer = (SkPMColor*)sk_malloc_throw(sizeof(SkPMColor) * (width + (SkAlign4(width) >> 2)));
@@ -239,6 +241,7 @@ SkA8_Shader_Blitter::SkA8_Shader_Blitter(const SkPixmap& device, const SkPaint&
}
SkA8_Shader_Blitter::~SkA8_Shader_Blitter() {
+ if (fXfermode) SkSafeUnref(fXfermode);
sk_free(fBuffer);
}
@@ -352,7 +355,7 @@ void SkA8_Shader_Blitter::blitMask(const SkMask& mask, const SkIRect& clip) {
SkA8_Coverage_Blitter::SkA8_Coverage_Blitter(const SkPixmap& device,
const SkPaint& paint) : SkRasterBlitter(device) {
SkASSERT(nullptr == paint.getShader());
- SkASSERT(paint.isSrcOver());
+ SkASSERT(nullptr == paint.getXfermode());
SkASSERT(nullptr == paint.getColorFilter());
}