diff options
author | John Hoford <hoford@google.com> | 2012-10-11 09:13:40 -0700 |
---|---|---|
committer | John Hoford <hoford@google.com> | 2012-10-11 09:13:40 -0700 |
commit | 6f1dfae8dff9114b59d4ae4e44a6cec68d791950 (patch) | |
tree | 387caf5cc0a3e04a98d4c50d8f08d20a77f6b70c | |
parent | 823824122d04c9b0073f3bd13c292abdec210de9 (diff) | |
download | android_packages_apps_Snap-6f1dfae8dff9114b59d4ae4e44a6cec68d791950.tar.gz android_packages_apps_Snap-6f1dfae8dff9114b59d4ae4e44a6cec68d791950.tar.bz2 android_packages_apps_Snap-6f1dfae8dff9114b59d4ae4e44a6cec68d791950.zip |
Fix application of FX to not wipe out borders etc.
bug:7289442
Change-Id: I9efdfdc1d8a8c02a718e91a089b531ff26fd582d
10 files changed, 90 insertions, 31 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 07b78a383..7ad1b80b9 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -35,6 +35,7 @@ import com.android.gallery3d.R; import com.android.gallery3d.filtershow.cache.ImageLoader; import com.android.gallery3d.filtershow.filters.ImageFilter; import com.android.gallery3d.filtershow.filters.ImageFilterBorder; +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.imageshow.ImageBorder; @@ -392,7 +393,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private void fillListImages(LinearLayout listFilters) { // TODO: use listview // TODO: load the filters straight from the filesystem - ImagePreset[] preset = new ImagePreset[18]; + + ImageFilterFx[] fxArray = new ImageFilterFx[18]; int p = 0; int[] drawid = { @@ -419,25 +421,34 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, R.string.ffx_washout_color, }; - preset[p++] = new ImagePreset(); + ImagePreset preset = new ImagePreset(); // empty + ImageSmallFilter filter = new ImageSmallFilter(this); + + filter.setSelected(true); + mCurrentImageSmallFilter = filter; + + filter.setPreviousImageSmallFilter(null); + preset.setIsFx(true); + filter.setImagePreset(preset); + + filter.setController(this); + filter.setImageLoader(mImageLoader); + listFilters.addView(filter); + ImageSmallFilter previousFilter = filter; + 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); - preset[p++] = new ImagePresetFX(b, getString(fxNameid[i])); + fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i])); } - ImageSmallFilter previousFilter = null; for (int i = 0; i < p; i++) { - ImageSmallFilter filter = new ImageSmallFilter(this); - if (i == 0) { - filter.setSelected(true); - mCurrentImageSmallFilter = filter; - } + filter = new ImageSmallFilter(this); + filter.setPreviousImageSmallFilter(previousFilter); - preset[i].setIsFx(true); - filter.setImagePreset(preset[i]); + filter.setImageFilter(fxArray[i]); filter.setController(this); filter.setImageLoader(mImageLoader); listFilters.addView(filter); @@ -445,7 +456,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, } // Default preset (original) - mImageShow.setImagePreset(preset[0]); + mImageShow.setImagePreset(preset); } private void fillListBorders(LinearLayout listBorders) { @@ -650,12 +661,9 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, ImagePreset oldPreset = mImageShow.getImagePreset(); ImagePreset copy = new ImagePreset(oldPreset); // TODO: use a numerical constant instead. - if (setBorder) { - copy.setHistoryName("Border"); - copy.setBorder(imageFilter); - } else { - copy.add(imageFilter); - } + + copy.add(imageFilter); + mImageShow.setImagePreset(copy); invalidateViews(); } diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java index 804c6b236..d9205bf75 100644 --- a/src/com/android/gallery3d/filtershow/PanelController.java +++ b/src/com/android/gallery3d/filtershow/PanelController.java @@ -327,7 +327,6 @@ public class PanelController implements OnClickListener { public ImageFilter setImagePreset(ImageFilter filter, String name) { ImagePreset copy = new ImagePreset(getImagePreset()); copy.add(filter); - copy.setHistoryName(filter.getName()); copy.setIsFx(false); mMasterImage.setImagePreset(copy); return filter; diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java index 662e8ed2b..6d0c020a7 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java @@ -8,12 +8,27 @@ public class ImageFilter implements Cloneable { protected int mParameter = 0; protected String mName = "Original"; private final String LOGTAG = "ImageFilter"; + public static final byte TYPE_BORDER =1; + public static final byte TYPE_FX = 2; + public static final byte TYPE_WBALANCE = 3; + public static final byte TYPE_VIGNETTE = 4; + public static final byte TYPE_NORMAL = 5; + private byte filterType = TYPE_NORMAL; + + public byte getFilterType(){ + return filterType; + } + + protected void setFilterType(byte type){ + filterType = type; + } @Override public ImageFilter clone() throws CloneNotSupportedException { ImageFilter filter = (ImageFilter) super.clone(); filter.setName(getName()); filter.setParameter(getParameter()); + filter.setFilterType(filterType); return filter; } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java index 9fcf1dc1d..dd7d17c46 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java @@ -17,6 +17,7 @@ public class ImageFilterBorder extends ImageFilter { } public ImageFilterBorder(Drawable ninePatch) { + setFilterType(TYPE_BORDER); mName = "Border"; mNinePatch = ninePatch; } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java index 00fd20cf5..1575b18bb 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java @@ -13,8 +13,9 @@ public class ImageFilterFx extends ImageFilter { private static final String TAG = "ImageFilterFx"; Bitmap fxBitmap; - public ImageFilterFx(Bitmap fxBitmap) { - mName = "fx"; + public ImageFilterFx(Bitmap fxBitmap,String name) { + setFilterType(TYPE_FX); + mName = name; this.fxBitmap = fxBitmap; } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java index 163ed0c65..9d9c7e548 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java @@ -8,6 +8,7 @@ public class ImageFilterWBalance extends ImageFilter { private static final String TAG = "ImageFilterWBalance"; public ImageFilterWBalance() { + setFilterType(TYPE_WBALANCE); mName = "WBalance"; } diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java index 0b0c2c475..78d877df9 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java @@ -46,6 +46,7 @@ public class ImageSmallFilter extends ImageShow implements View.OnClickListener public void setImageFilter(ImageFilter filter) { mImageFilter = filter; mImagePreset = new ImagePreset(); + mImagePreset.setName(filter.getName()); mImagePreset.add(mImageFilter); } diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index ec0ed7402..0ddb0170f 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -35,6 +35,11 @@ public class ImagePreset { setup(); } + public ImagePreset(ImagePreset source, String historyName) { + this(source); + if (historyName!=null) setHistoryName(historyName); + } + public ImagePreset(ImagePreset source) { try { if (source.mImageBorder != null) { @@ -57,7 +62,7 @@ public class ImagePreset { mGeoData.set(m); } - public void setBorder(ImageFilter filter) { + private void setBorder(ImageFilter filter) { mImageBorder = filter; } @@ -74,7 +79,7 @@ public class ImagePreset { mHistoryName = name; } - public void setHistoryName(String name) { + private void setHistoryName(String name) { mHistoryName = name; } @@ -117,7 +122,32 @@ public class ImagePreset { } public void add(ImageFilter filter) { - mFilters.add(filter); + if (filter.getFilterType() == ImageFilter.TYPE_BORDER){ + setHistoryName("Border"); + setBorder(filter); + } else if (filter.getFilterType() == ImageFilter.TYPE_FX){ + Vector<ImageFilter> fl = mFilters; + boolean found = false; + for (int i = 0; i < mFilters.size(); i++) { + byte type = fl.get(i).getFilterType(); + if (found) { + if (type != ImageFilter.TYPE_VIGNETTE){ + fl.remove(i); + } + } else if (type==ImageFilter.TYPE_FX){ + fl.remove(i); + fl.add(i, filter); + setHistoryName(filter.getName()); + found = true; + } + + } + mFilters.add(filter); + setHistoryName(filter.getName()); + } else { + mFilters.add(filter); + setHistoryName(filter.getName()); + } } public void remove(String filterName) { diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePresetFX.java b/src/com/android/gallery3d/filtershow/presets/ImagePresetFX.java index 326471ef3..fa207a6d0 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePresetFX.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePresetFX.java @@ -22,7 +22,7 @@ public class ImagePresetFX extends ImagePreset { public void setup() { if (fxBitmap != null) { - mFilters.add(new ImageFilterFx(fxBitmap)); + mFilters.add(new ImageFilterFx(fxBitmap,name)); } } diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java index fb18bcf8f..660a4fadd 100644 --- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java +++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java @@ -240,17 +240,20 @@ public class ImageCurves extends ImageSlave { applyNewCurve(); // Log.v(LOGTAG, "ACTION UP, mCurrentControlPoint set to null!"); mCurrentControlPoint = null; - ImagePreset copy = new ImagePreset(getImagePreset()); - + String name = null; if (mUseRed && mUseGreen && mUseBlue) { - copy.setHistoryName("Curves (RGB)"); + name = "Curves (RGB)"; } else if (mUseRed) { - copy.setHistoryName("Curves (Red)"); + name = "Curves (Red)"; } else if (mUseGreen) { - copy.setHistoryName("Curves (Green)"); + name = "Curves (Green)"; } else if (mUseBlue) { - copy.setHistoryName("Curves (Blue)"); + name = "Curves (Blue)"; } + + + ImagePreset copy = new ImagePreset(getImagePreset(),name); + copy.setIsFx(false); mImageLoader.getHistory().insert(copy, 0); |