aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkCanvas.cpp
diff options
context:
space:
mode:
authorGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-04-02 19:20:05 +0000
committerGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-04-02 19:20:05 +0000
commitd5424a425bc21280afe2161f6ac1e5d9eb97e6b2 (patch)
tree0f5454944e27ead305baf8871e51698b8df1c498 /src/core/SkCanvas.cpp
parent55bd940446506f8409f38271f2e4969e9b4f3991 (diff)
Fix matrix adjustment passed to filter processing.
When adjusting the CTM for filter use, we were subtracting off the destination coordinates of the drawDevice() or drawSprite(). This is not quite correct: we should subtract off the coordinates relative to the device origin instead. This occurs when one filtered saveLayer() is drawn inside another saveLayer(), both with non-zero origin. This fixes layout test svg/batik/text/smallFonts.svg in Blink, and is exercised by the provided unit test. BUG=skia: R=bsalomon@google.com Review URL: https://codereview.chromium.org/222723002 git-svn-id: http://skia.googlecode.com/svn/trunk@14029 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r--src/core/SkCanvas.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 1ca9312ce1..c16ac9a09f 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1256,7 +1256,7 @@ void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, int x, int y,
SkIPoint offset = SkIPoint::Make(0, 0);
const SkBitmap& src = srcDev->accessBitmap(false);
SkMatrix matrix = *iter.fMatrix;
- matrix.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y));
+ matrix.postTranslate(SkIntToScalar(-pos.x()), SkIntToScalar(-pos.y()));
SkIRect clipBounds = SkIRect::MakeWH(srcDev->width(), srcDev->height());
SkImageFilter::Context ctx(matrix, clipBounds);
if (filter->filterImage(&proxy, src, ctx, &dst, &offset)) {
@@ -1296,7 +1296,7 @@ void SkCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
SkBitmap dst;
SkIPoint offset = SkIPoint::Make(0, 0);
SkMatrix matrix = *iter.fMatrix;
- matrix.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y));
+ matrix.postTranslate(SkIntToScalar(-pos.x()), SkIntToScalar(-pos.y()));
SkIRect clipBounds = SkIRect::MakeWH(bitmap.width(), bitmap.height());
SkImageFilter::Context ctx(matrix, clipBounds);
if (filter->filterImage(&proxy, bitmap, ctx, &dst, &offset)) {