Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0e61572 authored by Doris Liu's avatar Doris Liu
Browse files

VectorDrawable: Use the matrix scale only if the matrix has no rotation or skew.

When canvas is rotated or skewed, the scale factor is affected.
Conservatively reset the scale used to modify path stroke size to 1 in these
cases, since the image will be somewhat blurry anyway with rotation / skew..

b/25418943

Change-Id: I6dff1bca5fac5500fa688c68f8b81b6212526b6b
parent bd0d9373
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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);