diff options
author | 2017-01-19 13:48:39 -0500 | |
---|---|---|
committer | 2017-01-19 19:26:21 +0000 | |
commit | 1baaacac74d24604e3dfca9857fbd647df375997 (patch) | |
tree | dbc22ee1c88765a5f0661621ec76cb262aff3de4 /src/core | |
parent | 43ae4b4e6bcb3575dae6ab385d6d8cf8e92e57ec (diff) |
explictly fail to draw unpremul, as this is buggy, incomplete, tricky, and unused
BUG=skia:
Change-Id: Ie9da6015cc4955c0f27f6db53fc6ae532e0132f4
Reviewed-on: https://skia-review.googlesource.com/7304
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkCanvas.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 0375ab738d..367a348f51 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -53,6 +53,12 @@ #define RETURN_ON_NULL(ptr) do { if (nullptr == (ptr)) return; } while (0) +#define RETURN_ON_UNPREMUL_IMAGE(image) \ + do { if (as_IB(image)->onAlphaType() == kUnpremul_SkAlphaType) return; } while (0) + +#define RETURN_ON_UNPREMUL_BITMAP(bitmap) \ + do { if (bitmap.alphaType() == kUnpremul_SkAlphaType) return; } while (0) + /* * Return true if the drawing this rect would hit every pixels in the canvas. * @@ -1909,12 +1915,14 @@ void SkCanvas::drawPath(const SkPath& path, const SkPaint& paint) { void SkCanvas::drawImage(const SkImage* image, SkScalar x, SkScalar y, const SkPaint* paint) { RETURN_ON_NULL(image); + RETURN_ON_UNPREMUL_IMAGE(image); this->onDrawImage(image, x, y, paint); } void SkCanvas::drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) { RETURN_ON_NULL(image); + RETURN_ON_UNPREMUL_IMAGE(image); if (dst.isEmpty() || src.isEmpty()) { return; } @@ -1924,12 +1932,14 @@ void SkCanvas::drawImageRect(const SkImage* image, const SkRect& src, const SkRe void SkCanvas::drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) { RETURN_ON_NULL(image); + RETURN_ON_UNPREMUL_IMAGE(image); this->drawImageRect(image, SkRect::Make(isrc), dst, paint, constraint); } void SkCanvas::drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) { RETURN_ON_NULL(image); + RETURN_ON_UNPREMUL_IMAGE(image); this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()), dst, paint, constraint); } @@ -1937,6 +1947,7 @@ void SkCanvas::drawImageRect(const SkImage* image, const SkRect& dst, const SkPa void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst, const SkPaint* paint) { RETURN_ON_NULL(image); + RETURN_ON_UNPREMUL_IMAGE(image); if (dst.isEmpty()) { return; } @@ -1950,6 +1961,7 @@ void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const void SkCanvas::drawImageLattice(const SkImage* image, const Lattice& lattice, const SkRect& dst, const SkPaint* paint) { RETURN_ON_NULL(image); + RETURN_ON_UNPREMUL_IMAGE(image); if (dst.isEmpty()) { return; } @@ -1972,6 +1984,7 @@ void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar dx, SkScalar dy, cons if (bitmap.drawsNothing()) { return; } + RETURN_ON_UNPREMUL_BITMAP(bitmap); this->onDrawBitmap(bitmap, dx, dy, paint); } @@ -1980,6 +1993,7 @@ void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect& src, const S if (bitmap.drawsNothing() || dst.isEmpty() || src.isEmpty()) { return; } + RETURN_ON_UNPREMUL_BITMAP(bitmap); this->onDrawBitmapRect(bitmap, &src, dst, paint, constraint); } @@ -1999,6 +2013,7 @@ void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, con if (bitmap.drawsNothing() || dst.isEmpty()) { return; } + RETURN_ON_UNPREMUL_BITMAP(bitmap); if (SkLatticeIter::Valid(bitmap.width(), bitmap.height(), center)) { this->onDrawBitmapNine(bitmap, center, dst, paint); } else { @@ -2011,6 +2026,7 @@ void SkCanvas::drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice, if (bitmap.drawsNothing() || dst.isEmpty()) { return; } + RETURN_ON_UNPREMUL_BITMAP(bitmap); SkIRect bounds; Lattice latticePlusBounds = lattice; @@ -2030,10 +2046,10 @@ void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const Sk const SkColor colors[], int count, SkBlendMode mode, const SkRect* cull, const SkPaint* paint) { RETURN_ON_NULL(atlas); + RETURN_ON_UNPREMUL_IMAGE(atlas); if (count <= 0) { return; } - SkASSERT(atlas); SkASSERT(tex); this->onDrawAtlas(atlas, xform, tex, colors, count, mode, cull, paint); } |