Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index a86cd37cad3b25edd1281a71f7332c331f48a0ea..648059a1965cdbc71c1e6a4eee19931ca6dd9bd1 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -19,9 +19,9 @@ |
#include "SkImage_Base.h" |
#include "SkImageFilter.h" |
#include "SkImageFilterCache.h" |
+#include "SkLatticeIter.h" |
#include "SkMatrixUtils.h" |
#include "SkMetaData.h" |
-#include "SkNinePatchIter.h" |
#include "SkPaintPriv.h" |
#include "SkPatchUtils.h" |
#include "SkPicture.h" |
@@ -1985,7 +1985,7 @@ void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const |
if (dst.isEmpty()) { |
return; |
} |
- if (!SkNinePatchIter::Valid(image->width(), image->height(), center)) { |
+ if (!SkLatticeIter::Valid(image->width(), image->height(), center)) { |
this->drawImageRect(image, dst, paint); |
} |
this->onDrawImageNine(image, center, dst, paint); |
@@ -2022,12 +2022,30 @@ void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, con |
if (bitmap.drawsNothing() || dst.isEmpty()) { |
return; |
} |
- if (!SkNinePatchIter::Valid(bitmap.width(), bitmap.height(), center)) { |
+ if (!SkLatticeIter::Valid(bitmap.width(), bitmap.height(), center)) { |
this->drawBitmapRect(bitmap, dst, paint); |
} |
this->onDrawBitmapNine(bitmap, center, dst, paint); |
} |
+void SkCanvas::drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice, const SkRect& dst, |
+ const SkPaint* paint) { |
+ sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); |
+ this->drawImageLattice(image.get(), lattice, dst, paint); |
+} |
+ |
+void SkCanvas::drawImageLattice(const SkImage* image, const Lattice& lattice, const SkRect& dst, |
+ const SkPaint* paint) { |
+ RETURN_ON_NULL(image); |
+ if (dst.isEmpty()) { |
+ return; |
+ } |
+ if (!SkLatticeIter::Valid(image->width(), image->height(), lattice)) { |
+ this->drawImageRect(image, dst, paint); |
+ } |
+ this->onDrawImageLattice(image, lattice, 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) { |
@@ -2332,6 +2350,29 @@ void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const S |
LOOPER_END |
} |
+void SkCanvas::onDrawImageLattice(const SkImage* image, const Lattice& lattice, const SkRect& dst, |
+ const SkPaint* paint) { |
+ 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->drawImageLattice(iter, image, lattice, dst, looper.paint()); |
+ } |
+ |
+ LOOPER_END |
+} |
+ |
void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst, |
const SkPaint* paint, SrcRectConstraint constraint) { |
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); |