diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java | 100 |
1 files changed, 39 insertions, 61 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java index 4fe308294..70e7f2220 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java @@ -16,78 +16,38 @@ package com.android.gallery3d.filtershow.filters; +import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.editors.ImageOnlyEditor; + +import java.util.HashMap; 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; + private FilterImageBorderRepresentation mParameters = null; + private Resources mResources = null; - @Override - public ImageFilter clone() throws CloneNotSupportedException { - ImageFilterBorder filter = (ImageFilterBorder) super.clone(); - filter.setDrawable(mNinePatch); - return filter; - } + private HashMap<Integer, Drawable> mDrawables = new HashMap<Integer, Drawable>(); - public ImageFilterBorder(Drawable ninePatch) { - setFilterType(TYPE_BORDER); + public ImageFilterBorder() { mName = "Border"; - mNinePatch = ninePatch; - } - - @Override - public boolean isNil() { - if (mNinePatch == null) { - 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) { - return false; - } - if (!(filter instanceof ImageFilterBorder)) { - return false; - } - ImageFilterBorder borderFilter = (ImageFilterBorder) filter; - if (mNinePatch != borderFilter.mNinePatch) { - return false; - } - return true; + public void useRepresentation(FilterRepresentation representation) { + FilterImageBorderRepresentation parameters = (FilterImageBorderRepresentation) representation; + mParameters = parameters; } - public void setDrawable(Drawable ninePatch) { - // TODO: for now we only use nine patch - mNinePatch = ninePatch; + public FilterImageBorderRepresentation getParameters() { + return mParameters; } public Bitmap applyHelper(Bitmap bitmap, float scale1, float scale2 ) { @@ -96,14 +56,15 @@ public class ImageFilterBorder extends ImageFilter { Rect bounds = new Rect(0, 0, (int) (w * scale1), (int) (h * scale1)); Canvas canvas = new Canvas(bitmap); canvas.scale(scale2, scale2); - mNinePatch.setBounds(bounds); - mNinePatch.draw(canvas); + Drawable drawable = getDrawable(getParameters().getDrawableResource()); + drawable.setBounds(bounds); + drawable.draw(canvas); return bitmap; } @Override - public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - if (mNinePatch == null) { + public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) { + if (getParameters() == null || getParameters().getDrawableResource() == 0) { return bitmap; } float scale2 = scaleFactor * 2.0f; @@ -112,12 +73,29 @@ public class ImageFilterBorder extends ImageFilter { } @Override - public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - if (mNinePatch == null) { + public Bitmap iconApply(Bitmap bitmap, float scaleFactor, int quality) { + if (getParameters() == null || getParameters().getDrawableResource() == 0) { return bitmap; } float scale1 = NINEPATCH_ICON_SCALING; float scale2 = BITMAP_ICON_SCALING; return applyHelper(bitmap, scale1, scale2); } + + public void setResources(Resources resources) { + if (mResources != resources) { + mResources = resources; + mDrawables.clear(); + } + } + + public Drawable getDrawable(int rsc) { + Drawable drawable = mDrawables.get(rsc); + if (drawable == null && mResources != null && rsc != 0) { + drawable = new BitmapDrawable(mResources, BitmapFactory.decodeResource(mResources, rsc)); + mDrawables.put(rsc, drawable); + } + return drawable; + } + } |