Revert "Reland "Revert "allow clients to opt into new didTranslate/didScale"""
This reverts commit f66bba6018832ed8fc6f4e1ad39fc2952f8e190c.
Reason for revert: sheriff thinks it may be the bot, so landing
Original change's description:
> Reland "Revert "allow clients to opt into new didTranslate/didScale""
>
> This reverts commit d7ce7ac8d11e78e9452c0c59a20c207e9b8865fa.
>
> Reason for revert: breaks Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker
>
> Original change's description:
> > Revert "Revert "allow clients to opt into new didTranslate/didScale""
> >
> > This reverts commit 4a46758db8a83ec23ade5319333db321bf0f7788.
> >
> > Add guard to Flutter
> >
> > Change-Id: Ief0e5cb36af13c8f00a36a617d0384622012d644
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/263937
> > Reviewed-by: Mike Reed <reed@google.com>
> > Commit-Queue: Mike Reed <reed@google.com>
>
> TBR=reed@google.com
>
> Change-Id: I3291c4dfe18d6e751e61f55ed9b22a01f0c8ad72
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/263860
> Reviewed-by: Mike Reed <reed@google.com>
> Commit-Queue: Mike Reed <reed@google.com>
TBR=reed@google.com
Change-Id: I3111a034291c2320e5ff33f8c2072354f836440f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/263939
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 17978ae..08e1b84 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1439,9 +1439,24 @@
}
void SkCanvas::scale(SkScalar sx, SkScalar sy) {
+#ifdef SK_SUPPORT_LEGACY_CANVAS_MATRIX_VIRTUALS
SkMatrix m;
m.setScale(sx, sy);
this->concat(m);
+#else
+ if (sx != 1 || sy != 1) {
+ this->checkForDeferredSave();
+ fMCRec->fMatrix.preScale(sx, sy);
+
+ // shouldn't need to do this (theoretically), as the state shouldn't have changed,
+ // but pre-scaling by a non-finite does change it, so we have to recompute.
+ fIsScaleTranslate = fMCRec->fMatrix.isScaleTranslate();
+
+ FOR_EACH_TOP_DEVICE(device->setGlobalCTM(fMCRec->fMatrix));
+
+ this->didScale(sx, sy);
+ }
+#endif
}
void SkCanvas::rotate(SkScalar degrees) {