diff options
| author | Ruben Brunk <rubenbrunk@google.com> | 2012-12-19 10:47:49 -0800 |
|---|---|---|
| committer | Ruben Brunk <rubenbrunk@google.com> | 2013-01-11 17:52:36 -0800 |
| commit | 2e1a644f97a81931bf9b53d8bdf089bb7d4b1048 (patch) | |
| tree | 2d9109c6ffba174f07f84fc599f2fb05441d958a /src | |
| parent | 91a2d2ff465a7a2347e5b72320216ea04aec2607 (diff) | |
| download | android_packages_apps_Gallery2-2e1a644f97a81931bf9b53d8bdf089bb7d4b1048.tar.gz android_packages_apps_Gallery2-2e1a644f97a81931bf9b53d8bdf089bb7d4b1048.tar.bz2 android_packages_apps_Gallery2-2e1a644f97a81931bf9b53d8bdf089bb7d4b1048.zip | |
Refactoring button class. Minor bug fixes.
Bug: 7875246
Bug: 7459118
Change-Id: Ic1099a7ae0feeeb16c8be3035f9726805149666e
Diffstat (limited to 'src')
13 files changed, 524 insertions, 573 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 8ac6f8207..b89ab81cd 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -22,6 +22,7 @@ import android.app.Activity; import android.app.ProgressDialog; import android.app.WallpaperManager; import android.content.ContentValues; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; @@ -38,6 +39,7 @@ import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.Display; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -52,6 +54,7 @@ import android.widget.SeekBar; import android.widget.ShareActionProvider; import android.widget.ShareActionProvider.OnShareTargetSelectedListener; import android.widget.Toast; +import android.text.TextUtils; import com.android.gallery3d.R; import com.android.gallery3d.data.LocalAlbum; @@ -63,23 +66,21 @@ import com.android.gallery3d.filtershow.filters.ImageFilterFx; import com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; import com.android.gallery3d.filtershow.filters.ImageFilterRS; import com.android.gallery3d.filtershow.filters.ImageFilterRedEye; -import com.android.gallery3d.filtershow.imageshow.ImageBorder; import com.android.gallery3d.filtershow.imageshow.ImageCrop; import com.android.gallery3d.filtershow.imageshow.ImageDraw; import com.android.gallery3d.filtershow.imageshow.ImageFlip; import com.android.gallery3d.filtershow.imageshow.ImageRedEyes; import com.android.gallery3d.filtershow.imageshow.ImageRotate; import com.android.gallery3d.filtershow.imageshow.ImageShow; -import com.android.gallery3d.filtershow.imageshow.ImageSmallBorder; -import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; import com.android.gallery3d.filtershow.imageshow.ImageStraighten; import com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; import com.android.gallery3d.filtershow.imageshow.ImageZoom; import com.android.gallery3d.filtershow.presets.ImagePreset; import com.android.gallery3d.filtershow.provider.SharedImageProvider; import com.android.gallery3d.filtershow.tools.SaveCopyTask; +import com.android.gallery3d.filtershow.ui.FilterIconButton; +import com.android.gallery3d.filtershow.ui.IconButton; import com.android.gallery3d.filtershow.ui.FramedTextButton; -import com.android.gallery3d.filtershow.ui.ImageButtonTitle; import com.android.gallery3d.filtershow.ui.ImageCurves; import com.android.gallery3d.filtershow.ui.Spline; import com.android.gallery3d.util.GalleryUtils; @@ -104,7 +105,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private ImageLoader mImageLoader = null; private ImageShow mImageShow = null; private ImageCurves mImageCurves = null; - private ImageBorder mImageBorders = null; private ImageRedEyes mImageRedEyes = null; private ImageDraw mImageDraw = null; private ImageStraighten mImageStraighten = null; @@ -126,7 +126,12 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private ImageButton mGeometryButton = null; private ImageButton mColorsButton = null; - private ImageSmallFilter mCurrentImageSmallFilter = null; + private LinearLayout listColors = null; + private LinearLayout listFilters = null; + private LinearLayout listBorders = null; + + private ImageFilter mCurrentFilter = null; + private static final int SELECT_PICTURE = 1; private static final String LOGTAG = "FilterShowActivity"; protected static final boolean ANIMATE_PANELS = true; @@ -148,8 +153,9 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private static final int SEEK_BAR_MAX = 600; private LoadBitmapTask mLoadBitmapTask; - private ImageSmallFilter mNullFxFilter; - private ImageSmallFilter mNullBorderFilter; + private FilterIconButton mNullFxFilter; + private FilterIconButton mNullBorderFilter; + private int mIconSeedSize = 140; @Override public void onCreate(Bundle savedInstanceState) { @@ -158,8 +164,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, ImageFilterRS.setRenderScriptContext(this); ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen)); - ImageSmallFilter.setDefaultBackgroundColor(getResources().getColor( - R.color.background_main_toolbar)); // TODO: get those values from XML. ImageZoom.setZoomedSize(getPixelsFromDip(256)); FramedTextButton.setTextSize((int) getPixelsFromDip(14)); @@ -170,10 +174,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); ImageShow.setOriginalText(getResources().getString(R.string.original_picture_text)); - ImageButtonTitle.setTextSize((int) getPixelsFromDip(12)); - ImageButtonTitle.setTextPadding((int) getPixelsFromDip(10)); - ImageSmallFilter.setMargin((int) getPixelsFromDip(3)); - ImageSmallFilter.setTextMargin((int) getPixelsFromDip(4)); + mIconSeedSize = getResources().getDimensionPixelSize(R.dimen.thumbnail_size); + Drawable curveHandle = getResources().getDrawable(R.drawable.camera_crop); int curveHandleSize = (int) getResources().getDimension(R.dimen.crop_indicator_size); Spline.setCurveHandle(curveHandle, curveHandleSize); @@ -194,13 +196,12 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mImageLoader = new ImageLoader(this, getApplicationContext()); - LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); - LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); - LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx); + listFilters = (LinearLayout) findViewById(R.id.listFilters); + listBorders = (LinearLayout) findViewById(R.id.listBorders); + listColors = (LinearLayout) findViewById(R.id.listColorsFx); mImageShow = (ImageShow) findViewById(R.id.imageShow); mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); - mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); mImageZoom = (ImageZoom) findViewById(R.id.imageZoom); mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); @@ -215,7 +216,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); mImageViews.add(mImageShow); mImageViews.add(mImageCurves); - mImageViews.add(mImageBorders); mImageViews.add(mImageStraighten); mImageViews.add(mImageZoom); mImageViews.add(mImageCrop); @@ -251,8 +251,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mImageShow.setImageLoader(mImageLoader); mImageCurves.setImageLoader(mImageLoader); mImageCurves.setMaster(mImageShow); - mImageBorders.setImageLoader(mImageLoader); - mImageBorders.setMaster(mImageShow); mImageStraighten.setImageLoader(mImageLoader); mImageStraighten.setMaster(mImageShow); mImageZoom.setImageLoader(mImageLoader); @@ -275,7 +273,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mPanelController.addImageView(findViewById(R.id.imageShow)); mPanelController.addImageView(findViewById(R.id.imageCurves)); - mPanelController.addImageView(findViewById(R.id.imageBorder)); mPanelController.addImageView(findViewById(R.id.imageStraighten)); mPanelController.addImageView(findViewById(R.id.imageCrop)); mPanelController.addImageView(findViewById(R.id.imageRotate)); @@ -301,21 +298,9 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, FiltersManager.addFilters(filters, mImageLoader); for (ImageFilter filter : filters) { - ImageSmallFilter fView = new ImageSmallFilter(this); - filter.setParameter(filter.getPreviewParameter()); + filter.setParameter(filter.getDefaultParameter()); filter.setName(getString(filter.getTextId())); - fView.setImageFilter(filter); - fView.setController(this); - fView.setImageLoader(mImageLoader); - fView.setId(filter.getButtonId()); - if (filter.getOverlayBitmaps() != 0) { - Bitmap bitmap = BitmapFactory.decodeResource(getResources(), - filter.getOverlayBitmaps()); - fView.setOverlayBitmap(bitmap); - } - mPanelController.addComponent(mColorsButton, fView); - mPanelController.addFilter(filter); - listColors.addView(fView); + setupFilterButton(filter, listColors, mColorsButton); } mPanelController.addFilter(new ImageFilterRedEye()); @@ -448,6 +433,36 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, cannotLoadImage(); } + mImageShow.requestFilteredImages(); + Bitmap bmap = mImageShow.getFilteredImage(); + if (bmap != null && bmap.getWidth() > 0 && bmap.getHeight() > 0) { + float w = bmap.getWidth(); + float h = bmap.getHeight(); + float f = mIconSeedSize / Math.min(w, h); + w = w * f; + h = h * f; + bmap = Bitmap.createScaledBitmap(bmap, (int) w, (int) h, true); + + int num_colors_buttons = listColors.getChildCount(); + for (int i = 0; i < num_colors_buttons; i++) { + FilterIconButton b = (FilterIconButton) listColors.getChildAt(i); + + b.setIcon(bmap); + } + int num_filters_buttons = listFilters.getChildCount(); + for (int i = 0; i < num_filters_buttons; i++) { + FilterIconButton b = (FilterIconButton) listFilters.getChildAt(i); + + b.setIcon(bmap); + } + int num_borders_buttons = listBorders.getChildCount(); + for (int i = 0; i < num_borders_buttons; i++) { + FilterIconButton b = (FilterIconButton) listBorders.getChildAt(i); + + b.setIcon(bmap); + } + + } mLoadBitmapTask = null; super.onPostExecute(result); } @@ -648,6 +663,23 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mSaveButton.setEnabled(enable); } + public FilterIconButton setupFilterButton(ImageFilter filter, LinearLayout panel, View button) { + LayoutInflater inflater = + (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, + panel, false); + String text = filter.getName(); + if (filter instanceof ImageFilterBorder || filter instanceof ImageFilterParametricBorder) { + text = ""; + } + icon.setup(text, filter, this, panel); + icon.setId(filter.getButtonId()); + mPanelController.addComponent(button, icon); + mPanelController.addFilter(filter); + panel.addView(icon); + return icon; + } + private void fillListImages(LinearLayout listFilters) { // TODO: use listview // TODO: load the filters straight from the filesystem @@ -681,34 +713,21 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty preset.setImageLoader(mImageLoader); - mNullFxFilter = new ImageSmallFilter(this); - - mNullFxFilter.setSelected(true); - mCurrentImageSmallFilter = mNullFxFilter; - - mNullFxFilter.setImageFilter(new ImageFilterFx(null, getString(R.string.none))); - - mNullFxFilter.setController(this); - mNullFxFilter.setImageLoader(mImageLoader); - listFilters.addView(mNullFxFilter); - ImageSmallFilter previousFilter = mNullFxFilter; BitmapFactory.Options o = new BitmapFactory.Options(); o.inScaled = false; for (int i = 0; i < drawid.length; i++) { Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); - fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i])); + fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i]), fxNameid[i]); } - ImageSmallFilter filter; + + ImageFilterFx nullFilter = new ImageFilterFx(null, getString(R.string.none), R.string.none); + mNullFxFilter = setupFilterButton(nullFilter, listFilters, mFxButton); + mNullFxFilter.setSelected(true); + for (int i = 0; i < p; i++) { - filter = new ImageSmallFilter(this); - filter.setImageFilter(fxArray[i]); - filter.setController(this); - filter.setNulfilter(mNullFxFilter); - filter.setImageLoader(mImageLoader); - listFilters.addView(filter); - previousFilter = filter; + setupFilterButton(fxArray[i], listFilters, mFxButton); } // Default preset (original) @@ -743,22 +762,13 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, borders[p++] = new ImageFilterParametricBorder(creamColor, mImageBorderSize, mImageBorderSize); - ImageSmallFilter previousFilter = null; for (int i = 0; i < p; i++) { - ImageSmallBorder filter = new ImageSmallBorder(this); - if (i == 0) { // save the first to reset it - mNullBorderFilter = filter; - } else { - filter.setNulfilter(mNullBorderFilter); - } borders[i].setName(getString(R.string.borders)); - filter.setImageFilter(borders[i]); - filter.setController(this); - filter.setBorder(true); - filter.setImageLoader(mImageLoader); - filter.setShowTitle(false); - listBorders.addView(filter); - previousFilter = filter; + FilterIconButton b = setupFilterButton(borders[i], listBorders, mBorderButton); + if (i == 0) { + mNullBorderFilter = b; + mNullBorderFilter.setSelected(true); + } } } @@ -901,10 +911,13 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, invalidateOptionsMenu(); } - void resetHistory() { + public void dispatchNullFilterClick() { mNullFxFilter.onClick(mNullFxFilter); mNullBorderFilter.onClick(mNullBorderFilter); + } + void resetHistory() { + dispatchNullFilterClick(); HistoryAdapter adapter = mImageShow.getHistory(); adapter.reset(); ImagePreset original = new ImagePreset(adapter.getItem(0)); @@ -946,43 +959,16 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, r.getDisplayMetrics()); } - public void useImagePreset(ImageSmallFilter imageSmallFilter, ImagePreset preset) { - if (preset == null) { - return; - } - - if (mCurrentImageSmallFilter != null) { - mCurrentImageSmallFilter.setSelected(false); - } - mCurrentImageSmallFilter = imageSmallFilter; - mCurrentImageSmallFilter.setSelected(true); - - ImagePreset copy = new ImagePreset(preset); - mImageShow.setImagePreset(copy); - if (preset.isFx()) { - // if it's an FX we rest the curve adjustment too - mImageCurves.resetCurve(); - } - invalidateViews(); - } - - public void useImageFilter(ImageSmallFilter imageSmallFilter, ImageFilter imageFilter, - boolean setBorder) { - if (imageFilter == null) { + public void useFilter(ImageFilter filter) { + if (mCurrentFilter == filter) { return; } - - if (mCurrentImageSmallFilter != null) { - mCurrentImageSmallFilter.setSelected(false); - } - mCurrentImageSmallFilter = imageSmallFilter; - mCurrentImageSmallFilter.setSelected(true); - + mCurrentFilter = filter; ImagePreset oldPreset = mImageShow.getImagePreset(); ImagePreset copy = new ImagePreset(oldPreset); // TODO: use a numerical constant instead. - copy.add(imageFilter); + copy.add(filter); mImageShow.setImagePreset(copy); invalidateViews(); @@ -1020,7 +1006,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private boolean outputted = false; public void saveImage() { - // boolean outputted = false; if (mCropExtras != null) { if (mCropExtras.getExtraOutput() != null) { mSaveToExtraUri = true; diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java index c7b294e56..12fe5faea 100644 --- a/src/com/android/gallery3d/filtershow/PanelController.java +++ b/src/com/android/gallery3d/filtershow/PanelController.java @@ -29,8 +29,9 @@ import com.android.gallery3d.filtershow.filters.ImageFilter; import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet; import com.android.gallery3d.filtershow.imageshow.ImageCrop; import com.android.gallery3d.filtershow.imageshow.ImageShow; -import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; import com.android.gallery3d.filtershow.presets.ImagePreset; +import com.android.gallery3d.filtershow.ui.FilterIconButton; +import com.android.gallery3d.filtershow.ui.FramedTextButton; import java.util.HashMap; import java.util.Vector; @@ -403,6 +404,7 @@ public class PanelController implements OnClickListener { return filter; } + // TODO: remove this. public void ensureFilter(String name) { ImagePreset preset = getImagePreset(); ImageFilter filter = preset.getFilter(name); @@ -433,7 +435,14 @@ public class PanelController implements OnClickListener { } public void showComponent(View view) { - if (mUtilityPanel != null && !mUtilityPanel.selected()) { + + boolean doPanelTransition = true; + if (view instanceof FilterIconButton) { + ImageFilter f = ((FilterIconButton) view).getImageFilter(); + doPanelTransition = f.showUtilityPanel(); + } + + if (mUtilityPanel != null && !mUtilityPanel.selected() && doPanelTransition ) { Panel current = mPanels.get(mCurrentPanel); ViewPropertyAnimator anim1 = current.unselect(-1, VERTICAL_MOVE); anim1.start(); @@ -448,8 +457,8 @@ public class PanelController implements OnClickListener { } mUtilityPanel.hideAccessoryViews(); - if (view instanceof ImageSmallFilter) { - ImageSmallFilter component = (ImageSmallFilter) view; + if (view instanceof FilterIconButton) { + FilterIconButton component = (FilterIconButton) view; ImageFilter filter = component.getImageFilter(); if (filter.getEditingViewId() != 0) { mCurrentImage = showImageView(filter.getEditingViewId()); @@ -460,7 +469,9 @@ public class PanelController implements OnClickListener { mCurrentImage.openUtilityPanel(mUtilityPanel.mAccessoryViewList); } mUtilityPanel.setShowParameter(filter.showParameterValue()); - ensureFilter(ename); + if (filter != null) { + mMasterImage.setCurrentFilter(filter); + } mCurrentImage.select(); } return; diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java index b8f0cf84f..46e159aea 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java @@ -76,6 +76,10 @@ public class ImageFilter implements Cloneable { return true; } + public boolean showUtilityPanel() { + return true; + } + @Override public ImageFilter clone() throws CloneNotSupportedException { ImageFilter filter = (ImageFilter) super.clone(); @@ -114,6 +118,18 @@ public class ImageFilter implements Cloneable { return bitmap; } + /** + * Called on small bitmaps to create button icons for each filter. + * Override this to provide filter-specific button icons. + */ + public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { + int param = getParameter(); + setParameter(getPreviewParameter()); + bitmap = apply(bitmap, scaleFactor, highQuality); + setParameter(param); + return bitmap; + } + public int getParameter() { return mParameter; } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java index 1d198e45c..4fe308294 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java @@ -21,7 +21,11 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import com.android.gallery3d.R; + public class ImageFilterBorder extends ImageFilter { + private static final float NINEPATCH_ICON_SCALING = 10; + private static final float BITMAP_ICON_SCALING = 1 / 3.0f; Drawable mNinePatch = null; @Override @@ -40,12 +44,32 @@ public class ImageFilterBorder extends ImageFilter { @Override public boolean isNil() { if (mNinePatch == null) { - return true; + return true; } return false; } @Override + public int getTextId() { + return R.string.borders; + } + + @Override + public boolean showParameterValue() { + return false; + } + + @Override + public boolean showEditingControls() { + return false; + } + + @Override + public boolean showUtilityPanel() { + return false; + } + + @Override public boolean same(ImageFilter filter) { boolean isBorderFilter = super.same(filter); if (!isBorderFilter) { @@ -66,21 +90,34 @@ public class ImageFilterBorder extends ImageFilter { mNinePatch = ninePatch; } - @Override - public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - if (mNinePatch == null) { - return bitmap; - } - + public Bitmap applyHelper(Bitmap bitmap, float scale1, float scale2 ) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); - - float scale = scaleFactor * 2.0f; - Rect bounds = new Rect(0, 0, (int) (w / scale), (int) (h / scale)); + Rect bounds = new Rect(0, 0, (int) (w * scale1), (int) (h * scale1)); Canvas canvas = new Canvas(bitmap); - canvas.scale(scale, scale); + canvas.scale(scale2, scale2); mNinePatch.setBounds(bounds); mNinePatch.draw(canvas); return bitmap; } + + @Override + public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { + if (mNinePatch == null) { + return bitmap; + } + float scale2 = scaleFactor * 2.0f; + float scale1 = 1 / scale2; + return applyHelper(bitmap, scale1, scale2); + } + + @Override + public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { + if (mNinePatch == null) { + return bitmap; + } + float scale1 = NINEPATCH_ICON_SCALING; + float scale2 = BITMAP_ICON_SCALING; + return applyHelper(bitmap, scale1, scale2); + } } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDownsample.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDownsample.java index 60a18b701..784028a8d 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDownsample.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDownsample.java @@ -17,12 +17,14 @@ package com.android.gallery3d.filtershow.filters; import android.graphics.Bitmap; +import android.graphics.Canvas; import android.graphics.Rect; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.cache.ImageLoader; public class ImageFilterDownsample extends ImageFilter { + private static final int ICON_DOWNSAMPLE_FRACTION = 8; private ImageLoader mImageLoader; public ImageFilterDownsample(ImageLoader loader) { @@ -63,7 +65,7 @@ public class ImageFilterDownsample extends ImageFilter { if (p > 0 && p < 100) { // scale preview to same size as the resulting bitmap from a "save" - int newWidth = orig_w * p / 100; + int newWidth = orig_w * p / 100; int newHeight = orig_h * p / 100; // only scale preview if preview isn't already scaled enough @@ -78,4 +80,17 @@ public class ImageFilterDownsample extends ImageFilter { } return bitmap; } + + @Override + public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + Bitmap ret = Bitmap.createScaledBitmap(bitmap, w / ICON_DOWNSAMPLE_FRACTION, h + / ICON_DOWNSAMPLE_FRACTION, false); + Rect dst = new Rect(0, 0, w, h); + Rect src = new Rect(0, 0, w / ICON_DOWNSAMPLE_FRACTION, h / ICON_DOWNSAMPLE_FRACTION); + Canvas c = new Canvas(bitmap); + c.drawBitmap(ret, src, dst, null); + return bitmap; + } } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java index 04d764100..345202fe6 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java @@ -21,10 +21,18 @@ import android.graphics.Bitmap; public class ImageFilterFx extends ImageFilter { private static final String TAG = "ImageFilterFx"; Bitmap fxBitmap; - public ImageFilterFx(Bitmap fxBitmap,String name) { + int mNameResource = 0; + + public ImageFilterFx(Bitmap fxBitmap, String name, int nameResource) { setFilterType(TYPE_FX); mName = name; this.fxBitmap = fxBitmap; + mNameResource = nameResource; + } + + @Override + public int getTextId() { + return mNameResource; } @Override @@ -42,6 +50,21 @@ public class ImageFilterFx extends ImageFilter { return true; } + @Override + public boolean showParameterValue() { + return false; + } + + @Override + public boolean showEditingControls() { + return false; + } + + @Override + public boolean showUtilityPanel() { + return false; + } + native protected void nativeApplyFilter(Bitmap bitmap, int w, int h,Bitmap fxBitmap, int fxw, int fxh); @Override diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterParametricBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterParametricBorder.java index ade3cb26b..681eb1221 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterParametricBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterParametricBorder.java @@ -23,6 +23,8 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; +import com.android.gallery3d.R; + public class ImageFilterParametricBorder extends ImageFilter { private int mBorderColor = Color.WHITE; private int mBorderSize = 10; @@ -33,6 +35,26 @@ public class ImageFilterParametricBorder extends ImageFilter { mName = "Border"; } + @Override + public int getTextId() { + return R.string.borders; + } + + @Override + public boolean showParameterValue() { + return false; + } + + @Override + public boolean showEditingControls() { + return false; + } + + @Override + public boolean showUtilityPanel() { + return false; + } + public ImageFilterParametricBorder(int color, int size, int radius) { setBorder(color, size, radius); setFilterType(TYPE_BORDER); @@ -78,15 +100,11 @@ public class ImageFilterParametricBorder extends ImageFilter { mBorderCornerRadius = radius; } - @Override - public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - Canvas canvas = new Canvas(bitmap); + private void applyHelper(Canvas canvas, int w, int h) { Path border = new Path(); border.moveTo(0, 0); - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - float bs = mBorderSize / 100.0f * bitmap.getWidth(); - float r = mBorderCornerRadius / 100.0f * bitmap.getWidth(); + float bs = mBorderSize / 100.0f * w; + float r = mBorderCornerRadius / 100.0f * w; border.lineTo(0, h); border.lineTo(w, h); border.lineTo(w, 0); @@ -98,6 +116,19 @@ public class ImageFilterParametricBorder extends ImageFilter { paint.setAntiAlias(true); paint.setColor(mBorderColor); canvas.drawPath(border, paint); + } + + @Override + public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { + Canvas canvas = new Canvas(bitmap); + applyHelper(canvas, bitmap.getWidth(), bitmap.getHeight()); + return bitmap; + } + + @Override + public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { + Canvas canvas = new Canvas(bitmap); + applyHelper(canvas, bitmap.getWidth() * 4, bitmap.getHeight() * 4); return bitmap; } diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageBorder.java b/src/com/android/gallery3d/filtershow/imageshow/ImageBorder.java deleted file mode 100644 index 0977d7d90..000000000 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageBorder.java +++ /dev/null @@ -1,55 +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.imageshow; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.util.AttributeSet; - -public class ImageBorder extends ImageSlave { - Paint gPaint = new Paint(); - - public ImageBorder(Context context) { - super(context); - } - - public ImageBorder(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public boolean showTitle() { - return false; - } - - @Override - public void onDraw(Canvas canvas) { - super.onDraw(canvas); - - /* - * gPaint.setAntiAlias(true); gPaint.setFilterBitmap(true); - * gPaint.setDither(true); // Bitmap bmp = - * BitmapFactory.decodeResource(getResources(), // - * R.drawable.border_scratch); // canvas.drawBitmap(bmp, new Rect(0, 0, - * bmp.getWidth(), // bmp.getHeight()), mImageBounds, new Paint()); if - * (mImageBounds != null) { NinePatchDrawable npd = (NinePatchDrawable) - * getContext() .getResources().getDrawable(R.drawable.border_scratch2); - * npd.setBounds(mImageBounds); npd.draw(canvas); } - */ - } -} diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java deleted file mode 100644 index d6d3c86d4..000000000 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java +++ /dev/null @@ -1,84 +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.imageshow; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Region; -import android.util.AttributeSet; - -public class ImageSmallBorder extends ImageSmallFilter { - - // TODO: move this to xml. - protected final int mSelectedBackgroundColor = Color.WHITE; - protected final int mInnerBorderColor = Color.BLACK; - protected final int mInnerBorderWidth = 2; - protected final float mImageScaleFactor = 3.5f; - - public ImageSmallBorder(Context context) { - super(context); - } - - public ImageSmallBorder(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void onDraw(Canvas canvas) { - requestFilteredImages(); - canvas.drawColor(mBackgroundColor); - // TODO: simplify & make faster... - RectF border = new RectF(mMargin, 2*mMargin, getWidth() - mMargin - 1, getWidth()); - - if (mIsSelected) { - mPaint.setColor(mSelectedBackgroundColor); - canvas.drawRect(0, mMargin, getWidth(), getWidth() + mMargin, mPaint); - } - - mPaint.setColor(mInnerBorderColor); - mPaint.setStrokeWidth(mInnerBorderWidth); - Path path = new Path(); - path.addRect(border, Path.Direction.CCW); - mPaint.setStyle(Paint.Style.STROKE); - canvas.drawPath(path, mPaint); - mPaint.setStyle(Paint.Style.FILL_AND_STROKE); - canvas.save(); - canvas.clipRect(mMargin + 1, 2*mMargin, getWidth() - mMargin - 2, getWidth() - 1, - Region.Op.INTERSECT); - canvas.translate(mMargin + 1, 2*mMargin + 1); - canvas.scale(mImageScaleFactor, mImageScaleFactor); - Rect d = new Rect(0, 0, getWidth(), getWidth()); - drawImage(canvas, getFilteredImage(), d); - canvas.restore(); - } - - @Override - public void drawImage(Canvas canvas, Bitmap image, Rect d) { - if (image != null) { - int iw = image.getWidth(); - int ih = image.getHeight(); - Rect s = new Rect(0, 0, iw, iw); - canvas.drawBitmap(image, s, d, mPaint); - } - } -} diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java deleted file mode 100644 index 2a3ee2856..000000000 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java +++ /dev/null @@ -1,233 +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.imageshow; - -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.util.AttributeSet; -import android.view.View; - -import com.android.gallery3d.filtershow.FilterShowActivity; -import com.android.gallery3d.filtershow.filters.ImageFilter; -import com.android.gallery3d.filtershow.presets.ImagePreset; - -public class ImageSmallFilter extends ImageShow implements View.OnClickListener { - - private static final String LOGTAG = "ImageSmallFilter"; - private FilterShowActivity mController = null; - protected ImageFilter mImageFilter = null; - private boolean mShowTitle = true; - private boolean mSetBorder = false; - protected final Paint mPaint = new Paint(); - protected boolean mIsSelected = false; - - // TODO: move this to xml. - protected static int mMargin = 12; - protected static int mTextMargin = 8; - protected static int mBackgroundColor = Color.BLUE; - protected final int mSelectedBackgroundColor = Color.WHITE; - protected final int mTextColor = Color.WHITE; - private ImageSmallFilter mNullFilter; - - private Bitmap mOverlayBitmap = null; - private final int mOverlayTint = Color.argb(100, 0, 0, 0); - - public void setOverlayBitmap(Bitmap bitmap){ - mOverlayBitmap = bitmap; - } - - public static void setMargin(int value) { - mMargin = value; - } - - public static void setTextMargin(int value) { - mTextMargin = value; - } - - public static void setDefaultBackgroundColor(int value) { - mBackgroundColor = value; - } - - public ImageSmallFilter(Context context, AttributeSet attrs) { - super(context, attrs); - setOnClickListener(this); - } - - public ImageSmallFilter(Context context) { - super(context); - setOnClickListener(this); - } - - public void setImageFilter(ImageFilter filter) { - mImageFilter = filter; - mImagePreset = new ImagePreset(); - mImagePreset.setName(filter.getName()); - filter.setImagePreset(mImagePreset); - mImagePreset.add(mImageFilter); - } - - public ImageFilter getImageFilter() { - return mImageFilter; - } - - @Override - public void setSelected(boolean value) { - if (mIsSelected != value) { - invalidate(); - } - mIsSelected = value; - } - - public void setBorder(boolean value) { - mSetBorder = value; - } - - public void setController(FilterShowActivity activity) { - mController = activity; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int parentWidth = MeasureSpec.getSize(widthMeasureSpec); - int parentHeight = MeasureSpec.getSize(heightMeasureSpec); - int h = mTextSize + mTextPadding; - setMeasuredDimension(parentHeight - h, parentHeight); - } - - /** - * Setting the nullFilter implies that the behavior of the button is toggle - * - * @param nullFilter - */ - public void setNulfilter(ImageSmallFilter nullFilter) { - mNullFilter = nullFilter; - } - - @Override - public void onClick(View v) { - if (mController != null) { - if (mImageFilter != null) { - if (mIsSelected && mNullFilter != null) { - mNullFilter.onClick(v); - } - else { - mController.useImageFilter(this, mImageFilter, mSetBorder); - } - } else if (mImagePreset != null) { - if (mIsSelected && mNullFilter != null) { - mNullFilter.onClick(v); - } - else { - mController.useImagePreset(this, mImagePreset); - } - } - } - } - - @Override - public boolean updateGeometryFlags() { - // We don't want to warn listeners here that the image size has changed, because - // we'll be working with the small image... - return false; - } - - public void setShowTitle(boolean value) { - mShowTitle = value; - invalidate(); - } - - @Override - public boolean showTitle() { - return mShowTitle; - } - - @Override - public boolean showControls() { - return false; - } - - @Override - public boolean showHires() { - return false; - } - - @Override - public ImagePreset getImagePreset() { - return mImagePreset; - } - - @Override - public void updateImagePresets(boolean force) { - ImagePreset preset = getImagePreset(); - if (preset == null) { - return; - } - } - - @Override - public void onDraw(Canvas canvas) { - requestFilteredImages(); - canvas.drawColor(mBackgroundColor); - float textWidth = mPaint.measureText(mImageFilter.getName()); - int h = mTextSize + 2 * mTextPadding; - int x = (int) ((getWidth() - textWidth) / 2); - int y = getHeight(); - if (mIsSelected) { - mPaint.setColor(mSelectedBackgroundColor); - canvas.drawRect(0, mMargin, getWidth(), getWidth() + mMargin, mPaint); - } - Rect destination = new Rect(mMargin, 2*mMargin, getWidth() - mMargin, getWidth()); - drawImage(canvas, getFilteredImage(), destination); - mPaint.setTextSize(mTextSize); - mPaint.setColor(mTextColor); - canvas.drawText(mImageFilter.getName(), x, y - mTextMargin, mPaint); - if (mOverlayBitmap != null) { - mPaint.setColor(mOverlayTint); - canvas.drawRect(0, mMargin, getWidth(), getWidth() + mMargin, mPaint); - Rect d = new Rect(0, mMargin, getWidth() - mMargin, getWidth()); - mPaint.setColor(Color.BLACK); - drawImage(canvas, mOverlayBitmap, d); - } - } - - public void drawImage(Canvas canvas, Bitmap image, Rect destination) { - if (image != null) { - int iw = image.getWidth(); - int ih = image.getHeight(); - int x = 0; - int y = 0; - int size = 0; - Rect source = null; - if (iw > ih) { - size = ih; - x = (int) ((iw - size) / 2.0f); - y = 0; - } else { - size = iw; - x = 0; - y = (int) ((ih - size) / 2.0f); - } - source = new Rect(x, y, x + size, y + size); - canvas.drawBitmap(image, source, destination, mPaint); - } - } - -} diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java new file mode 100644 index 000000000..c2be85809 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java @@ -0,0 +1,106 @@ +/* + * 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.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; + +import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.FilterShowActivity; +import com.android.gallery3d.filtershow.filters.ImageFilter; +import com.android.gallery3d.filtershow.filters.ImageFilterBorder; +import com.android.gallery3d.filtershow.filters.ImageFilterDownsample; +import com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; + +public class FilterIconButton extends IconButton implements View.OnClickListener { + private Bitmap mOverlayBitmap = null; + private FilterShowActivity mController = null; + private ImageFilter mImageFilter = null; + private LinearLayout mParentContainer = null; + private View.OnClickListener mListener = null; + + public FilterIconButton(Context context) { + super(context); + } + + public FilterIconButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public FilterIconButton(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setup(String text, ImageFilter filter, FilterShowActivity controller, + LinearLayout parent) { + mImageFilter = filter; + mController = controller; + setText(text); + + if (mImageFilter.getOverlayBitmaps() != 0) { + mOverlayBitmap = BitmapFactory.decodeResource(getResources(), + mImageFilter.getOverlayBitmaps()); + } + + mParentContainer = parent; + super.setOnClickListener(this); + invalidate(); + } + + @Override + protected Bitmap drawImage(Bitmap dst, Bitmap image, Rect destination) { + dst = super.drawImage(dst, image, destination); + dst = mImageFilter.iconApply(dst, 1.0f, false); + if (mOverlayBitmap != null) { + dst = super.drawImage(dst, mOverlayBitmap, destination); + } + return dst; + } + + @Override + public void setOnClickListener(View.OnClickListener listener) { + mListener = listener; + } + + @Override + public void onClick(View v) { + if (mController != null && mImageFilter != null) { + if (!isSelected()) { + mController.useFilter(mImageFilter); + mParentContainer.dispatchSetSelected(false); + setSelected(true); + } + } + if (mListener != null && mListener != this) { + mListener.onClick(v); + } + } + + public ImageFilter getImageFilter() { + return mImageFilter; + } +} diff --git a/src/com/android/gallery3d/filtershow/ui/IconButton.java b/src/com/android/gallery3d/filtershow/ui/IconButton.java new file mode 100644 index 000000000..1ebc1abda --- /dev/null +++ b/src/com/android/gallery3d/filtershow/ui/IconButton.java @@ -0,0 +1,172 @@ +/* + * 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.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.widget.Button; + +import com.android.gallery3d.R; + +/** + * Class of buttons with both an image icon and text. + */ +public class IconButton extends Button { + + protected Bitmap mImageMirror = null; + protected 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. + * + * @param image image that icon will be set to before next draw. + */ + public void setIcon(Bitmap image) { + mImageMirror = image; + stale_icon = true; + } + + /** + * Creates and sets button icon. Only call after layout. + * + * @param image bitmap to use as icon + */ + protected boolean makeAndSetIcon(Bitmap image) { + int size = getGoodIconSideSize(); + if (size > 0) { + return setImageIcon(makeImageIcon(image, size, size)); + } + return false; + } + + /** + * Sets icon. + * + * @param image bitmap to set the icon to. + */ + protected boolean setImageIcon(Bitmap image) { + if (image == null) { + return false; + } + 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 + */ + protected Bitmap makeImageIcon(Bitmap image, int width, int height) { + Rect destination = new Rect(0, 0, width, height); + Bitmap bmap = Bitmap.createBitmap(width, height, + Bitmap.Config.ARGB_8888); + bmap = drawImage(bmap, image, destination); + return bmap; + } + + /** + * Finds a side length for the (square) icon that fits within the button. + * Only call after layout. + * + * @return icon side length + */ + protected int getGoodIconSideSize() { + Paint p = getPaint(); + Rect bounds = new Rect(); + String s = getText().toString(); + p.getTextBounds(s, 0, s.length(), bounds); + int inner_padding = 2 * getCompoundDrawablePadding(); + int vert = getHeight() - getPaddingTop() - getPaddingBottom() - bounds.height() + - inner_padding; + int horiz = getWidth() - getPaddingLeft() - getPaddingRight() - inner_padding; + return Math.min(vert, horiz); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, 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); + } + + // Override this for custom icon generation + protected Bitmap drawImage(Bitmap dst, Bitmap image, Rect destination) { + if (image != null) { + Canvas canvas = new Canvas(dst); + int iw = image.getWidth(); + int ih = image.getHeight(); + int x = 0; + int y = 0; + int size = 0; + Rect source = null; + if (iw > ih) { + size = ih; + x = (int) ((iw - size) / 2.0f); + y = 0; + } else { + size = iw; + x = 0; + y = (int) ((ih - size) / 2.0f); + } + source = new Rect(x, y, x + size, y + size); + canvas.drawBitmap(image, source, destination, new Paint()); + } + return dst; + } + +} diff --git a/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java b/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java deleted file mode 100644 index bb37751bf..000000000 --- a/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java +++ /dev/null @@ -1,73 +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.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.util.AttributeSet; -import android.widget.ImageButton; - -import com.android.gallery3d.R; - -public class ImageButtonTitle extends ImageButton { - private static final String LOGTAG = "ImageButtonTitle"; - private String mText = null; - private static int mTextSize = 24; - private static int mTextPadding = 20; - private static Paint gPaint = new Paint(); - - public static void setTextSize(int value) { - mTextSize = value; - } - - public static void setTextPadding(int value) { - mTextPadding = value; - } - - public void setText(String text) { - mText = text; - } - - public ImageButtonTitle(Context context, AttributeSet attrs) { - super(context, attrs); - TypedArray a = getContext().obtainStyledAttributes( - attrs, R.styleable.ImageButtonTitle); - - mText = a.getString(R.styleable.ImageButtonTitle_android_text); - } - - public String getText(){ - return mText; - } - - @Override - public void onDraw(Canvas canvas) { - super.onDraw(canvas); - if (mText != null) { - gPaint.setARGB(255, 255, 255, 255); - gPaint.setTextSize(mTextSize); - float textWidth = gPaint.measureText(mText); - int x = (int) ((getWidth() - textWidth) / 2); - int y = getHeight() - mTextPadding; - - canvas.drawText(mText, x, y, gPaint); - } - } - -} |
