summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Doris Liu <tianliu@google.com> 2015-12-30 19:17:06 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-12-30 19:17:06 +0000
commit6380b4793c093abbf08852f77b513fa92db892a9 (patch)
treefb5e05661a76accb1ecbf5f9891d0ac01f3335eb
parent81a83562fcb6bbbcb78ad0bd18210a620511f2d0 (diff)
parenta0e61572ab2ec23f1329a04f6a8065721a1efbdb (diff)
Merge "VectorDrawable: Use the matrix scale only if the matrix has no rotation or skew."
-rw-r--r--libs/hwui/VectorDrawable.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/hwui/VectorDrawable.cpp b/libs/hwui/VectorDrawable.cpp
index e13a2bb2a38b..56cb10476118 100644
--- a/libs/hwui/VectorDrawable.cpp
+++ b/libs/hwui/VectorDrawable.cpp
@@ -403,8 +403,15 @@ void Tree::draw(Canvas* outCanvas, SkColorFilter* colorFilter,
// 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);