diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/ui/IconButton.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/ui/IconButton.java | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/src/com/android/gallery3d/filtershow/ui/IconButton.java b/src/com/android/gallery3d/filtershow/ui/IconButton.java deleted file mode 100644 index e7087bdfe..000000000 --- a/src/com/android/gallery3d/filtershow/ui/IconButton.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.gallery3d.filtershow.ui; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.drawable.BitmapDrawable; -import android.util.AttributeSet; -import android.widget.Button; - -import com.android.gallery3d.filtershow.tools.IconFactory; -import com.android.photos.data.GalleryBitmapPool; - -/** - * Class of buttons with both an image icon and text. - */ -public class IconButton extends Button { - - private Bitmap mImageMirror = null; - private Bitmap mIcon = null; - - private boolean stale_icon = true; - - public IconButton(Context context) { - this(context, null); - } - - public IconButton(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public IconButton(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - BitmapDrawable ic = (BitmapDrawable) getCompoundDrawables()[1]; - - if (ic != null) { - mImageMirror = ic.getBitmap(); - } - } - - /** - * Set the image that the button icon will use. The image bitmap will be scaled - * and cropped into the largest bitmap with dimensions given by getGoodIconSideSize() - * that will fit cleanly within the IconButton's layout. - * - * @param image image that icon will be set to before next draw. - */ - public void setIcon(Bitmap image) { - mImageMirror = image; - stale_icon = true; - invalidate(); - } - - /** - * Finds a side lengths for the icon that fits within the button. - * Only call after layout. The default implementation returns the best - * side lengths for a square icon. - * <p> - * Override this to make non-square icons or icons with different padding - * constraints. - * - * @return an array of ints representing the icon dimensions [ width, height ] - */ - protected int[] getGoodIconSideSize() { - Paint p = getPaint(); - Rect bounds = new Rect(); - // find text bounds - String s = getText().toString(); - p.getTextBounds(s, 0, s.length(), bounds); - - int inner_padding = 2 * getCompoundDrawablePadding(); - - // find total vertical space available for the icon - int vert = getHeight() - getPaddingTop() - getPaddingBottom() - bounds.height() - - inner_padding; - - // find total horizontal space available for the icon - int horiz = getWidth() - getPaddingLeft() - getPaddingRight() - inner_padding; - - int defaultSize = Math.min(vert, horiz); - return new int[] { defaultSize, defaultSize }; - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - if (w != oldw || h != oldh) { - stale_icon = true; - } - } - - @Override - protected void onDraw(Canvas canvas) { - if (stale_icon && mImageMirror != null && mImageMirror.getHeight() > 0 - && mImageMirror.getWidth() > 0) { - stale_icon = !makeAndSetIcon(mImageMirror); - } - super.onDraw(canvas); - } - - // Internal methods - - /** - * Creates and sets button icon. Only call after layout. - * - * @param image bitmap to use as icon - */ - private boolean makeAndSetIcon(Bitmap image) { - int[] sizes = getGoodIconSideSize(); - if (sizes != null && sizes.length >= 2 && sizes[0] > 0 && sizes[1] > 0) { - return setImageIcon(makeImageIcon(image, sizes[0], sizes[1])); - } - return false; - } - - /** - * Sets icon. - * - * @param image bitmap to set the icon to. - */ - private boolean setImageIcon(Bitmap image) { - if (image == null) { - return false; - } - if(mIcon != null && mIcon.getConfig() == Bitmap.Config.ARGB_8888) { - GalleryBitmapPool.getInstance().put(mIcon); - mIcon = null; - } - mIcon = image; - this.setCompoundDrawablesWithIntrinsicBounds(null, - new BitmapDrawable(getResources(), mIcon), null, null); - return true; - } - - /** - * Generate an icon bitmap from a given bitmap. - * - * @param image bitmap to use as button icon - * @param width icon width - * @param height icon height - * @return the scaled/cropped icon bitmap - */ - private Bitmap makeImageIcon(Bitmap image, int width, int height) { - if (image == null || image.getHeight() < 1 || image.getWidth() < 1 || - width < 1 || height < 1) { - throw new IllegalArgumentException("input is null, or has invalid dimensions"); - } - Bitmap icon = null; - icon = GalleryBitmapPool.getInstance().get(width, height); - if (icon == null) { - icon = IconFactory.createIcon(image, width, height, false); - } else { - assert(icon.getWidth() == width && icon.getHeight() == height); - icon.eraseColor(Color.TRANSPARENT); - IconFactory.drawIcon(icon, image, false); - } - return icon; - } -} |