| Index: src/pdf/SkPDFShader.cpp
|
| diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
|
| index d9b701c081048868ec228239a83d0d48e6918249..85ebe9e1451f4e41fed9eb180581ca72bc0c71c7 100644
|
| --- a/src/pdf/SkPDFShader.cpp
|
| +++ b/src/pdf/SkPDFShader.cpp
|
| @@ -469,6 +469,12 @@ static SkString sweepCode(const SkShader::GradientInfo& info,
|
| return function;
|
| }
|
|
|
| +static void drawBitmapMatrix(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& matrix) {
|
| + SkAutoCanvasRestore acr(canvas, true);
|
| + canvas->concat(matrix);
|
| + canvas->drawBitmap(bm, 0, 0);
|
| +}
|
| +
|
| class SkPDFShader::State {
|
| public:
|
| SkShader::GradientType fType;
|
| @@ -1015,14 +1021,14 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
|
| SkMatrix xMirror;
|
| xMirror.setScale(-1, 1);
|
| xMirror.postTranslate(2 * width, 0);
|
| - canvas.drawBitmapMatrix(*image, xMirror);
|
| + drawBitmapMatrix(&canvas, *image, xMirror);
|
| 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);
|
| + drawBitmapMatrix(&canvas, *image, yMirror);
|
| patternBBox.fBottom += height;
|
| }
|
| if (tileModes[0] == SkShader::kMirror_TileMode &&
|
| @@ -1030,7 +1036,7 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
|
| SkMatrix mirror;
|
| mirror.setScale(-1, -1);
|
| mirror.postTranslate(2 * width, 2 * height);
|
| - canvas.drawBitmapMatrix(*image, mirror);
|
| + drawBitmapMatrix(&canvas, *image, mirror);
|
| }
|
|
|
| // Then handle Clamping, which requires expanding the pattern canvas to
|
| @@ -1081,12 +1087,12 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
|
| SkMatrix leftMatrix;
|
| leftMatrix.setScale(-deviceBounds.left(), 1);
|
| leftMatrix.postTranslate(deviceBounds.left(), 0);
|
| - canvas.drawBitmapMatrix(left, leftMatrix);
|
| + drawBitmapMatrix(&canvas, left, leftMatrix);
|
|
|
| if (tileModes[1] == SkShader::kMirror_TileMode) {
|
| leftMatrix.postScale(SK_Scalar1, -SK_Scalar1);
|
| leftMatrix.postTranslate(0, 2 * height);
|
| - canvas.drawBitmapMatrix(left, leftMatrix);
|
| + drawBitmapMatrix(&canvas, left, leftMatrix);
|
| }
|
| patternBBox.fLeft = 0;
|
| }
|
| @@ -1099,12 +1105,12 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
|
| SkMatrix rightMatrix;
|
| rightMatrix.setScale(deviceBounds.right() - width, 1);
|
| rightMatrix.postTranslate(width, 0);
|
| - canvas.drawBitmapMatrix(right, rightMatrix);
|
| + drawBitmapMatrix(&canvas, right, rightMatrix);
|
|
|
| if (tileModes[1] == SkShader::kMirror_TileMode) {
|
| rightMatrix.postScale(SK_Scalar1, -SK_Scalar1);
|
| rightMatrix.postTranslate(0, 2 * height);
|
| - canvas.drawBitmapMatrix(right, rightMatrix);
|
| + drawBitmapMatrix(&canvas, right, rightMatrix);
|
| }
|
| patternBBox.fRight = deviceBounds.width();
|
| }
|
| @@ -1119,12 +1125,12 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
|
| SkMatrix topMatrix;
|
| topMatrix.setScale(SK_Scalar1, -deviceBounds.top());
|
| topMatrix.postTranslate(0, deviceBounds.top());
|
| - canvas.drawBitmapMatrix(top, topMatrix);
|
| + drawBitmapMatrix(&canvas, top, topMatrix);
|
|
|
| if (tileModes[0] == SkShader::kMirror_TileMode) {
|
| topMatrix.postScale(-1, 1);
|
| topMatrix.postTranslate(2 * width, 0);
|
| - canvas.drawBitmapMatrix(top, topMatrix);
|
| + drawBitmapMatrix(&canvas, top, topMatrix);
|
| }
|
| patternBBox.fTop = 0;
|
| }
|
| @@ -1137,12 +1143,12 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
|
| SkMatrix bottomMatrix;
|
| bottomMatrix.setScale(SK_Scalar1, deviceBounds.bottom() - height);
|
| bottomMatrix.postTranslate(0, height);
|
| - canvas.drawBitmapMatrix(bottom, bottomMatrix);
|
| + drawBitmapMatrix(&canvas, bottom, bottomMatrix);
|
|
|
| if (tileModes[0] == SkShader::kMirror_TileMode) {
|
| bottomMatrix.postScale(-1, 1);
|
| bottomMatrix.postTranslate(2 * width, 0);
|
| - canvas.drawBitmapMatrix(bottom, bottomMatrix);
|
| + drawBitmapMatrix(&canvas, bottom, bottomMatrix);
|
| }
|
| patternBBox.fBottom = deviceBounds.height();
|
| }
|
|
|