From e9700b7c525380587682f1a4d766a60c537ef176 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Fri, 15 Aug 2014 11:25:16 -0400 Subject: Stretch small wallpapers to cover the screen in the picker. Helpful if you're using tiny color swatches as wallpapers. Bug: 17017748 Change-Id: I3ed518996c7d58470c5a194ce064f90d73454448 --- .../launcher2/WallpaperChooserDialogFragment.java | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher2/WallpaperChooserDialogFragment.java b/src/com/android/launcher2/WallpaperChooserDialogFragment.java index b99d8ecb..ea9d3e8d 100644 --- a/src/com/android/launcher2/WallpaperChooserDialogFragment.java +++ b/src/com/android/launcher2/WallpaperChooserDialogFragment.java @@ -26,6 +26,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.ColorFilter; +import android.graphics.Matrix; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; @@ -323,6 +324,7 @@ public class WallpaperChooserDialogFragment extends DialogFragment implements Bitmap mBitmap; int mIntrinsicWidth; int mIntrinsicHeight; + Matrix mMatrix; /* package */void setBitmap(Bitmap bitmap) { mBitmap = bitmap; @@ -330,16 +332,35 @@ public class WallpaperChooserDialogFragment extends DialogFragment implements return; mIntrinsicWidth = mBitmap.getWidth(); mIntrinsicHeight = mBitmap.getHeight(); + mMatrix = null; } @Override public void draw(Canvas canvas) { if (mBitmap == null) return; - int width = canvas.getWidth(); - int height = canvas.getHeight(); - int x = (width - mIntrinsicWidth) / 2; - int y = (height - mIntrinsicHeight) / 2; - canvas.drawBitmap(mBitmap, x, y, null); + + if (mMatrix == null) { + final int vwidth = canvas.getWidth(); + final int vheight = canvas.getHeight(); + final int dwidth = mIntrinsicWidth; + final int dheight = mIntrinsicHeight; + + float scale = 1.0f; + + if (dwidth < vwidth || dheight < vheight) { + scale = Math.max((float) vwidth / (float) dwidth, + (float) vheight / (float) dheight); + } + + float dx = (vwidth - dwidth * scale) * 0.5f + 0.5f; + float dy = (vheight - dheight * scale) * 0.5f + 0.5f; + + mMatrix = new Matrix(); + mMatrix.setScale(scale, scale); + mMatrix.postTranslate((int) dx, (int) dy); + } + + canvas.drawBitmap(mBitmap, mMatrix, null); } @Override -- cgit v1.2.3