diff options
author | 2017-01-06 15:56:25 +0000 | |
---|---|---|
committer | 2017-01-06 15:56:28 +0000 | |
commit | 496777de7d50ce04342d59c029acf53db3086cda (patch) | |
tree | 9f849a486bfaac5dd1f455cdb99b3650f7deef1e | |
parent | 0a7b66b0bbca9673aaf8294a03b36313bc992ed4 (diff) | |
parent | 770e0b500793bce45442b5f403913d14017df4e8 (diff) |
Merge "Implement image draw functions in SkiaCanvasProxy"
-rw-r--r-- | libs/hwui/SkiaCanvasProxy.cpp | 34 | ||||
-rw-r--r-- | libs/hwui/SkiaCanvasProxy.h | 7 |
2 files changed, 41 insertions, 0 deletions
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp index 75396f7b4cf2..2a7f5756a007 100644 --- a/libs/hwui/SkiaCanvasProxy.cpp +++ b/libs/hwui/SkiaCanvasProxy.cpp @@ -19,6 +19,7 @@ #include "hwui/Bitmap.h" #include <cutils/log.h> +#include <SkLatticeIter.h> #include <SkPatchUtils.h> #include <SkPaint.h> #include <SkPath.h> @@ -140,6 +141,39 @@ void SkiaCanvasProxy::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& ce SkDEBUGFAIL("SkiaCanvasProxy::onDrawBitmapNine is not yet supported"); } +void SkiaCanvasProxy::onDrawImage(const SkImage* image, SkScalar left, SkScalar top, + const SkPaint* paint) { + SkBitmap skiaBitmap; + if (image->asLegacyBitmap(&skiaBitmap, SkImage::kRO_LegacyBitmapMode)) { + onDrawBitmap(skiaBitmap, left, top, paint); + } +} + +void SkiaCanvasProxy::onDrawImageRect(const SkImage* image, const SkRect* srcPtr, const SkRect& dst, + const SkPaint* paint, SrcRectConstraint constraint) { + SkBitmap skiaBitmap; + if (image->asLegacyBitmap(&skiaBitmap, SkImage::kRO_LegacyBitmapMode)) { + sk_sp<Bitmap> bitmap = Bitmap::createFrom(skiaBitmap.info(), *skiaBitmap.pixelRef()); + SkRect src = (srcPtr) ? *srcPtr : SkRect::MakeWH(image->width(), image->height()); + mCanvas->drawBitmap(*bitmap, src.fLeft, src.fTop, src.fRight, src.fBottom, + dst.fLeft, dst.fTop, dst.fRight, dst.fBottom, paint); + } +} + +void SkiaCanvasProxy::onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst, + const SkPaint*) { + SkDEBUGFAIL("SkiaCanvasProxy::onDrawImageNine is not yet supported"); +} + +void SkiaCanvasProxy::onDrawImageLattice(const SkImage* image, const Lattice& lattice, + const SkRect& dst, const SkPaint* paint) { + SkLatticeIter iter(lattice, dst); + SkRect srcR, dstR; + while (iter.next(&srcR, &dstR)) { + onDrawImageRect(image, &srcR, dstR, paint, SkCanvas::kStrict_SrcRectConstraint); + } +} + void SkiaCanvasProxy::onDrawVertices(VertexMode mode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint& paint) { diff --git a/libs/hwui/SkiaCanvasProxy.h b/libs/hwui/SkiaCanvasProxy.h index badcc1dfe8cc..40ddc34c79ba 100644 --- a/libs/hwui/SkiaCanvasProxy.h +++ b/libs/hwui/SkiaCanvasProxy.h @@ -66,6 +66,13 @@ protected: const SkPaint* paint, SrcRectConstraint) override; virtual void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint*) override; + virtual void onDrawImage(const SkImage*, SkScalar dx, SkScalar dy, const SkPaint*); + virtual void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*, + SrcRectConstraint); + virtual void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst, + const SkPaint*); + virtual void onDrawImageLattice(const SkImage*, const Lattice& lattice, const SkRect& dst, + const SkPaint*); virtual void onDrawVertices(VertexMode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkBlendMode, const uint16_t indices[], int indexCount, |