aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkImageSource.cpp
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2017-02-06 12:32:55 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-07 13:06:48 +0000
commit8bb3b21a4a098e9bfe88209f84d50abf80e39792 (patch)
treec5bab1477824b272444aaee4ed74f883b19df39a /src/effects/SkImageSource.cpp
parentfd197d503493a1a35bb0da36ac22b18da379f940 (diff)
Add GM to exercise some of the darker corners of SkMagnifierImageFilter
An upcoming CL (https://skia-review.googlesource.com/c/7995/ (Remove asTextureRef from SkSpecialImage & update effects accordingly)) modifies some untested portions of the SkMagnifierImageFilter. This adds a test to prevents regressions. Change-Id: I9fa406f699e39fa393212e7f63a457b015b36edb Reviewed-on: https://skia-review.googlesource.com/8023 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/effects/SkImageSource.cpp')
-rw-r--r--src/effects/SkImageSource.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/effects/SkImageSource.cpp b/src/effects/SkImageSource.cpp
index 0f0160d467..5769e677a1 100644
--- a/src/effects/SkImageSource.cpp
+++ b/src/effects/SkImageSource.cpp
@@ -83,12 +83,20 @@ sk_sp<SkSpecialImage> SkImageSource::onFilterImage(SkSpecialImage* source, const
ctx.ctm().mapRect(&dstRect, fDstRect);
SkRect bounds = SkRect::MakeIWH(fImage->width(), fImage->height());
- if (fSrcRect == bounds && dstRect == bounds) {
- // No regions cropped out or resized; return entire image.
- offset->fX = offset->fY = 0;
- return SkSpecialImage::MakeFromImage(SkIRect::MakeWH(fImage->width(), fImage->height()),
- fImage, ctx.outputProperties().colorSpace(),
- &source->props());
+ if (fSrcRect == bounds) {
+ int iLeft = dstRect.fLeft;
+ int iTop = dstRect.fTop;
+ // TODO: this seems to be a very noise-prone way to determine this (esp. the floating-point
+ // widths & heights).
+ if (dstRect.width() == bounds.width() && dstRect.height() == bounds.height() &&
+ iLeft == dstRect.fLeft && iTop == dstRect.fTop) {
+ // The dest is just an un-scaled integer translation of the entire image; return it
+ offset->fX = iLeft;
+ offset->fY = iTop;
+ return SkSpecialImage::MakeFromImage(SkIRect::MakeWH(fImage->width(), fImage->height()),
+ fImage, ctx.outputProperties().colorSpace(),
+ &source->props());
+ }
}
const SkIRect dstIRect = dstRect.roundOut();