| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index 3067772c8ad87db06b7ac588f14c61afd141239a..59cf2177a83e954f52ed523e3c136d9842e97e41 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -2036,6 +2036,17 @@ void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, con
|
| this->onDrawBitmapNine(bitmap, center, dst, paint);
|
| }
|
|
|
| +void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const NinePatchDivs& divs, const SkRect& dst,
|
| + const SkPaint* paint) {
|
| + if (bitmap.drawsNothing() || dst.isEmpty()) {
|
| + return;
|
| + }
|
| + if (!SkNinePatchIter::Valid(bitmap.width(), bitmap.height(), divs)) {
|
| + this->drawBitmapRect(bitmap, dst, paint);
|
| + }
|
| + this->onDrawBitmapNine(bitmap, divs, dst, paint);
|
| +}
|
| +
|
| void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[],
|
| const SkColor colors[], int count, SkXfermode::Mode mode,
|
| const SkRect* cull, const SkPaint* paint) {
|
| @@ -2516,6 +2527,31 @@ void SkCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, c
|
| LOOPER_END
|
| }
|
|
|
| +void SkCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const NinePatchDivs& divs,
|
| + const SkRect& dst, const SkPaint* paint) {
|
| + SkDEBUGCODE(bitmap.validate();)
|
| +
|
| + if (nullptr == paint || paint->canComputeFastBounds()) {
|
| + SkRect storage;
|
| + if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) : dst)) {
|
| + return;
|
| + }
|
| + }
|
| +
|
| + SkLazyPaint lazy;
|
| + if (nullptr == paint) {
|
| + paint = lazy.init();
|
| + }
|
| +
|
| + LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, &dst)
|
| +
|
| + while (iter.next()) {
|
| + iter.fDevice->drawBitmapNine(iter, bitmap, divs, dst, looper.paint());
|
| + }
|
| +
|
| + LOOPER_END
|
| +}
|
| +
|
| class SkDeviceFilteredPaint {
|
| public:
|
| SkDeviceFilteredPaint(SkBaseDevice* device, const SkPaint& paint) {
|
|
|