diff options
| -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, |