Merge "VectorDrawable: Use the matrix scale only if the matrix has no rotation or skew."
diff --git a/libs/hwui/VectorDrawable.cpp b/libs/hwui/VectorDrawable.cpp
index e13a2bb..56cb104 100644
--- a/libs/hwui/VectorDrawable.cpp
+++ b/libs/hwui/VectorDrawable.cpp
@@ -403,8 +403,15 @@
// canvas scale.
outCanvas->getMatrix(&mCanvasMatrix);
mBounds = bounds;
- int scaledWidth = (int) (mBounds.width() * mCanvasMatrix.getScaleX());
- int scaledHeight = (int) (mBounds.height() * mCanvasMatrix.getScaleY());
+ float canvasScaleX = 1.0f;
+ float canvasScaleY = 1.0f;
+ if (mCanvasMatrix.getSkewX() == 0 && mCanvasMatrix.getSkewY() == 0) {
+ // Only use the scale value when there's no skew or rotation in the canvas matrix.
+ canvasScaleX = mCanvasMatrix.getScaleX();
+ canvasScaleY = mCanvasMatrix.getScaleY();
+ }
+ int scaledWidth = (int) (mBounds.width() * canvasScaleX);
+ int scaledHeight = (int) (mBounds.height() * canvasScaleY);
scaledWidth = std::min(Tree::MAX_CACHED_BITMAP_SIZE, scaledWidth);
scaledHeight = std::min(Tree::MAX_CACHED_BITMAP_SIZE, scaledHeight);