From 1d32978f7e927cb39da480c3bdce18363967313a Mon Sep 17 00:00:00 2001 From: "junov@google.com" Date: Thu, 28 Jul 2011 20:10:09 +0000 Subject: Fixing the ignore transform flag in Ganesh with mask filter and drawBitmap TEST=SampleApp/Texture Domain BUG=http://code.google.com/p/skia/issues/detail?id=335 REVIEW=http://codereview.appspot.com/4803052/ git-svn-id: http://skia.googlecode.com/svn/trunk@1987 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/gpu/SkGpuDevice.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src/gpu') diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index d9b618a08a..4294e49072 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1237,33 +1237,33 @@ void SkGpuDevice::drawBitmap(const SkDraw& draw, } if (paint.getMaskFilter()){ - SkBitmap tmp; // storage if we need a subset of bitmap + // Convert the bitmap to a shader so that the rect can be drawn + // through drawRect, which supports mask filters. + SkBitmap tmp; // subset of bitmap, if necessary const SkBitmap* bitmapPtr = &bitmap; if (srcRectPtr) { if (!bitmap.extractSubset(&tmp, srcRect)) { return; // extraction failed } bitmapPtr = &tmp; + srcRect.set(0,0, srcRect.width(), srcRect.height()); } SkPaint paintWithTexture(paint); paintWithTexture.setShader(SkShader::CreateBitmapShader( *bitmapPtr, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode))->unref(); - paintWithTexture.getShader()->setLocalMatrix(m); - SkRect ScalarRect; ScalarRect.set(srcRect); - if (m.rectStaysRect()) { - // Preferred drawing method, optimized for rectangles - m.mapRect(&ScalarRect); - this->drawRect(draw, ScalarRect, paintWithTexture); - } else { - // Slower drawing method, for warped or rotated rectangles - SkPath path; - path.addRect(ScalarRect); - path.transform(m); - this->drawPath(draw, path, paintWithTexture, NULL, true); - } + // Transform 'm' needs to be concatenated to the draw matrix, + // rather than transforming the primitive directly, so that 'm' will + // also affect the behavior of the mask filter. + SkMatrix drawMatrix; + drawMatrix.setConcat(*draw.fMatrix, m); + SkDraw transformedDraw(draw); + transformedDraw.fMatrix = &drawMatrix; + + this->drawRect(transformedDraw, ScalarRect, paintWithTexture); + return; } -- cgit v1.2.3