summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoe Onorato <joeo@android.com>2010-01-14 11:16:55 -0500
committerJoe Onorato <joeo@android.com>2010-01-14 19:10:18 -0500
commitf5e4dd01adcc086231ab1e847ec62547626a643e (patch)
treee6899ba08ec6c391da31dcee5ebd0df4b3252ab4 /src
parentc5cfa73ef979ce31da2ef6b16ebedc598fc1c8f1 (diff)
downloadandroid_packages_apps_Trebuchet-f5e4dd01adcc086231ab1e847ec62547626a643e.tar.gz
android_packages_apps_Trebuchet-f5e4dd01adcc086231ab1e847ec62547626a643e.tar.bz2
android_packages_apps_Trebuchet-f5e4dd01adcc086231ab1e847ec62547626a643e.zip
Put the label into the same texture as the icon.
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/AllAppsView.java75
-rw-r--r--src/com/android/launcher2/AppInfoCache.java9
-rw-r--r--src/com/android/launcher2/ApplicationInfo.java13
-rw-r--r--src/com/android/launcher2/Utilities.java152
4 files changed, 125 insertions, 124 deletions
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 8d24ea34a..37ec15c9c 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -125,15 +125,11 @@ public class AllAppsView extends RSSurfaceView
public static final int ALLOC_PARAMS = 0;
public static final int ALLOC_STATE = 1;
public static final int ALLOC_ICON_IDS = 3;
- public static final int ALLOC_LABEL_IDS = 4;
public static final int COLUMNS_PER_PAGE = 4;
public static final int ROWS_PER_PAGE = 4;
- public static final int ICON_WIDTH_PX = 64;
public static final int ICON_TEXTURE_WIDTH_PX = 128;
-
- public static final int ICON_HEIGHT_PX = 64;
public static final int ICON_TEXTURE_HEIGHT_PX = 128;
public int SCREEN_WIDTH_PX;
@@ -571,15 +567,18 @@ public class AllAppsView extends RSSurfaceView
&& mCurrentIconIndex >= 0 && mCurrentIconIndex < mAllAppsList.size()) {
ApplicationInfo app = mAllAppsList.get(mCurrentIconIndex);
+ Bitmap bmp = Utilities.extractIconFromTexture(app.iconBitmap, getContext());
+
+ final int w = bmp.getWidth();
+ final int h = bmp.getHeight();
+
// We don't really have an accurate location to use. This will do.
- int screenX = mMotionDownRawX - (mDefines.ICON_WIDTH_PX / 2);
- int screenY = mMotionDownRawY - mDefines.ICON_HEIGHT_PX;
+ int screenX = mMotionDownRawX - (w / 2);
+ int screenY = mMotionDownRawY - h;
- int left = (mDefines.ICON_TEXTURE_WIDTH_PX - mDefines.ICON_WIDTH_PX) / 2;
- int top = (mDefines.ICON_TEXTURE_HEIGHT_PX - mDefines.ICON_HEIGHT_PX) / 2;
- mDragController.startDrag(app.iconBitmap, screenX, screenY,
- left, top, mDefines.ICON_WIDTH_PX, mDefines.ICON_HEIGHT_PX,
- this, app, DragController.DRAG_ACTION_COPY);
+ mDragController.startDrag(bmp, screenX, screenY,
+ 0, 0, w, h, this, app, DragController.DRAG_ACTION_COPY);
+ bmp.recycle();
mLauncher.closeAllApps(true);
}
@@ -787,10 +786,6 @@ public class AllAppsView extends RSSurfaceView
private Allocation[] mIcons;
private int[] mIconIds;
private Allocation mAllocIconIds;
-
- private Allocation[] mLabels;
- private int[] mLabelIds;
- private Allocation mAllocLabelIds;
private Allocation mSelectedIcon;
private int[] mTouchYBorders;
@@ -883,7 +878,7 @@ public class AllAppsView extends RSSurfaceView
float maxAngle = 3.14f * 0.16f;
float l = 1.f;
- l = 1 - ((ct-5) * 0.10f);
+ l = 1 - ((ct-7) * 0.10f);
if (ct > 7) {
angle = maxAngle * (ct - 7) * 0.2f;
angle = Math.min(angle, maxAngle);
@@ -949,8 +944,8 @@ public class AllAppsView extends RSSurfaceView
Sampler nearest = sb.create();
ProgramFragment.Builder bf = new ProgramFragment.Builder(mRS, null, null);
- //mPFColor = bf.create();
- //mPFColor.setName("PFColor");
+ mPFColor = bf.create();
+ mPFColor.setName("PFColor");
bf.setTexEnable(true, 0);
bf.setTexEnvMode(ProgramFragment.EnvMode.MODULATE, 0);
@@ -1040,7 +1035,6 @@ public class AllAppsView extends RSSurfaceView
mScript.bindAllocation(mParams.mAlloc, Defines.ALLOC_PARAMS);
mScript.bindAllocation(mState.mAlloc, Defines.ALLOC_STATE);
mScript.bindAllocation(mAllocIconIds, Defines.ALLOC_ICON_IDS);
- mScript.bindAllocation(mAllocLabelIds, Defines.ALLOC_LABEL_IDS);
mRS.contextBindRootScript(mScript);
}
@@ -1071,16 +1065,15 @@ public class AllAppsView extends RSSurfaceView
mIconIds = new int[allocCount];
mAllocIconIds = Allocation.createSized(mRS, Element.USER_I32(mRS), allocCount);
- mLabels = new Allocation[count];
- mLabelIds = new int[allocCount];
- mAllocLabelIds = Allocation.createSized(mRS, Element.USER_I32(mRS), allocCount);
-
Element ie8888 = Element.RGBA_8888(mRS);
mState.iconCount = count;
+ long before = SystemClock.uptimeMillis();
for (int i=0; i < mState.iconCount; i++) {
createAppIconAllocations(i, list.get(i));
}
+ long after = SystemClock.uptimeMillis();
+ //Log.d(TAG, "createAppIconAllocations took " + (after-before) + "ms");
if (mHasSurface) {
for (int i=0; i < mState.iconCount; i++) {
uploadAppIcon(i, list.get(i));
@@ -1123,18 +1116,11 @@ public class AllAppsView extends RSSurfaceView
}
private void createAppIconAllocations(int index, ApplicationInfo item) {
- mIcons[index] = Allocation.createFromBitmap(mRS, item.iconBitmap,
- Element.RGBA_8888(mRS), true);
- frameBitmapAllocMips(mIcons[index], item.iconBitmap.getWidth(),
- item.iconBitmap.getHeight());
-
- mLabels[index] = Allocation.createFromBitmap(mRS, item.titleBitmap,
- Element.RGBA_8888(mRS), true);
- frameBitmapAllocMips(mLabels[index], item.titleBitmap.getWidth(),
- item.titleBitmap.getHeight());
+ Bitmap bitmap = item.iconBitmap;
+ mIcons[index] = Allocation.createFromBitmap(mRS, bitmap, Element.RGBA_8888(mRS), true);
+ frameBitmapAllocMips(mIcons[index], bitmap.getWidth(), bitmap.getHeight());
mIconIds[index] = mIcons[index].getID();
- mLabelIds[index] = mLabels[index].getID();
}
private void uploadAppIcon(int index, ApplicationInfo item) {
@@ -1145,7 +1131,6 @@ public class AllAppsView extends RSSurfaceView
+ " item=" + item);
}
mIcons[index].uploadToTexture(0);
- mLabels[index].uploadToTexture(0);
}
/**
@@ -1157,21 +1142,13 @@ public class AllAppsView extends RSSurfaceView
int[] iconIds = new int[count];
mAllocIconIds = Allocation.createSized(mRS, Element.USER_I32(mRS), count);
- Allocation[] labels = new Allocation[count];
- int[] labelIds = new int[count];
- mAllocLabelIds = Allocation.createSized(mRS, Element.USER_I32(mRS), count);
-
final int oldCount = mRollo.mState.iconCount;
System.arraycopy(mIcons, 0, icons, 0, oldCount);
System.arraycopy(mIconIds, 0, iconIds, 0, oldCount);
- System.arraycopy(mLabels, 0, labels, 0, oldCount);
- System.arraycopy(mLabelIds, 0, labelIds, 0, oldCount);
mIcons = icons;
mIconIds = iconIds;
- mLabels = labels;
- mLabelIds = labelIds;
}
/**
@@ -1183,8 +1160,6 @@ public class AllAppsView extends RSSurfaceView
System.arraycopy(mIcons, index, mIcons, dest, count);
System.arraycopy(mIconIds, index, mIconIds, dest, count);
- System.arraycopy(mLabels, index, mLabels, dest, count);
- System.arraycopy(mLabelIds, index, mLabelIds, dest, count);
createAppIconAllocations(index, item);
@@ -1206,16 +1181,12 @@ public class AllAppsView extends RSSurfaceView
System.arraycopy(mIcons, src, mIcons, index, count);
System.arraycopy(mIconIds, src, mIconIds, index, count);
- System.arraycopy(mLabels, src, mLabels, index, count);
- System.arraycopy(mLabelIds, src, mLabelIds, index, count);
mRollo.mState.iconCount--;
final int last = mState.iconCount;
mIcons[last] = null;
mIconIds[last] = 0;
- mLabels[last] = null;
- mLabelIds[last] = 0;
}
/**
@@ -1225,11 +1196,9 @@ public class AllAppsView extends RSSurfaceView
mRS.contextBindRootScript(null);
mAllocIconIds.data(mIconIds);
- mAllocLabelIds.data(mLabelIds);
if (mScript != null) { // this happens when we init it
mScript.bindAllocation(mAllocIconIds, Defines.ALLOC_ICON_IDS);
- mScript.bindAllocation(mAllocLabelIds, Defines.ALLOC_LABEL_IDS);
}
mState.save();
@@ -1344,7 +1313,7 @@ public class AllAppsView extends RSSurfaceView
ApplicationInfo info = mAllAppsList.get(index);
Bitmap selectionBitmap = mSelectionBitmap;
- Utilities.drawSelectedAllAppsBitmap(mSelectionCanvas,
+ Utilities.drawSelectedAllAppsBitmap(mSelectionCanvas, selectionBitmap,
selectionBitmap.getWidth(), selectionBitmap.getHeight(),
pressed == SELECTED_PRESSED, info.iconBitmap);
@@ -1399,10 +1368,6 @@ public class AllAppsView extends RSSurfaceView
Log.d(TAG, "mRollo.mIconIds.length=" + mIconIds.length);
}
Log.d(TAG, "mRollo.mIconIds=" + Arrays.toString(mIconIds));
- if (mLabelIds != null) {
- Log.d(TAG, "mRollo.mLabelIds.length=" + mLabelIds.length);
- }
- Log.d(TAG, "mRollo.mLabelIds=" + Arrays.toString(mLabelIds));
Log.d(TAG, "mRollo.mTouchXBorders=" + Arrays.toString(mTouchXBorders));
Log.d(TAG, "mRollo.mTouchYBorders=" + Arrays.toString(mTouchYBorders));
Log.d(TAG, "mRollo.mHasSurface=" + mHasSurface);
diff --git a/src/com/android/launcher2/AppInfoCache.java b/src/com/android/launcher2/AppInfoCache.java
index a2d98307f..e81168ede 100644
--- a/src/com/android/launcher2/AppInfoCache.java
+++ b/src/com/android/launcher2/AppInfoCache.java
@@ -168,10 +168,13 @@ public class AppInfoCache {
application.title = info.activityInfo.name;
}
+ // TODO: turn this on in froyo, not enough time for testing in mr3
+ //if (application.iconBitmap != null) {
+ // application.iconBitmap.recycle();
+ //}
application.iconBitmap = Utilities.createAllAppsBitmap(
- info.activityInfo.loadIcon(packageManager), context);
-
- application.titleBitmap = bubble.createTextBitmap(application.title.toString());
+ info.activityInfo.loadIcon(packageManager),
+ application.title.toString(), bubble, context);
}
}
diff --git a/src/com/android/launcher2/ApplicationInfo.java b/src/com/android/launcher2/ApplicationInfo.java
index 0fe84e731..ae0e219a0 100644
--- a/src/com/android/launcher2/ApplicationInfo.java
+++ b/src/com/android/launcher2/ApplicationInfo.java
@@ -37,11 +37,6 @@ class ApplicationInfo extends ItemInfo {
CharSequence title;
/**
- * A bitmap of the application's text in the bubble.
- */
- Bitmap titleBitmap;
-
- /**
* The intent used to start the application.
*/
Intent intent;
@@ -52,7 +47,7 @@ class ApplicationInfo extends ItemInfo {
Drawable icon;
/**
- * A bitmap version of the application icon.
+ * What we show in all apps, including the text.
*/
Bitmap iconBitmap;
@@ -149,9 +144,9 @@ class ApplicationInfo extends ItemInfo {
ArrayList<ApplicationInfo> list) {
Log.d(tag, label + " size=" + list.size());
for (ApplicationInfo info: list) {
- Log.d(tag, " title=\"" + info.title + "\" titleBitmap=" + info.titleBitmap
- + " icon=" + info.icon + " iconBitmap=" + info.iconBitmap
- + " filtered=" + info.filtered + " customIcon=" + info.customIcon);
+ Log.d(tag, " title=\"" + info.title + "\" icon=" + info.icon
+ + " iconBitmap=" + info.iconBitmap + " filtered=" + info.filtered
+ + " customIcon=" + info.customIcon);
}
}
}
diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java
index 55cb509bc..2dfba4317 100644
--- a/src/com/android/launcher2/Utilities.java
+++ b/src/com/android/launcher2/Utilities.java
@@ -52,6 +52,10 @@ final class Utilities {
private static int sIconTextureWidth = -1;
private static int sIconTextureHeight = -1;
+ private static int sTitleMargin = -1;
+ private static float sBlurRadius = -1;
+ private static Rect sIconTextureRect;
+
private static final Paint sPaint = new Paint();
private static final Paint sBlurPaint = new Paint();
private static final Paint sGlowColorPressedPaint = new Paint();
@@ -175,7 +179,8 @@ final class Utilities {
* Returns a bitmap suitable for the all apps view. The bitmap will be a power
* of two sized ARGB_8888 bitmap that can be used as a gl texture.
*/
- static Bitmap createAllAppsBitmap(Drawable icon, Context context) {
+ static Bitmap createAllAppsBitmap(Drawable icon, String title, BubbleText bubble,
+ Context context) {
synchronized (sCanvas) { // we share the statics :-(
if (sIconWidth == -1) {
initStatics(context);
@@ -217,8 +222,8 @@ final class Utilities {
}
// no intrinsic size --> use default size
- int textureWidth = sIconTextureWidth;
- int textureHeight = sIconTextureHeight;
+ final int textureWidth = sIconTextureWidth;
+ final int textureHeight = sIconTextureHeight;
final Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight,
Bitmap.Config.ARGB_8888);
@@ -226,7 +231,7 @@ final class Utilities {
canvas.setBitmap(bitmap);
final int left = (textureWidth-width) / 2;
- final int top = (textureHeight-height) / 2;
+ final int top = sIconTextureRect.top;
if (false) {
// draw a big box for the icon for debugging
@@ -242,12 +247,34 @@ final class Utilities {
icon.draw(canvas);
icon.setBounds(sOldBounds);
+ if (title != null) {
+ bubble.drawText(canvas, title);
+ }
+
return bitmap;
}
}
- static void drawSelectedAllAppsBitmap(Canvas dest, int destWidth, int destHeight,
- boolean pressed, Bitmap src) {
+ static Bitmap extractIconFromTexture(Bitmap src, Context context) {
+ synchronized (sCanvas) { // we share the statics :-(
+ if (sIconWidth == -1) {
+ initStatics(context);
+ }
+ final Bitmap bitmap = Bitmap.createBitmap(sIconWidth, sIconHeight,
+ Bitmap.Config.ARGB_8888);
+ final Canvas canvas = sCanvas;
+ canvas.setBitmap(bitmap);
+
+ Rect r = new Rect(0, 0, sIconWidth, sIconHeight);
+ canvas.drawColor(0, PorterDuff.Mode.CLEAR);
+ canvas.drawBitmap(src, sIconTextureRect, r, sEmptyPaint);
+
+ return bitmap;
+ }
+ }
+
+ static void drawSelectedAllAppsBitmap(Canvas dest, Bitmap destBitmap,
+ int destWidth, int destHeight, boolean pressed, Bitmap src) {
synchronized (sCanvas) { // we share the statics :-(
if (sIconWidth == -1) {
// We can't have gotten to here without src being initialized, which
@@ -257,12 +284,14 @@ final class Utilities {
}
dest.drawColor(0, PorterDuff.Mode.CLEAR);
-
+ dest.drawBitmap(src, sIconTextureRect, sIconTextureRect, sEmptyPaint);
+
int[] xy = new int[2];
- Bitmap mask = src.extractAlpha(sBlurPaint, xy);
+ Bitmap mask = destBitmap.extractAlpha(sBlurPaint, xy);
float px = (destWidth - src.getWidth()) / 2;
float py = (destHeight - src.getHeight()) / 2;
+ dest.drawColor(0, PorterDuff.Mode.CLEAR);
dest.drawBitmap(mask, px + xy[0], py + xy[1],
pressed ? sGlowColorPressedPaint : sGlowColorFocusedPaint);
@@ -341,6 +370,12 @@ final class Utilities {
sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);
sIconTextureWidth = sIconTextureHeight = roundToPow2(sIconWidth);
+ sTitleMargin = (int)(1 * density);
+ sBlurRadius = 5 * density;
+ final int left = (sIconTextureWidth-sIconWidth)/2;
+ final int top = (int)(sBlurRadius) + 1;
+ sIconTextureRect = new Rect(left, top, left+sIconWidth, top+sIconHeight);
+
sBlurPaint.setMaskFilter(new BlurMaskFilter(5 * density, BlurMaskFilter.Blur.NORMAL));
sGlowColorPressedPaint.setColor(0xffffc300);
sGlowColorPressedPaint.setMaskFilter(TableMaskFilter.CreateClipTable(0, 30));
@@ -364,60 +399,65 @@ final class Utilities {
private int mBitmapHeight;
BubbleText(Context context) {
- final Resources resources = context.getResources();
-
- final float scale = resources.getDisplayMetrics().density;
-
- final float paddingLeft = 5.0f * scale;
- final float paddingRight = 5.0f * scale;
- final float cellWidth = resources.getDimension(R.dimen.workspace_cell_width);
- final float bubbleWidth = cellWidth - paddingLeft - paddingRight;
- mBubblePadding = 3.0f * scale;
-
- RectF bubbleRect = mBubbleRect;
- bubbleRect.left = 0;
- bubbleRect.top = 0;
- bubbleRect.right = (int)(bubbleWidth+0.5f);
-
- mTextWidth = bubbleWidth - mBubblePadding - mBubblePadding;
-
- Paint rectPaint = new Paint();
- rectPaint.setColor(0xff000000);
- rectPaint.setAntiAlias(true);
-
- TextPaint textPaint = mTextPaint = new TextPaint();
- textPaint.setTypeface(Typeface.DEFAULT);
- textPaint.setTextSize(13*scale);
- textPaint.setColor(0xffffffff);
- textPaint.setAntiAlias(true);
- if (TEXT_BURN) {
- textPaint.setShadowLayer(8, 0, 0, 0xff000000);
- }
+ synchronized (sCanvas) { // we share the statics :-(
+ if (sIconWidth == -1) {
+ initStatics(context);
+ }
+ final Resources resources = context.getResources();
+
+ final float scale = resources.getDisplayMetrics().density;
+
+ final float paddingLeft = 5.0f * scale;
+ final float paddingRight = 5.0f * scale;
+ final float cellWidth = resources.getDimension(R.dimen.workspace_cell_width);
+ final float bubbleWidth = cellWidth - paddingLeft - paddingRight;
+ mBubblePadding = 3.0f * scale;
+
+ RectF bubbleRect = mBubbleRect;
+ bubbleRect.left = 0;
+ bubbleRect.top = 0;
+ bubbleRect.right = (int)(bubbleWidth+0.5f);
+
+ mTextWidth = bubbleWidth - mBubblePadding - mBubblePadding;
+
+ Paint rectPaint = new Paint();
+ rectPaint.setColor(0xff000000);
+ rectPaint.setAntiAlias(true);
+
+ TextPaint textPaint = mTextPaint = new TextPaint();
+ textPaint.setTypeface(Typeface.DEFAULT);
+ textPaint.setTextSize(13*scale);
+ //textPaint.setColor(0xff00ff00);
+ textPaint.setColor(0xffffffff);
+ textPaint.setAntiAlias(true);
+ if (TEXT_BURN) {
+ textPaint.setShadowLayer(8, 0, 0, 0xff000000);
+ }
- float ascent = -textPaint.ascent();
- float descent = textPaint.descent();
- float leading = 0.0f;//(ascent+descent) * 0.1f;
- mLeading = (int)(leading + 0.5f);
- mFirstLineY = (int)(leading + ascent + 0.5f);
- mLineHeight = (int)(leading + ascent + descent + 0.5f);
+ final int iconTop = (int)(sBlurRadius) + 1;
+ final int iconBottom = iconTop + sIconHeight;
- mBitmapWidth = roundToPow2((int)(mBubbleRect.width() + 0.5f));
- mBitmapHeight = roundToPow2((int)((MAX_LINES * mLineHeight) + leading + 0.5f));
+ float ascent = -textPaint.ascent();
+ float descent = textPaint.descent();
+ float leading = -1.0f;//(ascent+descent) * 0.1f;
+ mLeading = (int)(leading + 0.5f);
+ mFirstLineY = (int)(iconBottom + sTitleMargin + ascent + 0.5f);
+ mLineHeight = (int)(leading + ascent + descent + 0.5f);
- mBubbleRect.offsetTo((mBitmapWidth-mBubbleRect.width())/2, 0);
+ mBitmapWidth = roundToPow2((int)(mBubbleRect.width() + 0.5f));
+ mBitmapHeight = roundToPow2((int)((MAX_LINES * mLineHeight) + leading + 0.5f));
- if (false) {
- Log.d(TAG, "mBitmapWidth=" + mBitmapWidth + " mBitmapHeight="
- + mBitmapHeight + " w=" + ((int)(mBubbleRect.width() + 0.5f))
- + " h=" + ((int)((MAX_LINES * mLineHeight) + leading + 0.5f)));
+ mBubbleRect.offsetTo((mBitmapWidth-mBubbleRect.width())/2, 0);
+
+ if (false) {
+ Log.d(TAG, "mBitmapWidth=" + mBitmapWidth + " mBitmapHeight="
+ + mBitmapHeight + " w=" + ((int)(mBubbleRect.width() + 0.5f))
+ + " h=" + ((int)((MAX_LINES * mLineHeight) + leading + 0.5f)));
+ }
}
}
- /** You own the bitmap after this and you must call recycle on it. */
- Bitmap createTextBitmap(String text) {
- Bitmap b = Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(b);
-
+ void drawText(Canvas c, String text) {
StaticLayout layout = new StaticLayout(text, mTextPaint, (int)mTextWidth,
Alignment.ALIGN_CENTER, 1, 0, true);
int lineCount = layout.getLineCount();
@@ -438,8 +478,6 @@ final class Utilities {
c.drawText(text.substring(layout.getLineStart(i), layout.getLineEnd(i)),
x, y, mTextPaint);
}
-
- return b;
}
private int height(int lineCount) {