diff options
| author | 2015-12-30 19:17:06 +0000 | |
|---|---|---|
| committer | 2015-12-30 19:17:06 +0000 | |
| commit | 6380b4793c093abbf08852f77b513fa92db892a9 (patch) | |
| tree | fb5e05661a76accb1ecbf5f9891d0ac01f3335eb | |
| parent | 81a83562fcb6bbbcb78ad0bd18210a620511f2d0 (diff) | |
| parent | a0e61572ab2ec23f1329a04f6a8065721a1efbdb (diff) | |
Merge "VectorDrawable: Use the matrix scale only if the matrix has no rotation or skew."
| -rw-r--r-- | libs/hwui/VectorDrawable.cpp | 11 |
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); |