diff options
Diffstat (limited to 'src/com/android/launcher3/Utilities.java')
-rw-r--r-- | src/com/android/launcher3/Utilities.java | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index f41a1c2e5..9b5cbe7eb 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -103,10 +103,15 @@ final class Utilities { } } + static Bitmap createIconBitmap(Drawable icon, Context context) { + return createIconBitmap(icon, context, null, null, null, 1f); + } + /** * Returns a bitmap suitable for the all apps view. */ - static Bitmap createIconBitmap(Drawable icon, Context context) { + static Bitmap createIconBitmap(Drawable icon, Context context, Drawable iconBack, + Drawable iconMask, Drawable iconUpon, float scale) { synchronized (sCanvas) { // we share the statics :-( if (sIconWidth == -1) { initStatics(context); @@ -143,7 +148,7 @@ final class Utilities { int textureWidth = sIconTextureWidth; int textureHeight = sIconTextureHeight; - final Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight, + Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight, Bitmap.Config.ARGB_8888); final Canvas canvas = sCanvas; canvas.setBitmap(bitmap); @@ -164,7 +169,29 @@ final class Utilities { sOldBounds.set(icon.getBounds()); icon.setBounds(left, top, left+width, top+height); + canvas.save(); + if (iconMask != null && iconBack != null) { + canvas.scale(scale, scale, width / 2, height/2); + } icon.draw(canvas); + canvas.restore(); + if (iconBack != null && iconMask != null) { + iconMask.setBounds(icon.getBounds()); + ((BitmapDrawable) iconMask).getPaint().setXfermode( + new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); + iconMask.draw(canvas); + canvas.setBitmap(null); + Bitmap finalBitmap = Bitmap.createBitmap(textureWidth, textureHeight, + Bitmap.Config.ARGB_8888); + canvas.setBitmap(finalBitmap); + iconBack.setBounds(icon.getBounds()); + iconBack.draw(canvas); + canvas.drawBitmap(bitmap, null, icon.getBounds(), null); + bitmap = finalBitmap; + } + if (iconUpon != null) { + iconUpon.draw(canvas); + } icon.setBounds(sOldBounds); canvas.setBitmap(null); |