filter-quality is deprecated, pass sampling to drawImage
Bug: skia:7650
Change-Id: Ifd92705bd042db74a6c2527858239b0b8e5a4def
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/360981
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/bench/BulkRectBench.cpp b/bench/BulkRectBench.cpp
index 6bc38ea..0941c17 100644
--- a/bench/BulkRectBench.cpp
+++ b/bench/BulkRectBench.cpp
@@ -115,13 +115,13 @@
SkPaint paint;
paint.setAntiAlias(true);
- paint.setFilterQuality(kLow_SkFilterQuality);
for (int i = 0; i < kRectCount; ++i) {
int imageIndex = kImageMode == ImageMode::kShared ? 0 : i;
- SkIRect srcRect = SkIRect::MakeWH(fImages[imageIndex]->width(),
- fImages[imageIndex]->height());
- canvas->drawImageRect(fImages[imageIndex].get(), srcRect, fRects[i], &paint,
+ SkRect srcRect = SkRect::MakeIWH(fImages[imageIndex]->width(),
+ fImages[imageIndex]->height());
+ canvas->drawImageRect(fImages[imageIndex].get(), srcRect, fRects[i],
+ SkSamplingOptions(SkFilterMode::kLinear), &paint,
SkCanvas::kFast_SrcRectConstraint);
}
}
diff --git a/bench/DisplacementBench.cpp b/bench/DisplacementBench.cpp
index 3f1fed2..b86577c 100644
--- a/bench/DisplacementBench.cpp
+++ b/bench/DisplacementBench.cpp
@@ -71,7 +71,7 @@
void drawClippedBitmap(SkCanvas* canvas, int x, int y, const SkPaint& paint) {
canvas->save();
canvas->clipIRect(fImage->bounds().makeOffset(x, y));
- canvas->drawImage(fImage, SkIntToScalar(x), SkIntToScalar(y), &paint);
+ canvas->drawImage(fImage, SkIntToScalar(x), SkIntToScalar(y), SkSamplingOptions(), &paint);
canvas->restore();
}
diff --git a/bench/ImageCacheBudgetBench.cpp b/bench/ImageCacheBudgetBench.cpp
index bedc7b3..a224cbf 100644
--- a/bench/ImageCacheBudgetBench.cpp
+++ b/bench/ImageCacheBudgetBench.cpp
@@ -36,7 +36,7 @@
// optmizations
SkPaint paint;
paint.setAlpha(0x10);
- canvas->drawImage(img, 0, 0, &paint);
+ canvas->drawImage(img, 0, 0, SkSamplingOptions(), &paint);
}
void set_cache_budget(SkCanvas* canvas, int approxImagesInBudget) {
diff --git a/gm/emboss.cpp b/gm/emboss.cpp
index 32b9cf6..af414db 100644
--- a/gm/emboss.cpp
+++ b/gm/emboss.cpp
@@ -49,19 +49,19 @@
void onDraw(SkCanvas* canvas) override {
SkPaint paint;
auto img = make_bm();
- canvas->drawImage(img, 10, 10, &paint);
+ canvas->drawImage(img, 10, 10);
canvas->translate(img->width() + SkIntToScalar(10), 0);
paint.setMaskFilter(SkEmbossMaskFilter::Make(
SkBlurMask::ConvertRadiusToSigma(3),
{ { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
- canvas->drawImage(img, 10, 10, &paint);
+ canvas->drawImage(img, 10, 10, SkSamplingOptions(), &paint);
canvas->translate(img->width() + SkIntToScalar(10), 0);
// this combination of emboss+colorfilter used to crash -- so we exercise it to
// confirm that we have a fix.
paint.setColorFilter(SkColorFilters::Blend(0xFFFF0000, SkBlendMode::kSrcATop));
- canvas->drawImage(img, 10, 10, &paint);
+ canvas->drawImage(img, 10, 10, SkSamplingOptions(), &paint);
canvas->translate(img->width() + SkIntToScalar(10), 0);
paint.setAntiAlias(true);
diff --git a/gm/rectangletexture.cpp b/gm/rectangletexture.cpp
index 04fc98a..f21bc8f 100644
--- a/gm/rectangletexture.cpp
+++ b/gm/rectangletexture.cpp
@@ -153,11 +153,11 @@
static constexpr SkScalar kPad = 5.f;
- constexpr SkFilterQuality kQualities[] = {
- kNone_SkFilterQuality,
- kLow_SkFilterQuality,
- kMedium_SkFilterQuality,
- kHigh_SkFilterQuality,
+ const SkSamplingOptions kSamplings[] = {
+ SkSamplingOptions(SkFilterMode::kNearest),
+ SkSamplingOptions(SkFilterMode::kLinear),
+ SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear),
+ SkSamplingOptions({1.0f/3, 1.0f/3}),
};
constexpr SkScalar kScales[] = {1.0f, 1.2f, 0.75f};
@@ -170,16 +170,14 @@
for (auto s : kScales) {
canvas->save();
canvas->scale(s, s);
- for (auto q : kQualities) {
+ for (auto s : kSamplings) {
// drawImage
- SkPaint plainPaint;
- plainPaint.setFilterQuality(q);
- canvas->drawImage(img, 0, 0, &plainPaint);
+ canvas->drawImage(img, 0, 0, s);
canvas->translate(w + kPad, 0);
// clamp/clamp shader
SkPaint clampPaint;
- clampPaint.setShader(fGradImgs[i]->makeShader(SkSamplingOptions(q)));
+ clampPaint.setShader(fGradImgs[i]->makeShader(s));
canvas->drawRect(SkRect::MakeWH(1.5f*w, 1.5f*h), clampPaint);
canvas->translate(1.5f*w + kPad, 0);
@@ -187,14 +185,14 @@
SkPaint repeatPaint;
repeatPaint.setShader(fGradImgs[i]->makeShader(SkTileMode::kRepeat,
SkTileMode::kMirror,
- SkSamplingOptions(q)));
+ s));
canvas->drawRect(SkRect::MakeWH(1.5f*w, 1.5f*h), repeatPaint);
canvas->translate(1.5f*w + kPad, 0);
// drawImageRect with kStrict
auto srcRect = SkRect::MakeXYWH(.25f*w, .25f*h, .50f*w, .50f*h);
auto dstRect = SkRect::MakeXYWH( 0, 0, .50f*w, .50f*h);
- canvas->drawImageRect(fGradImgs[i], srcRect, dstRect, &plainPaint,
+ canvas->drawImageRect(fGradImgs[i], srcRect, dstRect, s, nullptr,
SkCanvas::kStrict_SrcRectConstraint);
canvas->translate(.5f*w + kPad, 0);
}
diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
index b538fe7..4efc6af 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -114,7 +114,7 @@
SkCanvas canvas(bitmap);
const SkColor kDefaultColor = 0xffabcdef;
canvas.clear(kDefaultColor);
- canvas.drawImage(image, 0, 0, nullptr);
+ canvas.drawImage(image, 0, 0);
if (TestImageGenerator::kSucceedGetPixels_TestType == test) {
REPORTER_ASSERT(
r, TestImageGenerator::Color() == bitmap.getColor(0, 0));
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp
index afe8615..de882ef 100644
--- a/tests/DrawBitmapRectTest.cpp
+++ b/tests/DrawBitmapRectTest.cpp
@@ -248,10 +248,11 @@
SkCanvas canvas(dst);
- SkIRect srcR = { gWidth, 0, gWidth + 16, 16 };
- SkRect dstR = { 0, 0, SkIntToScalar(16), SkIntToScalar(16) };
+ SkRect srcR = { gWidth, 0, gWidth + 16, 16 };
+ SkRect dstR = { 0, 0, 16, 16 };
- canvas.drawImageRect(src.asImage(), srcR, dstR, nullptr);
+ canvas.drawImageRect(src.asImage(), srcR, dstR, SkSamplingOptions(), nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
// ensure that we draw nothing if srcR does not intersect the bitmap
REPORTER_ASSERT(reporter, check_for_all_zeros(dst));
diff --git a/tests/GrMipMappedTest.cpp b/tests/GrMipMappedTest.cpp
index 0095b1f..d6c5fab 100644
--- a/tests/GrMipMappedTest.cpp
+++ b/tests/GrMipMappedTest.cpp
@@ -337,16 +337,14 @@
// Make sure we scale so we don't optimize out the use of mips.
surface->getCanvas()->scale(0.5f, 0.5f);
- SkPaint paint;
// This should upload the image to a non mipped GrTextureProxy.
- surface->getCanvas()->drawImage(bmpImage, 0, 0, &paint);
+ surface->getCanvas()->drawImage(bmpImage, 0, 0);
surface->flushAndSubmit();
// Now set the filter quality to high so we use mip maps. We should find the non mipped texture
// in the cache for the SkImage. Since the texture is 1x1 we should just use that texture
// instead of trying to do a copy to a mipped texture.
- paint.setFilterQuality(kHigh_SkFilterQuality);
- surface->getCanvas()->drawImage(bmpImage, 0, 0, &paint);
+ surface->getCanvas()->drawImage(bmpImage, 0, 0, SkSamplingOptions({1.0f/3, 1.0f/3}));
surface->flushAndSubmit();
}
diff --git a/tests/GrOpListFlushTest.cpp b/tests/GrOpListFlushTest.cpp
index 73a2cdf..370a2bd 100644
--- a/tests/GrOpListFlushTest.cpp
+++ b/tests/GrOpListFlushTest.cpp
@@ -47,7 +47,7 @@
canvas1->clear(SK_ColorRED);
canvas2->clear(SK_ColorRED);
- SkIRect srcRect = SkIRect::MakeWH(1, 1);
+ SkRect srcRect = SkRect::MakeWH(1, 1);
SkRect dstRect = SkRect::MakeWH(1, 1);
SkPaint paint;
paint.setColor(SK_ColorGREEN);
@@ -58,12 +58,14 @@
srcRect.fRight = srcRect.fLeft + 1;
sk_sp<SkImage> image = surface1->makeImageSnapshot();
- canvas2->drawImageRect(image.get(), srcRect, dstRect, nullptr);
+ canvas2->drawImageRect(image.get(), srcRect, dstRect, SkSamplingOptions(), nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
if (i != 999) {
dstRect.fLeft = i+1;
dstRect.fRight = dstRect.fLeft + 1;
image = surface2->makeImageSnapshot();
- canvas1->drawImageRect(image.get(), srcRect, dstRect, nullptr);
+ canvas1->drawImageRect(image.get(), srcRect, dstRect, SkSamplingOptions(), nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
}
}
context->flushAndSubmit();
diff --git a/tests/GrTextureMipMapInvalidationTest.cpp b/tests/GrTextureMipMapInvalidationTest.cpp
index e8fb2f2..c751074 100644
--- a/tests/GrTextureMipMapInvalidationTest.cpp
+++ b/tests/GrTextureMipMapInvalidationTest.cpp
@@ -49,10 +49,10 @@
// Painting with downscale and medium filter quality should result in mipmap creation
// Flush the context rather than the canvas as flushing the canvas triggers MIP level
// generation.
- SkPaint paint;
- paint.setFilterQuality(kMedium_SkFilterQuality);
+ SkSamplingOptions sampling(SkFilterMode::kLinear, SkMipmapMode::kLinear);
+
surf2->getCanvas()->scale(0.2f, 0.2f);
- surf2->getCanvas()->drawImage(surf1->makeImageSnapshot(), 0, 0, &paint);
+ surf2->getCanvas()->drawImage(surf1->makeImageSnapshot(), 0, 0, sampling);
context->flushAndSubmit();
REPORTER_ASSERT(reporter, isMipped(surf1.get()) == allocateMips);
REPORTER_ASSERT(reporter, !allocateMips || !mipsAreDirty(surf1.get()));
@@ -100,9 +100,10 @@
SkImageInfo::Make(1, 1, kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr);
surf = SkSurface::MakeRenderTarget(dContext, SkBudgeted::kYes, singlePixelInfo, 1,
kTopLeft_GrSurfaceOrigin, nullptr);
- SkPaint paint;
- paint.setFilterQuality(kMedium_SkFilterQuality);
- surf->getCanvas()->drawImageRect(img, SkRect::MakeWH(1, 1), &paint);
+
+ surf->getCanvas()->drawImageRect(img, SkRect::MakeWH(1, 1),
+ SkSamplingOptions(SkFilterMode::kLinear,
+ SkMipmapMode::kLinear));
uint32_t pixel;
surf->readPixels(singlePixelInfo, &pixel, sizeof(uint32_t), 0, 0);
REPORTER_ASSERT(reporter, pixel == SkPreMultiplyColor(SK_ColorDKGRAY));
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index bceec80..cf70c79 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -1357,7 +1357,6 @@
DEF_TEST(Image_nonfinite_dst, reporter) {
auto surf = SkSurface::MakeRasterN32Premul(10, 10);
auto img = any_image_will_do();
- SkPaint paint;
for (SkScalar bad : { SK_ScalarInfinity, SK_ScalarNaN}) {
for (int bits = 1; bits <= 15; ++bits) {
@@ -1367,7 +1366,7 @@
if (bits & 4) dst.fRight = bad;
if (bits & 8) dst.fBottom = bad;
- surf->getCanvas()->drawImageRect(img, dst, &paint);
+ surf->getCanvas()->drawImageRect(img, dst, SkSamplingOptions());
// we should draw nothing
ToolUtils::PixelIter iter(surf.get());
diff --git a/tests/MipMapTest.cpp b/tests/MipMapTest.cpp
index 299ebe0..b08075b 100644
--- a/tests/MipMapTest.cpp
+++ b/tests/MipMapTest.cpp
@@ -220,7 +220,8 @@
for (int i = 0; i < count; ++i) {
SkPixmap pm = builder->level(i);
auto surf = SkSurface::MakeRasterDirect(pm);
- surf->getCanvas()->drawImageRect(img, SkRect::MakeIWH(pm.width(), pm.height()), nullptr);
+ surf->getCanvas()->drawImageRect(img, SkRect::MakeIWH(pm.width(), pm.height()),
+ SkSamplingOptions());
}
}
diff --git a/tests/MultiPictureDocumentTest.cpp b/tests/MultiPictureDocumentTest.cpp
index 26b0b6d..27dc745 100644
--- a/tests/MultiPictureDocumentTest.cpp
+++ b/tests/MultiPictureDocumentTest.cpp
@@ -53,11 +53,11 @@
paint.setColor(SK_ColorGREEN);
canvas->drawPath(path, paint);
- canvas->drawImage(image, 128-seed, 128, &paint);
+ canvas->drawImage(image, 128-seed, 128, SkSamplingOptions(), &paint);
if (seed % 2 == 0) {
SkRect rect2 = SkRect::MakeXYWH(0, 0, 40, 60);
- canvas->drawImageRect(image, rect2, &paint);
+ canvas->drawImageRect(image, rect2, SkSamplingOptions(), &paint);
}
SkPaint paint2;
diff --git a/tests/PDFJpegEmbedTest.cpp b/tests/PDFJpegEmbedTest.cpp
index 87577ac..53b1015 100644
--- a/tests/PDFJpegEmbedTest.cpp
+++ b/tests/PDFJpegEmbedTest.cpp
@@ -61,9 +61,9 @@
canvas->clear(SK_ColorLTGRAY);
sk_sp<SkImage> im1(SkImage::MakeFromEncoded(mandrillData));
- canvas->drawImage(im1.get(), 65.0, 0.0, nullptr);
+ canvas->drawImage(im1.get(), 65.0, 0.0);
sk_sp<SkImage> im2(SkImage::MakeFromEncoded(cmykData));
- canvas->drawImage(im2.get(), 0.0, 512.0, nullptr);
+ canvas->drawImage(im2.get(), 0.0, 512.0);
document->endPage();
document->close();
diff --git a/tests/PromiseImageTest.cpp b/tests/PromiseImageTest.cpp
index c472b35..3d8057f 100644
--- a/tests/PromiseImageTest.cpp
+++ b/tests/PromiseImageTest.cpp
@@ -392,7 +392,7 @@
canvas->drawImage(refImg, 0, 0);
SkPaint paint;
paint.setColorFilter(SkColorFilters::LinearToSRGBGamma());
- canvas->drawImage(refImg, 0, 0, &paint);
+ canvas->drawImage(refImg, 0, 0, SkSamplingOptions(), &paint);
auto shader = refImg->makeShader(SkSamplingOptions());
REPORTER_ASSERT(reporter, shader);
paint.setShader(std::move(shader));
diff --git a/tests/RepeatedClippedBlurTest.cpp b/tests/RepeatedClippedBlurTest.cpp
index 81bfc33..9d305c0 100644
--- a/tests/RepeatedClippedBlurTest.cpp
+++ b/tests/RepeatedClippedBlurTest.cpp
@@ -69,7 +69,7 @@
nullptr);
SkCanvas* c = s->getCanvas();
- c->drawImageRect(bigImg, SkRect::MakeWH(1024, 600), nullptr);
+ c->drawImageRect(bigImg, SkRect::MakeWH(1024, 600), SkSamplingOptions());
smImg = s->makeImageSnapshot();
}
@@ -99,7 +99,8 @@
SkRect dstRect = SkRect::MakeXYWH(offset.fX, offset.fY,
outSubset.width(), outSubset.height());
- dstCanvas->drawImageRect(filteredImg, outSubset, dstRect, nullptr);
+ dstCanvas->drawImageRect(filteredImg, SkRect::Make(outSubset), dstRect, SkSamplingOptions(),
+ nullptr, SkCanvas::kStrict_SrcRectConstraint);
// Flush here to mimic Chrome's SkiaHelper::ApplyImageFilter
dContext->flushAndSubmit();
diff --git a/tests/SerialProcsTest.cpp b/tests/SerialProcsTest.cpp
index 0c0c520..a206694 100644
--- a/tests/SerialProcsTest.cpp
+++ b/tests/SerialProcsTest.cpp
@@ -55,7 +55,7 @@
{
SkPictureRecorder rec;
SkCanvas* canvas = rec.beginRecording(128, 128);
- canvas->drawImage(src_img, 0, 0, nullptr);
+ canvas->drawImage(src_img, 0, 0);
pic = rec.finishRecordingAsPicture();
}
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index fa516c1..49aa214 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -294,7 +294,7 @@
SkPaint paint;
paint.setImageFilter(deserializedFilter);
canvas.clipRect(SkRect::MakeXYWH(0, 0, SkIntToScalar(24), SkIntToScalar(24)));
- canvas.drawImage(bitmap.asImage(), 0, 0, &paint);
+ canvas.drawImage(bitmap.asImage(), 0, 0, SkSamplingOptions(), &paint);
}
}
diff --git a/tests/SkImageTest.cpp b/tests/SkImageTest.cpp
index bbbcdfd..e5cf168 100644
--- a/tests/SkImageTest.cpp
+++ b/tests/SkImageTest.cpp
@@ -34,7 +34,7 @@
tgt.allocN32Pixels(gWidth, gHeight);
SkCanvas canvas(tgt);
canvas.clear(SK_ColorTRANSPARENT);
- canvas.drawImage(image, 0, 0, nullptr);
+ canvas.drawImage(image, 0, 0);
uint32_t pixel = 0;
SkImageInfo info = SkImageInfo::Make(1, 1, kBGRA_8888_SkColorType, kUnpremul_SkAlphaType);
diff --git a/tests/SkResourceCacheTest.cpp b/tests/SkResourceCacheTest.cpp
index 175abe1..eedf020 100644
--- a/tests/SkResourceCacheTest.cpp
+++ b/tests/SkResourceCacheTest.cpp
@@ -153,14 +153,11 @@
sk_sp<SkImage> image(buildImage());
- // always use high quality to ensure caching when scaled
- SkPaint paint;
- paint.setFilterQuality(kHigh_SkFilterQuality);
-
// draw the image (with a transform, to tickle different code paths) to ensure
// any associated resources get cached
canvas->concat(transform);
- canvas->drawImage(image, 0, 0, &paint);
+ // always use high quality to ensure caching when scaled
+ canvas->drawImage(image, 0, 0, SkSamplingOptions({1.0f/3, 1.0f/3}));
const auto desc = SkBitmapCacheDesc::Make(image.get());
diff --git a/tests/TextureStripAtlasManagerTest.cpp b/tests/TextureStripAtlasManagerTest.cpp
index bfead52..e67f58d 100644
--- a/tests/TextureStripAtlasManagerTest.cpp
+++ b/tests/TextureStripAtlasManagerTest.cpp
@@ -66,7 +66,7 @@
auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info));
SkCanvas* canvas = surface->getCanvas();
- canvas->drawImage(std::move(img), 0, 0, &p);
+ canvas->drawImage(std::move(img), 0, 0, SkSamplingOptions(), &p);
context->abandonContext();
}