From 21015b7004248c46233f1678eeaba69223d68769 Mon Sep 17 00:00:00 2001 From: Robert Phillips Date: Wed, 9 May 2018 15:12:23 -0400 Subject: Fix clipping of SkMatrixImageFilter input (take 2) This cannot land before the Chrome CL https://chromium-review.googlesource.com/c/chromium/src/+/1052850 (Add a flag to ignore an upcoming Skia bug fix that changes layout and unit tests) Bug: skia:7931 Change-Id: I2951a727bd3f61aeda0e1e322cd76e48f677f75f Reviewed-on: https://skia-review.googlesource.com/127125 Reviewed-by: Greg Daniel Commit-Queue: Robert Phillips --- gm/resizeimagefilter.cpp | 66 ++++++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 42 deletions(-) (limited to 'gm') diff --git a/gm/resizeimagefilter.cpp b/gm/resizeimagefilter.cpp index fe7561626b..625e098c67 100644 --- a/gm/resizeimagefilter.cpp +++ b/gm/resizeimagefilter.cpp @@ -61,57 +61,39 @@ protected: void onDraw(SkCanvas* canvas) override { canvas->clear(SK_ColorBLACK); - SkRect srcRect = SkRect::MakeWH(96, 96); + const SkRect srcRect = SkRect::MakeWH(96, 96); + const SkSize deviceSize = SkSize::Make(16, 16); - SkSize deviceSize = SkSize::Make(16, 16); - this->draw(canvas, - srcRect, - deviceSize, - kNone_SkFilterQuality, - nullptr); + this->draw(canvas, srcRect, deviceSize, kNone_SkFilterQuality, nullptr); canvas->translate(srcRect.width() + SkIntToScalar(10), 0); - this->draw(canvas, - srcRect, - deviceSize, - kLow_SkFilterQuality, - nullptr); + this->draw(canvas, srcRect, deviceSize, kLow_SkFilterQuality, nullptr); canvas->translate(srcRect.width() + SkIntToScalar(10), 0); - this->draw(canvas, - srcRect, - deviceSize, - kMedium_SkFilterQuality, - nullptr); + this->draw(canvas, srcRect, deviceSize, kMedium_SkFilterQuality, nullptr); canvas->translate(srcRect.width() + SkIntToScalar(10), 0); - this->draw(canvas, - srcRect, - deviceSize, - kHigh_SkFilterQuality, - nullptr); - - sk_sp surface(SkSurface::MakeRasterN32Premul(16, 16)); - SkCanvas* surfaceCanvas = surface->getCanvas(); - surfaceCanvas->clear(0x000000); + this->draw(canvas, srcRect, deviceSize, kHigh_SkFilterQuality, nullptr); + { - SkPaint paint; - paint.setColor(0xFF00FF00); - SkRect ovalRect = SkRect::MakeWH(16, 16); - ovalRect.inset(SkIntToScalar(2)/3, SkIntToScalar(2)/3); - surfaceCanvas->drawOval(ovalRect, paint); + sk_sp surface(SkSurface::MakeRasterN32Premul(16, 16)); + SkCanvas* surfaceCanvas = surface->getCanvas(); + surfaceCanvas->clear(0x000000); + { + SkPaint paint; + paint.setColor(0xFF00FF00); + SkRect ovalRect = SkRect::MakeWH(16, 16); + ovalRect.inset(SkIntToScalar(2)/3, SkIntToScalar(2)/3); + surfaceCanvas->drawOval(ovalRect, paint); + } + sk_sp image(surface->makeImageSnapshot()); + SkRect inRect = SkRect::MakeXYWH(-4, -4, 20, 20); + SkRect outRect = SkRect::MakeXYWH(-24, -24, 120, 120); + sk_sp source( + SkImageSource::Make(std::move(image), inRect, outRect, kHigh_SkFilterQuality)); + canvas->translate(srcRect.width() + SkIntToScalar(10), 0); + this->draw(canvas, srcRect, deviceSize, kHigh_SkFilterQuality, std::move(source)); } - sk_sp image(surface->makeImageSnapshot()); - SkRect inRect = SkRect::MakeXYWH(-4, -4, 20, 20); - SkRect outRect = SkRect::MakeXYWH(-24, -24, 120, 120); - sk_sp source( - SkImageSource::Make(std::move(image), inRect, outRect, kHigh_SkFilterQuality)); - canvas->translate(srcRect.width() + SkIntToScalar(10), 0); - this->draw(canvas, - srcRect, - deviceSize, - kHigh_SkFilterQuality, - std::move(source)); } private: -- cgit v1.2.3