Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index 09c50c69b0248cf2dc83e95c87f07d662c80252c..5abfb3e1ad000fcdbc3af9eaf8bb8fd0b6e35f3e 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -1449,9 +1449,15 @@ void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, int x, int y, const SkPa |
///////////////////////////////////////////////////////////////////////////// |
void SkCanvas::translate(SkScalar dx, SkScalar dy) { |
- SkMatrix m; |
- m.setTranslate(dx, dy); |
- this->concat(m); |
+ this->checkForDeferredSave(); |
+ fDeviceCMDirty = true; |
+ fMCRec->fMatrix.preTranslate(dx,dy); |
+ |
+ // Translate shouldn't affect the is-scale-translateness of the matrix. |
+ // (Remember, fConservativeIsScaleTranslate is conservative, so false is always fine.) |
+ SkASSERT(!fConservativeIsScaleTranslate || fMCRec->fMatrix.isScaleTranslate()); |
+ |
+ this->didTranslate(dx,dy); |
} |
void SkCanvas::scale(SkScalar sx, SkScalar sy) { |