From b80ffee96c634c4cf0db9cae3ac16938ff604cdd Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Wed, 23 May 2018 16:39:39 -0400 Subject: Reland "Add support for SkCanvas::kStrict_SrcRectConstraint to GrTextureOp." This is a reland of a0047bcff704a9121a6d82a6f97d6124463a2e54 Original change's description: > Add support for SkCanvas::kStrict_SrcRectConstraint to GrTextureOp. > > Change-Id: I8faa2838b3110b8080ac48bbe223240e3fb22998 > Reviewed-on: https://skia-review.googlesource.com/129762 > Reviewed-by: Brian Osman > Commit-Queue: Brian Salomon Change-Id: Icbad064ae2779f4e140a55e520c0034cd1d17477 Reviewed-on: https://skia-review.googlesource.com/130305 Reviewed-by: Stephen White --- gm/perspimages.cpp | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'gm') diff --git a/gm/perspimages.cpp b/gm/perspimages.cpp index a4242cf6f2..b4ad5eb9ae 100644 --- a/gm/perspimages.cpp +++ b/gm/perspimages.cpp @@ -28,7 +28,7 @@ public: protected: SkString onShortName() override { return SkString("persp_images"); } - SkISize onISize() override { return SkISize::Make(1150, 880); } + SkISize onISize() override { return SkISize::Make(1150, 1280); } void onOnceBeforeDraw() override { fImages.push_back(make_image1()); @@ -60,7 +60,13 @@ protected: } canvas->translate(-bounds.fLeft + 10.f, -bounds.fTop + 10.f); canvas->save(); - for (auto subrect : {false, true}) { + enum class DrawType { + kDrawImage, + kDrawImageRectStrict, + kDrawImageRectFast, + }; + for (auto type : + {DrawType::kDrawImage, DrawType::kDrawImageRectStrict, DrawType::kDrawImageRectFast}) { for (const auto& m : matrices) { for (auto aa : {false, true}) { paint.setAntiAlias(aa); @@ -70,14 +76,22 @@ protected: paint.setFilterQuality(filter); canvas->save(); canvas->concat(m); - if (subrect) { - SkRect src = {img->width() / 4.f, img->height() / 4.f, - 3.f * img->width() / 4.f, 3.f * img->height() / 4}; - SkRect dst = {0, 0, - 3.f / 4.f * img->width(), 3.f / 4.f * img->height()}; - canvas->drawImageRect(img, src, dst, &paint); - } else { - canvas->drawImage(img, 0, 0, &paint); + SkRect src = {img->width() / 4.f, img->height() / 4.f, + 3.f * img->width() / 4.f, 3.f * img->height() / 4}; + SkRect dst = {0, 0, + 3.f / 4.f * img->width(), 3.f / 4.f * img->height()}; + switch (type) { + case DrawType::kDrawImage: + canvas->drawImage(img, 0, 0, &paint); + break; + case DrawType::kDrawImageRectStrict: + canvas->drawImageRect(img, src, dst, &paint, + SkCanvas::kStrict_SrcRectConstraint); + break; + case DrawType::kDrawImageRectFast: + canvas->drawImageRect(img, src, dst, &paint, + SkCanvas::kFast_SrcRectConstraint); + break; } canvas->restore(); ++n; -- cgit v1.2.3