Chromium Code Reviews| Index: src/pdf/SkPDFShader.cpp |
| diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp |
| index d9b701c081048868ec228239a83d0d48e6918249..86b84bebbe0f8362b971fb4d0b66c359c842f1fc 100644 |
| --- a/src/pdf/SkPDFShader.cpp |
| +++ b/src/pdf/SkPDFShader.cpp |
| @@ -1015,14 +1015,22 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) { |
| SkMatrix xMirror; |
| xMirror.setScale(-1, 1); |
| xMirror.postTranslate(2 * width, 0); |
| - canvas.drawBitmapMatrix(*image, xMirror); |
|
mtklein
2014/12/10 14:48:09
Seems like this file uses drawBitmapMatrix often e
f(malita)
2014/12/10 15:33:56
Done.
|
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(xMirror); |
| + canvas.drawBitmap(*image, 0, 0); |
| + |
| patternBBox.fRight += width; |
| } |
| if (tileModes[1] == SkShader::kMirror_TileMode) { |
| SkMatrix yMirror; |
| yMirror.setScale(SK_Scalar1, -SK_Scalar1); |
| yMirror.postTranslate(0, 2 * height); |
| - canvas.drawBitmapMatrix(*image, yMirror); |
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(yMirror); |
| + canvas.drawBitmap(*image, 0, 0); |
| + |
| patternBBox.fBottom += height; |
| } |
| if (tileModes[0] == SkShader::kMirror_TileMode && |
| @@ -1030,7 +1038,10 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) { |
| SkMatrix mirror; |
| mirror.setScale(-1, -1); |
| mirror.postTranslate(2 * width, 2 * height); |
| - canvas.drawBitmapMatrix(*image, mirror); |
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(mirror); |
| + canvas.drawBitmap(*image, 0, 0); |
| } |
| // Then handle Clamping, which requires expanding the pattern canvas to |
| @@ -1081,12 +1092,20 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) { |
| SkMatrix leftMatrix; |
| leftMatrix.setScale(-deviceBounds.left(), 1); |
| leftMatrix.postTranslate(deviceBounds.left(), 0); |
| - canvas.drawBitmapMatrix(left, leftMatrix); |
| + |
| + { |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(leftMatrix); |
| + canvas.drawBitmap(left, 0, 0); |
| + } |
| if (tileModes[1] == SkShader::kMirror_TileMode) { |
| leftMatrix.postScale(SK_Scalar1, -SK_Scalar1); |
| leftMatrix.postTranslate(0, 2 * height); |
| - canvas.drawBitmapMatrix(left, leftMatrix); |
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(leftMatrix); |
| + canvas.drawBitmap(left, 0, 0); |
| } |
| patternBBox.fLeft = 0; |
| } |
| @@ -1099,12 +1118,20 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) { |
| SkMatrix rightMatrix; |
| rightMatrix.setScale(deviceBounds.right() - width, 1); |
| rightMatrix.postTranslate(width, 0); |
| - canvas.drawBitmapMatrix(right, rightMatrix); |
| + |
| + { |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(rightMatrix); |
| + canvas.drawBitmap(right, 0, 0); |
| + } |
| if (tileModes[1] == SkShader::kMirror_TileMode) { |
| rightMatrix.postScale(SK_Scalar1, -SK_Scalar1); |
| rightMatrix.postTranslate(0, 2 * height); |
| - canvas.drawBitmapMatrix(right, rightMatrix); |
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(rightMatrix); |
| + canvas.drawBitmap(right, 0, 0); |
| } |
| patternBBox.fRight = deviceBounds.width(); |
| } |
| @@ -1119,12 +1146,20 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) { |
| SkMatrix topMatrix; |
| topMatrix.setScale(SK_Scalar1, -deviceBounds.top()); |
| topMatrix.postTranslate(0, deviceBounds.top()); |
| - canvas.drawBitmapMatrix(top, topMatrix); |
| + |
| + { |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(topMatrix); |
| + canvas.drawBitmap(top, 0, 0); |
| + } |
| if (tileModes[0] == SkShader::kMirror_TileMode) { |
| topMatrix.postScale(-1, 1); |
| topMatrix.postTranslate(2 * width, 0); |
| - canvas.drawBitmapMatrix(top, topMatrix); |
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(topMatrix); |
| + canvas.drawBitmap(top, 0, 0); |
| } |
| patternBBox.fTop = 0; |
| } |
| @@ -1137,12 +1172,20 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) { |
| SkMatrix bottomMatrix; |
| bottomMatrix.setScale(SK_Scalar1, deviceBounds.bottom() - height); |
| bottomMatrix.postTranslate(0, height); |
| - canvas.drawBitmapMatrix(bottom, bottomMatrix); |
| + |
| + { |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(bottomMatrix); |
| + canvas.drawBitmap(bottom, 0, 0); |
| + } |
| if (tileModes[0] == SkShader::kMirror_TileMode) { |
| bottomMatrix.postScale(-1, 1); |
| bottomMatrix.postTranslate(2 * width, 0); |
| - canvas.drawBitmapMatrix(bottom, bottomMatrix); |
| + |
| + SkAutoCanvasRestore acr(&canvas, true); |
| + canvas.concat(bottomMatrix); |
| + canvas.drawBitmap(bottom, 0, 0); |
| } |
| patternBBox.fBottom = deviceBounds.height(); |
| } |