diff options
Diffstat (limited to 'src/core/SkBlitter_A8.cpp')
-rw-r--r-- | src/core/SkBlitter_A8.cpp | 9 |
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()); } |