From 1c83948b1506ec2e88849f0500e2ec67ecf17296 Mon Sep 17 00:00:00 2001 From: Mis012 Date: Sat, 21 Jun 2025 01:15:48 +0200 Subject: [PATCH] VectorDrawable: add an override to avoid intermediate rasterization This matters for statically converting drawables into SVG, which is necessary for drawable-based app icons. --- .../graphics/drawable/VectorDrawable.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/api-impl/android/graphics/drawable/VectorDrawable.java b/src/api-impl/android/graphics/drawable/VectorDrawable.java index fa919abb..c6c80ff5 100644 --- a/src/api-impl/android/graphics/drawable/VectorDrawable.java +++ b/src/api-impl/android/graphics/drawable/VectorDrawable.java @@ -811,6 +811,9 @@ class PathParser { public class VectorDrawable extends Drawable { private static final String LOGTAG = VectorDrawable.class.getSimpleName(); + /* don't use an intermediary bitmap (for making an SVG) */ + static boolean direct_draw_override = false; + private static final String SHAPE_CLIP_PATH = "clip-path"; private static final String SHAPE_GROUP = "group"; private static final String SHAPE_PATH = "path"; @@ -939,16 +942,20 @@ public class VectorDrawable extends Drawable { // we offset to (0, 0); mTmpBounds.offsetTo(0, 0); - mVectorState.createCachedBitmapIfNeeded(scaledWidth, scaledHeight); - if (!mAllowCaching) { - mVectorState.updateCachedBitmap(scaledWidth, scaledHeight); + if (direct_draw_override) { + mVectorState.mVPathRenderer.draw(canvas, scaledWidth, scaledHeight, null); } else { - if (!mVectorState.canReuseCache()) { + mVectorState.createCachedBitmapIfNeeded(scaledWidth, scaledHeight); + if (!mAllowCaching) { mVectorState.updateCachedBitmap(scaledWidth, scaledHeight); - mVectorState.updateCacheStates(); + } else { + if (!mVectorState.canReuseCache()) { + mVectorState.updateCachedBitmap(scaledWidth, scaledHeight); + mVectorState.updateCacheStates(); + } } + mVectorState.drawCachedBitmapWithRootAlpha(canvas, colorFilter, mTmpBounds); } - mVectorState.drawCachedBitmapWithRootAlpha(canvas, colorFilter, mTmpBounds); canvas.restoreToCount(saveCount); }