aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bench/BitmapRectBench.cpp2
-rw-r--r--gm/bigtileimagefilter.cpp2
-rw-r--r--gm/bitmaprect.cpp10
-rw-r--r--gm/bitmaprecttest.cpp2
-rw-r--r--gm/bleed.cpp14
-rw-r--r--gm/drawbitmaprect.cpp5
-rw-r--r--gm/image.cpp10
-rw-r--r--gm/mipmap.cpp2
-rw-r--r--gm/verylargebitmap.cpp2
-rw-r--r--gyp/skia_for_android_framework_defines.gypi1
-rw-r--r--include/core/SkCanvas.h54
-rw-r--r--samplecode/SampleAtlas.cpp2
-rw-r--r--samplecode/SampleBitmapRect.cpp4
-rw-r--r--samplecode/SampleTextureDomain.cpp8
-rw-r--r--src/c/sk_surface.cpp15
-rw-r--r--src/core/SkCanvas.cpp74
-rw-r--r--src/core/SkPicturePlayback.cpp4
-rw-r--r--src/core/SkRecordDraw.cpp8
-rw-r--r--src/effects/SkBitmapSource.cpp2
-rwxr-xr-xsrc/effects/SkTestImageFilters.cpp4
-rw-r--r--src/gpu/GrRecordReplaceDraw.cpp2
-rw-r--r--src/pipe/SkGPipeRead.cpp4
-rw-r--r--src/utils/SkDeferredCanvas.cpp4
-rw-r--r--src/utils/SkLua.cpp2
-rw-r--r--src/utils/SkNWayCanvas.cpp4
-rw-r--r--src/utils/android/SkAndroidSDKCanvas.cpp4
-rw-r--r--src/utils/debugger/SkDrawCommand.cpp6
-rw-r--r--tests/PictureTest.cpp4
-rw-r--r--tests/RecordDrawTest.cpp2
-rw-r--r--tests/RecorderTest.cpp2
-rw-r--r--tests/SurfaceTest.cpp2
31 files changed, 173 insertions, 88 deletions
diff --git a/bench/BitmapRectBench.cpp b/bench/BitmapRectBench.cpp
index 061bfe818b..d95d753a3d 100644
--- a/bench/BitmapRectBench.cpp
+++ b/bench/BitmapRectBench.cpp
@@ -96,7 +96,7 @@ protected:
paint.setAlpha(fAlpha);
for (int i = 0; i < loops; i++) {
- canvas->drawBitmapRect(fBitmap, &fSrcR, fDstR, &paint,
+ canvas->drawBitmapRect(fBitmap, fSrcR, fDstR, &paint,
SkCanvas::kStrict_SrcRectConstraint);
}
}
diff --git a/gm/bigtileimagefilter.cpp b/gm/bigtileimagefilter.cpp
index e4855ba9aa..b788209c19 100644
--- a/gm/bigtileimagefilter.cpp
+++ b/gm/bigtileimagefilter.cpp
@@ -84,7 +84,7 @@ protected:
SkRect bound3 = SkRect::MakeXYWH(320, 320,
SkIntToScalar(kBitmapSize),
SkIntToScalar(kBitmapSize));
- canvas->drawBitmapRect(fGreenBitmap, &bound2, bound3, NULL,
+ canvas->drawBitmapRect(fGreenBitmap, bound2, bound3, nullptr,
SkCanvas::kStrict_SrcRectConstraint);
canvas->restore();
}
diff --git a/gm/bitmaprect.cpp b/gm/bitmaprect.cpp
index bde6a6f10a..cfceab5af9 100644
--- a/gm/bitmaprect.cpp
+++ b/gm/bitmaprect.cpp
@@ -70,7 +70,7 @@ protected:
canvas->drawBitmap(bitmap, 0, 0, &paint);
if (!fUseIRect) {
- canvas->drawBitmapRect(bitmap, &srcR, dstR, &paint,
+ canvas->drawBitmapRect(bitmap, srcR, dstR, &paint,
SkCanvas::kStrict_SrcRectConstraint);
} else {
canvas->drawBitmapRect(bitmap, src[i], dstR, &paint);
@@ -143,7 +143,7 @@ protected:
SkRect srcR = { 0.5f, 0.5f, 2.5f, 2.5f };
SkRect dstR = { 100, 100, 300, 200 };
- canvas->drawBitmapRect(bitmap, &srcR, dstR, NULL, SkCanvas::kStrict_SrcRectConstraint);
+ canvas->drawBitmapRect(bitmap, srcR, dstR, nullptr, SkCanvas::kStrict_SrcRectConstraint);
}
private:
@@ -213,9 +213,9 @@ protected:
SkRect dstR2 = { 10, 410, 30, 430 };
if (!fUseIRect) {
- canvas->drawBitmapRect(fBigBitmap, &srcR1, dstR1, &paint,
+ canvas->drawBitmapRect(fBigBitmap, srcR1, dstR1, &paint,
SkCanvas::kStrict_SrcRectConstraint);
- canvas->drawBitmapRect(fBigBitmap, &srcR2, dstR2, &paint,
+ canvas->drawBitmapRect(fBigBitmap, srcR2, dstR2, &paint,
SkCanvas::kStrict_SrcRectConstraint);
} else {
canvas->drawBitmapRect(fBigBitmap, srcR1.roundOut(), dstR1, &paint);
@@ -263,7 +263,7 @@ protected:
// the drawRect shows the same problem as clipRect(r) followed by drawcolor(red)
canvas->drawRect(r, paint);
- canvas->drawBitmapRect(fBM, NULL, r, NULL);
+ canvas->drawBitmapRect(fBM, r, nullptr);
}
private:
diff --git a/gm/bitmaprecttest.cpp b/gm/bitmaprecttest.cpp
index 630c90c600..878029a8dd 100644
--- a/gm/bitmaprecttest.cpp
+++ b/gm/bitmaprecttest.cpp
@@ -43,7 +43,7 @@ static void test_bitmaprect(SkCanvas* canvas) {
SkScalar scale = 0.472560018f;
canvas->save();
canvas->scale(scale, scale);
- canvas->drawBitmapRect(bm, SkRect::MakeXYWH(100, 100, 128, 128));
+ canvas->drawBitmapRect(bm, SkRect::MakeXYWH(100, 100, 128, 128), nullptr);
canvas->restore();
canvas->scale(-1, 1);
diff --git a/gm/bleed.cpp b/gm/bleed.cpp
index 5bef31dfc1..12682c1023 100644
--- a/gm/bleed.cpp
+++ b/gm/bleed.cpp
@@ -17,13 +17,13 @@
#endif
static void draw_bitmap_rect(SkCanvas* canvas, const SkBitmap& bitmap, const SkImage*,
- const SkRect* src, const SkRect& dst,
+ const SkRect& src, const SkRect& dst,
const SkPaint* paint, SkCanvas::SrcRectConstraint constraint) {
canvas->drawBitmapRect(bitmap, src, dst, paint, constraint);
}
static void draw_image_rect(SkCanvas* canvas, const SkBitmap&, const SkImage* image,
- const SkRect* src, const SkRect& dst,
+ const SkRect& src, const SkRect& dst,
const SkPaint* paint, SkCanvas::SrcRectConstraint constraint) {
canvas->drawImageRect(image, src, dst, paint, constraint);
}
@@ -35,7 +35,7 @@ enum BleedTest {
const struct {
const char* fName;
- void (*fDraw)(SkCanvas*, const SkBitmap&, const SkImage*, const SkRect*, const SkRect&,
+ void (*fDraw)(SkCanvas*, const SkBitmap&, const SkImage*, const SkRect&, const SkRect&,
const SkPaint*, SkCanvas::SrcRectConstraint);
} gBleedRec[] = {
{ "bleed", draw_bitmap_rect },
@@ -144,7 +144,7 @@ protected:
SkPaint paint;
paint.setFilterQuality(filter);
- gBleedRec[fBT].fDraw(canvas, fBitmapSmall, fImageSmall, &src, dst, &paint, constraint);
+ gBleedRec[fBT].fDraw(canvas, fBitmapSmall, fImageSmall, src, dst, &paint, constraint);
}
// Draw almost all of the large bitmap
@@ -159,7 +159,7 @@ protected:
SkPaint paint;
paint.setFilterQuality(filter);
- gBleedRec[fBT].fDraw(canvas, fBitmapBig, fImageBig, &src, dst, &paint, constraint);
+ gBleedRec[fBT].fDraw(canvas, fBitmapBig, fImageBig, src, dst, &paint, constraint);
}
// Draw ~1/4 of the large bitmap
@@ -174,7 +174,7 @@ protected:
SkPaint paint;
paint.setFilterQuality(filter);
- gBleedRec[fBT].fDraw(canvas, fBitmapBig, fImageBig, &src, dst, &paint, constraint);
+ gBleedRec[fBT].fDraw(canvas, fBitmapBig, fImageBig, src, dst, &paint, constraint);
}
// Draw the center of the small bitmap with a mask filter
@@ -192,7 +192,7 @@ protected:
SkBlurMask::ConvertRadiusToSigma(3));
paint.setMaskFilter(mf)->unref();
- gBleedRec[fBT].fDraw(canvas, fBitmapSmall, fImageSmall, &src, dst, &paint, constraint);
+ gBleedRec[fBT].fDraw(canvas, fBitmapSmall, fImageSmall, src, dst, &paint, constraint);
}
void onDraw(SkCanvas* canvas) override {
diff --git a/gm/drawbitmaprect.cpp b/gm/drawbitmaprect.cpp
index 9db5ca71da..2a41465a35 100644
--- a/gm/drawbitmaprect.cpp
+++ b/gm/drawbitmaprect.cpp
@@ -152,10 +152,7 @@ protected:
static const int kPadY = 40;
SkPaint paint;
paint.setAlpha(0x20);
- canvas->drawBitmapRect(fLargeBitmap, NULL,
- SkRect::MakeWH(gSize * SK_Scalar1,
- gSize * SK_Scalar1),
- &paint);
+ canvas->drawBitmapRect(fLargeBitmap, SkRect::MakeIWH(gSize, gSize), &paint);
canvas->translate(SK_Scalar1 * kPadX / 2,
SK_Scalar1 * kPadY / 2);
SkPaint blackPaint;
diff --git a/gm/image.cpp b/gm/image.cpp
index 5e840fbb2f..205b4ab278 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -92,10 +92,10 @@ static void test_surface(SkCanvas* canvas, SkSurface* surf, bool usePaint) {
dst3.set(0, 400, 65, 465);
dst4.set(0, 480, 65, 545);
- canvas->drawImageRect(imgR, &src1, dst1, usePaint ? &paint : NULL);
- canvas->drawImageRect(imgG, &src2, dst2, usePaint ? &paint : NULL);
- canvas->drawImageRect(imgR, &src3, dst3, usePaint ? &paint : NULL);
- canvas->drawImageRect(imgG, NULL, dst4, usePaint ? &paint : NULL);
+ canvas->drawImageRect(imgR, src1, dst1, usePaint ? &paint : NULL);
+ canvas->drawImageRect(imgG, src2, dst2, usePaint ? &paint : NULL);
+ canvas->drawImageRect(imgR, src3, dst3, usePaint ? &paint : NULL);
+ canvas->drawImageRect(imgG, dst4, usePaint ? &paint : NULL);
imgG->unref();
imgR->unref();
@@ -241,7 +241,7 @@ protected:
if (subset) {
srcR.set(*subset);
}
- canvas->drawImageRect(image, subset ? &srcR : NULL, dstR, &paint);
+ canvas->legacy_drawImageRect(image, subset ? &srcR : NULL, dstR, &paint);
canvas->translate(newW + 20.0f, 0);
// image method
diff --git a/gm/mipmap.cpp b/gm/mipmap.cpp
index 6163a3ac51..596cc19d6e 100644
--- a/gm/mipmap.cpp
+++ b/gm/mipmap.cpp
@@ -42,7 +42,7 @@ static void test_mip(SkCanvas* canvas) {
canvas->translate(20, 20);
for (int i = 0; i < 4; ++i) {
paint.setFilterQuality(SkFilterQuality(i));
- canvas->drawImageRect(img, NULL, dst, &paint);
+ canvas->drawImageRect(img, dst, &paint);
canvas->translate(0, 20);
}
canvas->drawImage(img, 20, 20, NULL);
diff --git a/gm/verylargebitmap.cpp b/gm/verylargebitmap.cpp
index 0dca1d7be6..5e2dbd4f41 100644
--- a/gm/verylargebitmap.cpp
+++ b/gm/verylargebitmap.cpp
@@ -50,7 +50,7 @@ static void show_bm(SkCanvas* canvas, int width, int height, SkColor colors[2])
r.offset(SkIntToScalar(150), 0);
// exercises bitmapshader
- canvas->drawBitmapRect(bm, NULL, r, NULL);
+ canvas->drawBitmapRect(bm, r, nullptr);
canvas->drawRect(r, paint);
}
diff --git a/gyp/skia_for_android_framework_defines.gypi b/gyp/skia_for_android_framework_defines.gypi
index 166bd785a3..9debea1ca4 100644
--- a/gyp/skia_for_android_framework_defines.gypi
+++ b/gyp/skia_for_android_framework_defines.gypi
@@ -17,6 +17,7 @@
# Needed until we fix skbug.com/2440.
'SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG',
'SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS',
+ 'SK_SUPPORT_LEGACY_SRCPTR_DRAWIMAGERECT',
],
},
}
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index bc39ec2850..ed52ee85d3 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -37,6 +37,9 @@ class SkSurface;
class SkSurface_Base;
class SkTextBlob;
+//#define SK_SUPPORT_LEGACY_SIMPLE_DRAWIMAGERECT
+//#define SK_SUPPORT_LEGACY_SRCPTR_DRAWIMAGERECT
+
/** \class SkCanvas
A Canvas encapsulates all of the state about drawing into a device (bitmap).
@@ -819,20 +822,28 @@ public:
* @param paint The paint used to draw the image, or NULL
* @param constraint Control the tradeoff between speed and exactness w.r.t. the src-rect.
*/
+ void drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst,
+ const SkPaint* paint,
+ SrcRectConstraint constraint = kStrict_SrcRectConstraint);
+ // variant that takes src SkIRect
+ void drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint = kStrict_SrcRectConstraint);
+ // variant that assumes src == image-bounds
+#ifdef SK_SUPPORT_LEGACY_SIMPLE_DRAWIMAGERECT
+ void drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint = NULL);
+#else
+ void drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint,
+ SrcRectConstraint = kStrict_SrcRectConstraint);
+#endif
+
+#ifdef SK_SUPPORT_LEGACY_SRCPTR_DRAWIMAGERECT
void drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint = kStrict_SrcRectConstraint);
void drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst) {
this->drawImageRect(image, src, dst, NULL, kStrict_SrcRectConstraint);
}
-
- void drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint = NULL) {
- // With no src-rect, the constraint value is ignored, so we just use the default.
- this->drawImageRect(image, NULL, dst, paint, kStrict_SrcRectConstraint);
- }
-
- void drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst,
- const SkPaint* paint, SrcRectConstraint = kStrict_SrcRectConstraint);
+#endif
/**
* Draw the image stretched differentially to fit into dst.
@@ -881,15 +892,22 @@ public:
* @param paint The paint used to draw the bitmap, or NULL
* @param constraint Control the tradeoff between speed and exactness w.r.t. the src-rect.
*/
- void drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
+ void drawBitmapRect(const SkBitmap& bitmap, const SkRect& src, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint = kStrict_SrcRectConstraint);
-
- void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint = NULL) {
- this->drawBitmapRect(bitmap, NULL, dst, paint, kStrict_SrcRectConstraint);
- }
-
+ // variant where src is SkIRect
void drawBitmapRect(const SkBitmap& bitmap, const SkIRect& isrc, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint = kStrict_SrcRectConstraint);
+#ifdef SK_SUPPORT_LEGACY_SIMPLE_DRAWIMAGERECT
+ void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint = NULL);
+#else
+ void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint,
+ SrcRectConstraint = kStrict_SrcRectConstraint);
+#endif
+
+#ifdef SK_SUPPORT_LEGACY_SRCPTR_DRAWIMAGERECT
+ void drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint = kStrict_SrcRectConstraint);
+#endif
/**
* Draw the bitmap stretched differentially to fit into dst.
@@ -1209,6 +1227,14 @@ public:
static void Internal_Private_SetTreatSpriteAsBitmap(bool);
static bool Internal_Private_GetTreatSpriteAsBitmap();
+ // TEMP helpers until we switch virtual over to const& for src-rect
+ void legacy_drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
+ const SkPaint* paint,
+ SrcRectConstraint constraint = kStrict_SrcRectConstraint);
+ void legacy_drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
+ const SkPaint* paint,
+ SrcRectConstraint constraint = kStrict_SrcRectConstraint);
+
protected:
// default impl defers to getDevice()->newSurface(info)
virtual SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&);
diff --git a/samplecode/SampleAtlas.cpp b/samplecode/SampleAtlas.cpp
index 4cce4879c4..e11bf7e2c1 100644
--- a/samplecode/SampleAtlas.cpp
+++ b/samplecode/SampleAtlas.cpp
@@ -33,7 +33,7 @@ static void draw_atlas_sim(SkCanvas* canvas, SkImage* atlas, const SkRSXform xfo
canvas->save();
canvas->concat(matrix);
- canvas->drawImageRect(atlas, &tex[i], tex[i].makeOffset(-tex[i].x(), -tex[i].y()), paint,
+ canvas->drawImageRect(atlas, tex[i], tex[i].makeOffset(-tex[i].x(), -tex[i].y()), paint,
SkCanvas::kFast_SrcRectConstraint);
canvas->restore();
}
diff --git a/samplecode/SampleBitmapRect.cpp b/samplecode/SampleBitmapRect.cpp
index c69fcf4ceb..b39db4c192 100644
--- a/samplecode/SampleBitmapRect.cpp
+++ b/samplecode/SampleBitmapRect.cpp
@@ -131,7 +131,7 @@ protected:
for (int i = 0; i < 2; ++i) {
paint.setFilterQuality(1 == i ? kLow_SkFilterQuality : kNone_SkFilterQuality);
- canvas->drawBitmapRect(bitmap, &srcR, fDstR[i], &paint,
+ canvas->drawBitmapRect(bitmap, srcR, fDstR[i], &paint,
SkCanvas::kStrict_SrcRectConstraint);
canvas->drawRect(fDstR[i], paint);
}
@@ -226,7 +226,7 @@ protected:
for (int i = 0; i < 2; ++i) {
paint.setFilterQuality(1 == i ? kLow_SkFilterQuality : kNone_SkFilterQuality);
- canvas->drawBitmapRect(fBitmap, &fSrcR, fDstR[i], &paint,
+ canvas->drawBitmapRect(fBitmap, fSrcR, fDstR[i], &paint,
SkCanvas::kStrict_SrcRectConstraint);
canvas->drawRect(fDstR[i], paint);
}
diff --git a/samplecode/SampleTextureDomain.cpp b/samplecode/SampleTextureDomain.cpp
index dad1e0e07a..7c770a9aac 100644
--- a/samplecode/SampleTextureDomain.cpp
+++ b/samplecode/SampleTextureDomain.cpp
@@ -53,7 +53,7 @@ protected:
// the constrained texture domain.
srcRect.setXYWH(1, 1, 3, 3);
dstRect.setXYWH(5, 5, 305, 305);
- canvas->drawBitmapRect(fBM, &srcRect, dstRect, &paint, SkCanvas::kStrict_SrcRectConstraint);
+ canvas->drawBitmapRect(fBM, srcRect, dstRect, &paint, SkCanvas::kStrict_SrcRectConstraint);
// Test that bitmap draws across separate devices also respect
// the constrainted texture domain.
@@ -64,14 +64,14 @@ protected:
srcRect.setXYWH(1, 1, 3, 3);
dstRect.setXYWH(1, 1, 3, 3);
- surface->getCanvas()->drawBitmapRect(fBM, &srcRect, dstRect, &paint,
+ surface->getCanvas()->drawBitmapRect(fBM, srcRect, dstRect, &paint,
SkCanvas::kStrict_SrcRectConstraint);
SkAutoTUnref<SkImage> image(surface->newImageSnapshot());
srcRect.setXYWH(1, 1, 3, 3);
dstRect.setXYWH(405, 5, 305, 305);
- canvas->drawImageRect(image, &srcRect, dstRect, &paint);
+ canvas->drawImageRect(image, srcRect, dstRect, &paint);
// Test that bitmap blurring using a subrect
// renders correctly
@@ -83,7 +83,7 @@ protected:
SkBlurMaskFilter::kHighQuality_BlurFlag |
SkBlurMaskFilter::kIgnoreTransform_BlurFlag);
paint.setMaskFilter(mf)->unref();
- canvas->drawImageRect(image, &srcRect, dstRect, &paint);
+ canvas->drawImageRect(image, srcRect, dstRect, &paint);
// Blur and a rotation + NULL src rect
// This should not trigger the texture domain code
diff --git a/src/c/sk_surface.cpp b/src/c/sk_surface.cpp
index 1e676ffe7c..84a9c541c2 100644
--- a/src/c/sk_surface.cpp
+++ b/src/c/sk_surface.cpp
@@ -162,10 +162,6 @@ static const SkRect& AsRect(const sk_rect_t& crect) {
return reinterpret_cast<const SkRect&>(crect);
}
-static const SkRect* AsRect(const sk_rect_t* crect) {
- return reinterpret_cast<const SkRect*>(crect);
-}
-
static const SkPath& AsPath(const sk_path_t& cpath) {
return reinterpret_cast<const SkPath&>(cpath);
}
@@ -399,7 +395,16 @@ void sk_canvas_draw_image(sk_canvas_t* ccanvas, const sk_image_t* cimage, float
void sk_canvas_draw_image_rect(sk_canvas_t* ccanvas, const sk_image_t* cimage,
const sk_rect_t* csrcR, const sk_rect_t* cdstR,
const sk_paint_t* cpaint) {
- AsCanvas(ccanvas)->drawImageRect(AsImage(cimage), AsRect(csrcR), AsRect(*cdstR), AsPaint(cpaint));
+ SkCanvas* canvas = AsCanvas(ccanvas);
+ const SkImage* image = AsImage(cimage);
+ const SkRect& dst = AsRect(*cdstR);
+ const SkPaint* paint = AsPaint(cpaint);
+
+ if (csrcR) {
+ canvas->drawImageRect(image, AsRect(*csrcR), dst, paint);
+ } else {
+ canvas->drawImageRect(image, dst, paint);
+ }
}
void sk_canvas_draw_picture(sk_canvas_t* ccanvas, const sk_picture_t* cpicture,
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 342f79f9d9..4f5e15911d 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1846,6 +1846,7 @@ void SkCanvas::drawImage(const SkImage* image, SkScalar x, SkScalar y, const SkP
this->onDrawImage(image, x, y, paint);
}
+#ifdef SK_SUPPORT_LEGACY_SRCPTR_DRAWIMAGERECT
void SkCanvas::drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
if (dst.isEmpty()) {
@@ -1853,20 +1854,47 @@ void SkCanvas::drawImageRect(const SkImage* image, const SkRect* src, const SkRe
}
this->onDrawImageRect(image, src, dst, paint, constraint);
}
+void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint) {
+ if (bitmap.drawsNothing() || dst.isEmpty()) {
+ return;
+ }
+ this->onDrawBitmapRect(bitmap, src, dst, paint, constraint);
+}
+#endif
+
+void SkCanvas::drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint) {
+ if (dst.isEmpty() || src.isEmpty()) {
+ return;
+ }
+ this->onDrawImageRect(image, &src, dst, paint, constraint);
+}
void SkCanvas::drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
- SkRect src = SkRect::Make(isrc);
- this->drawImageRect(image, &src, dst, paint, constraint);
+ this->drawImageRect(image, SkRect::Make(isrc), dst, paint, constraint);
}
+#ifdef SK_SUPPORT_LEGACY_SIMPLE_DRAWIMAGERECT
+void SkCanvas::drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint) {
+ this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()), dst, paint);
+}
+#else
+void SkCanvas::drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint,
+ SrcRectConstraint constraint) {
+ this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()), dst, paint,
+ constraint);
+}
+#endif
+
void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst,
const SkPaint* paint) {
if (dst.isEmpty()) {
return;
}
if (!SkNinePatchIter::Valid(image->width(), image->height(), center)) {
- this->drawImageRect(image, NULL, dst, paint);
+ this->drawImageRect(image, dst, paint);
}
this->onDrawImageNine(image, center, dst, paint);
}
@@ -1878,19 +1906,30 @@ void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar dx, SkScalar dy, cons
this->onDrawBitmap(bitmap, dx, dy, paint);
}
-void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
+void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect& src, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
- if (bitmap.drawsNothing() || dst.isEmpty()) {
+ if (bitmap.drawsNothing() || dst.isEmpty() || src.isEmpty()) {
return;
}
- this->onDrawBitmapRect(bitmap, src, dst, paint, constraint);
+ this->onDrawBitmapRect(bitmap, &src, dst, paint, constraint);
}
void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect& isrc, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
- SkRect src = SkRect::Make(isrc);
- this->drawBitmapRect(bitmap, &src, dst, paint, constraint);
+ this->drawBitmapRect(bitmap, SkRect::Make(isrc), dst, paint, constraint);
+}
+
+#ifdef SK_SUPPORT_LEGACY_SIMPLE_DRAWIMAGERECT
+void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint) {
+ this->drawBitmapRect(bitmap, SkRect::MakeIWH(bitmap.width(), bitmap.height()), dst, paint);
+}
+#else
+void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst, const SkPaint* paint,
+ SrcRectConstraint constraint) {
+ this->drawBitmapRect(bitmap, SkRect::MakeIWH(bitmap.width(), bitmap.height()), dst, paint,
+ constraint);
}
+#endif
void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst,
const SkPaint* paint) {
@@ -1922,6 +1961,25 @@ void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const Sk
this->onDrawAtlas(atlas, xform, tex, colors, count, mode, cull, paint);
}
+void SkCanvas::legacy_drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint) {
+ if (src) {
+ this->drawImageRect(image, *src, dst, paint, constraint);
+ } else {
+ this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()),
+ dst, paint, constraint);
+ }
+}
+void SkCanvas::legacy_drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint) {
+ if (src) {
+ this->drawBitmapRect(bitmap, *src, dst, paint, constraint);
+ } else {
+ this->drawBitmapRect(bitmap, SkRect::MakeIWH(bitmap.width(), bitmap.height()),
+ dst, paint, constraint);
+ }
+}
+
//////////////////////////////////////////////////////////////////////////////
// These are the virtual drawing methods
//////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
index 23383740c7..eb7c476e96 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -188,7 +188,7 @@ void SkPicturePlayback::handleOp(SkReader32* reader,
const SkRect* src = get_rect_ptr(reader); // may be null
const SkRect& dst = reader->skipT<SkRect>(); // required
SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstraint)reader->readInt();
- canvas->drawBitmapRect(bitmap, src, dst, paint, constraint);
+ canvas->legacy_drawBitmapRect(bitmap, src, dst, paint, constraint);
} break;
case DRAW_BITMAP_MATRIX: {
const SkPaint* paint = fPictureData->getPaint(reader);
@@ -260,7 +260,7 @@ void SkPicturePlayback::handleOp(SkReader32* reader,
// newer op-code stores the constraint explicitly
constraint = (SkCanvas::SrcRectConstraint)reader->readInt();
}
- canvas->drawImageRect(image, src, dst, paint, constraint);
+ canvas->legacy_drawImageRect(image, src, dst, paint, constraint);
} break;
case DRAW_OVAL: {
const SkPaint& paint = *fPictureData->getPaint(reader);
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp
index 25fc2d8005..8c884d98bb 100644
--- a/src/core/SkRecordDraw.cpp
+++ b/src/core/SkRecordDraw.cpp
@@ -89,16 +89,16 @@ DRAW(ClipRegion, clipRegion(r.region, r.op));
DRAW(DrawBitmap, drawBitmap(r.bitmap.shallowCopy(), r.left, r.top, r.paint));
DRAW(DrawBitmapNine, drawBitmapNine(r.bitmap.shallowCopy(), r.center, r.dst, r.paint));
DRAW(DrawBitmapRect,
- drawBitmapRect(r.bitmap.shallowCopy(), r.src, r.dst, r.paint,
+ legacy_drawBitmapRect(r.bitmap.shallowCopy(), r.src, r.dst, r.paint,
SkCanvas::kStrict_SrcRectConstraint));
DRAW(DrawBitmapRectFast,
- drawBitmapRect(r.bitmap.shallowCopy(), r.src, r.dst, r.paint,
+ legacy_drawBitmapRect(r.bitmap.shallowCopy(), r.src, r.dst, r.paint,
SkCanvas::kFast_SrcRectConstraint));
DRAW(DrawBitmapRectFixedSize,
- drawBitmapRect(r.bitmap.shallowCopy(), &r.src, r.dst, &r.paint, r.constraint));
+ legacy_drawBitmapRect(r.bitmap.shallowCopy(), &r.src, r.dst, &r.paint, r.constraint));
DRAW(DrawDRRect, drawDRRect(r.outer, r.inner, r.paint));
DRAW(DrawImage, drawImage(r.image, r.left, r.top, r.paint));
-DRAW(DrawImageRect, drawImageRect(r.image, r.src, r.dst, r.paint, r.constraint));
+DRAW(DrawImageRect, legacy_drawImageRect(r.image, r.src, r.dst, r.paint, r.constraint));
DRAW(DrawImageNine, drawImageNine(r.image, r.center, r.dst, r.paint));
DRAW(DrawOval, drawOval(r.oval, r.paint));
DRAW(DrawPaint, drawPaint(r.paint));
diff --git a/src/effects/SkBitmapSource.cpp b/src/effects/SkBitmapSource.cpp
index 859e8aff62..ecaffcf7c9 100644
--- a/src/effects/SkBitmapSource.cpp
+++ b/src/effects/SkBitmapSource.cpp
@@ -84,7 +84,7 @@ bool SkBitmapSource::onFilterImage(Proxy* proxy, const SkBitmap&, const Context&
paint.setFilterQuality(
fSrcRect.width() == dstRect.width() && fSrcRect.height() == dstRect.height() ?
kNone_SkFilterQuality : fFilterQuality);
- canvas.drawBitmapRect(fBitmap, &fSrcRect, dstRect, &paint, SkCanvas::kStrict_SrcRectConstraint);
+ canvas.drawBitmapRect(fBitmap, fSrcRect, dstRect, &paint, SkCanvas::kStrict_SrcRectConstraint);
*result = device.get()->accessBitmap(false);
offset->fX = dstIRect.fLeft;
diff --git a/src/effects/SkTestImageFilters.cpp b/src/effects/SkTestImageFilters.cpp
index cd277ec225..43b43a58fc 100755
--- a/src/effects/SkTestImageFilters.cpp
+++ b/src/effects/SkTestImageFilters.cpp
@@ -69,9 +69,7 @@ bool SkDownSampleImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
}
OwnDeviceCanvas canvas(dev);
- SkRect r = SkRect::MakeWH(SkIntToScalar(src.width()),
- SkIntToScalar(src.height()));
- canvas.drawBitmapRect(tmp, r);
+ canvas.drawBitmapRect(tmp, SkRect::MakeIWH(src.width(), src.height()), nullptr);
*result = dev->accessBitmap(false);
}
return true;
diff --git a/src/gpu/GrRecordReplaceDraw.cpp b/src/gpu/GrRecordReplaceDraw.cpp
index e3936de48e..11eb38d8dc 100644
--- a/src/gpu/GrRecordReplaceDraw.cpp
+++ b/src/gpu/GrRecordReplaceDraw.cpp
@@ -43,7 +43,7 @@ static inline void draw_replacement_bitmap(GrCachedLayer* layer, SkCanvas* canva
canvas->save();
canvas->setMatrix(SkMatrix::I());
- canvas->drawBitmapRect(bm, &src, dst, layer->paint(), SkCanvas::kStrict_SrcRectConstraint);
+ canvas->drawBitmapRect(bm, src, dst, layer->paint(), SkCanvas::kStrict_SrcRectConstraint);
canvas->restore();
} else {
canvas->drawSprite(bm,
diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
index ef1eeb303b..29d798bf73 100644
--- a/src/pipe/SkGPipeRead.cpp
+++ b/src/pipe/SkGPipeRead.cpp
@@ -650,7 +650,7 @@ static void drawBitmapRect_rp(SkCanvas* canvas, SkReader32* reader,
const SkRect* dst = skip<SkRect>(reader);
const SkBitmap* bitmap = holder.getBitmap();
if (state->shouldDraw()) {
- canvas->drawBitmapRect(*bitmap, src, *dst, hasPaint ? &state->paint() : NULL, constraint);
+ canvas->legacy_drawBitmapRect(*bitmap, src, *dst, hasPaint ? &state->paint() : NULL, constraint);
}
}
@@ -692,7 +692,7 @@ static void drawImageRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32
const SkImage* image = state->getImage(slot);
if (state->shouldDraw()) {
- canvas->drawImageRect(image, src, *dst, hasPaint ? &state->paint() : NULL, constraint);
+ canvas->legacy_drawImageRect(image, src, *dst, hasPaint ? &state->paint() : NULL, constraint);
}
}
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
index 8a4f8172d8..6ccfb5e4b3 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -872,7 +872,7 @@ void SkDeferredCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* sr
}
AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint);
- this->drawingCanvas()->drawBitmapRect(bitmap, src, dst, paint, (SrcRectConstraint)constraint);
+ this->drawingCanvas()->legacy_drawBitmapRect(bitmap, src, dst, paint, (SrcRectConstraint)constraint);
this->recordedDrawCommand();
}
@@ -900,7 +900,7 @@ void SkDeferredCanvas::onDrawImageRect(const SkImage* image, const SkRect* src,
}
AutoImmediateDrawIfNeeded autoDraw(*this, image, paint);
- this->drawingCanvas()->drawImageRect(image, src, dst, paint, constraint);
+ this->drawingCanvas()->legacy_drawImageRect(image, src, dst, paint, constraint);
this->recordedDrawCommand();
}
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index b0e7b8fb92..7c378c9b81 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -534,7 +534,7 @@ static int lcanvas_drawImageRect(lua_State* L) {
lua2rect(L, 4, &dstR);
SkPaint paint;
- canvas->drawImageRect(image, srcRPtr, dstR, lua2OptionalPaint(L, 5, &paint));
+ canvas->legacy_drawImageRect(image, srcRPtr, dstR, lua2OptionalPaint(L, 5, &paint));
return 0;
}
diff --git a/src/utils/SkNWayCanvas.cpp b/src/utils/SkNWayCanvas.cpp
index 0efc98caa5..fb8d0ee13e 100644
--- a/src/utils/SkNWayCanvas.cpp
+++ b/src/utils/SkNWayCanvas.cpp
@@ -196,7 +196,7 @@ void SkNWayCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, c
const SkPaint* paint, SrcRectConstraint constraint) {
Iter iter(fList);
while (iter.next()) {
- iter->drawBitmapRect(bitmap, src, dst, paint, (SrcRectConstraint)constraint);
+ iter->legacy_drawBitmapRect(bitmap, src, dst, paint, (SrcRectConstraint)constraint);
}
}
@@ -220,7 +220,7 @@ void SkNWayCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, cons
const SkPaint* paint, SrcRectConstraint constraint) {
Iter iter(fList);
while (iter.next()) {
- iter->drawImageRect(image, src, dst, paint, constraint);
+ iter->legacy_drawImageRect(image, src, dst, paint, constraint);
}
}
diff --git a/src/utils/android/SkAndroidSDKCanvas.cpp b/src/utils/android/SkAndroidSDKCanvas.cpp
index a6393d2d33..b05605bbf9 100644
--- a/src/utils/android/SkAndroidSDKCanvas.cpp
+++ b/src/utils/android/SkAndroidSDKCanvas.cpp
@@ -147,7 +147,7 @@ void SkAndroidSDKCanvas::onDrawBitmapRect(const SkBitmap& bitmap,
const SkPaint* paint,
SkCanvas::SrcRectConstraint constraint) {
FILTER_PTR(paint);
- fProxyTarget->drawBitmapRect(bitmap, src, dst, filteredPaint, constraint);
+ fProxyTarget->legacy_drawBitmapRect(bitmap, src, dst, filteredPaint, constraint);
}
void SkAndroidSDKCanvas::onDrawBitmapNine(const SkBitmap& bitmap,
const SkIRect& center,
@@ -244,7 +244,7 @@ void SkAndroidSDKCanvas::onDrawImageRect(const SkImage* image,
const SkPaint* paint,
SrcRectConstraint constraint) {
FILTER_PTR(paint);
- fProxyTarget->drawImageRect(image, in, out, filteredPaint, constraint);
+ fProxyTarget->legacy_drawImageRect(image, in, out, filteredPaint, constraint);
}
void SkAndroidSDKCanvas::onDrawPicture(const SkPicture* picture,
diff --git a/src/utils/debugger/SkDrawCommand.cpp b/src/utils/debugger/SkDrawCommand.cpp
index 15fc9ca8fb..8e1612fad7 100644
--- a/src/utils/debugger/SkDrawCommand.cpp
+++ b/src/utils/debugger/SkDrawCommand.cpp
@@ -131,7 +131,7 @@ void render_bitmap(SkCanvas* canvas, const SkBitmap& input, const SkRect* srcRec
yScale * input.height());
canvas->clear(0xFFFFFFFF);
- canvas->drawBitmapRect(input, dst);
+ canvas->drawBitmapRect(input, dst, nullptr);
if (srcRect) {
SkRect r = SkRect::MakeLTRB(srcRect->fLeft * xScale + SK_Scalar1,
@@ -352,7 +352,7 @@ SkDrawBitmapRectCommand::SkDrawBitmapRectCommand(const SkBitmap& bitmap, const S
}
void SkDrawBitmapRectCommand::execute(SkCanvas* canvas) const {
- canvas->drawBitmapRect(fBitmap, this->srcRect(), fDst, fPaintPtr, fConstraint);
+ canvas->legacy_drawBitmapRect(fBitmap, this->srcRect(), fDst, fPaintPtr, fConstraint);
}
bool SkDrawBitmapRectCommand::render(SkCanvas* canvas) const {
@@ -405,7 +405,7 @@ SkDrawImageRectCommand::SkDrawImageRectCommand(const SkImage* image, const SkRec
}
void SkDrawImageRectCommand::execute(SkCanvas* canvas) const {
- canvas->drawImageRect(fImage, fSrc.getMaybeNull(), fDst, fPaint.getMaybeNull(), fConstraint);
+ canvas->legacy_drawImageRect(fImage, fSrc.getMaybeNull(), fDst, fPaint.getMaybeNull(), fConstraint);
}
bool SkDrawImageRectCommand::render(SkCanvas* canvas) const {
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
index 34ccc91e87..bcfd9c479e 100644
--- a/tests/PictureTest.cpp
+++ b/tests/PictureTest.cpp
@@ -690,7 +690,7 @@ DEF_TEST(PictureRecorder_replay, reporter) {
make_bm(&bm, 10, 10, SK_ColorRED, true);
r.offset(5.0f, 5.0f);
- canvas->drawBitmapRect(bm, r);
+ canvas->drawBitmapRect(bm, r, nullptr);
SkAutoTUnref<SkPicture> final(recorder.endRecording());
REPORTER_ASSERT(reporter, final->willPlayBackBitmaps());
@@ -1167,7 +1167,7 @@ static void draw_bitmaps(const SkBitmap bitmap, SkCanvas* canvas) {
// Don't care what these record, as long as they're legal.
canvas->drawBitmap(bitmap, 0.0f, 0.0f, &paint);
- canvas->drawBitmapRect(bitmap, &rect, rect, &paint, SkCanvas::kStrict_SrcRectConstraint);
+ canvas->drawBitmapRect(bitmap, rect, rect, &paint, SkCanvas::kStrict_SrcRectConstraint);
canvas->drawBitmapNine(bitmap, irect, rect, &paint);
canvas->drawSprite(bitmap, 1, 1);
}
diff --git a/tests/RecordDrawTest.cpp b/tests/RecordDrawTest.cpp
index 9bbf1d95af..da78296648 100644
--- a/tests/RecordDrawTest.cpp
+++ b/tests/RecordDrawTest.cpp
@@ -325,7 +325,7 @@ DEF_TEST(RecordDraw_drawImage, r){
{
SkRecord record;
SkRecorder recorder(&record, 10, 10);
- recorder.drawImageRect(image, 0, SkRect::MakeWH(10, 10));
+ recorder.drawImageRect(image, SkRect::MakeWH(10, 10), nullptr);
SkRecordDraw(record, &canvas, NULL, NULL, 0, NULL, 0);
}
REPORTER_ASSERT(r, canvas.fDrawImageRectCalled);
diff --git a/tests/RecorderTest.cpp b/tests/RecorderTest.cpp
index 829fe3e229..c41d634b44 100644
--- a/tests/RecorderTest.cpp
+++ b/tests/RecorderTest.cpp
@@ -98,7 +98,7 @@ DEF_TEST(Recorder_drawImage_takeReference, reporter) {
SkRecorder recorder(&record, 100, 100);
// DrawImageRect is supposed to take a reference
- recorder.drawImageRect(image.get(), 0, SkRect::MakeWH(100, 100));
+ recorder.drawImageRect(image.get(), SkRect::MakeWH(100, 100), nullptr);
REPORTER_ASSERT(reporter, !image->unique());
Tally tally;
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 157ccf6c77..fac283d5b1 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -705,7 +705,7 @@ static void TestSurfaceCopyOnWrite(skiatest::Reporter* reporter, SurfaceType sur
EXPECT_COPY_ON_WRITE(drawRRect(testRRect, testPaint))
EXPECT_COPY_ON_WRITE(drawPath(testPath, testPaint))
EXPECT_COPY_ON_WRITE(drawBitmap(testBitmap, 0, 0))
- EXPECT_COPY_ON_WRITE(drawBitmapRect(testBitmap, testRect))
+ EXPECT_COPY_ON_WRITE(drawBitmapRect(testBitmap, testRect, nullptr))
EXPECT_COPY_ON_WRITE(drawBitmapNine(testBitmap, testIRect, testRect, NULL))
EXPECT_COPY_ON_WRITE(drawSprite(testBitmap, 0, 0, NULL))
EXPECT_COPY_ON_WRITE(drawText(testText.c_str(), testText.size(), 0, 1, testPaint))