OSDN Git Service

Fix application of FX to not wipe out borders etc.
authorJohn Hoford <hoford@google.com>
Thu, 11 Oct 2012 16:13:40 +0000 (09:13 -0700)
committerJohn Hoford <hoford@google.com>
Thu, 11 Oct 2012 16:13:40 +0000 (09:13 -0700)
bug:7289442
Change-Id: I9efdfdc1d8a8c02a718e91a089b531ff26fd582d

src/com/android/gallery3d/filtershow/FilterShowActivity.java
src/com/android/gallery3d/filtershow/PanelController.java
src/com/android/gallery3d/filtershow/filters/ImageFilter.java
src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java
src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java
src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java
src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
src/com/android/gallery3d/filtershow/presets/ImagePreset.java
src/com/android/gallery3d/filtershow/presets/ImagePresetFX.java
src/com/android/gallery3d/filtershow/ui/ImageCurves.java

index 07b78a3..7ad1b80 100644 (file)
@@ -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();
     }
index 804c6b2..d9205bf 100644 (file)
@@ -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;
index 662e8ed..6d0c020 100644 (file)
@@ -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;
     }
 
index 9fcf1dc..dd7d17c 100644 (file)
@@ -17,6 +17,7 @@ public class ImageFilterBorder extends ImageFilter {
     }
 
     public ImageFilterBorder(Drawable ninePatch) {
+        setFilterType(TYPE_BORDER);
         mName = "Border";
         mNinePatch = ninePatch;
     }
index 00fd20c..1575b18 100644 (file)
@@ -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;
     }
 
index 163ed0c..9d9c7e5 100644 (file)
@@ -8,6 +8,7 @@ public class ImageFilterWBalance extends ImageFilter {
     private static final String TAG = "ImageFilterWBalance";
 
     public ImageFilterWBalance() {
+        setFilterType(TYPE_WBALANCE);
         mName = "WBalance";
     }
 
index 0b0c2c4..78d877d 100644 (file)
@@ -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);
     }
 
index ec0ed74..0ddb017 100644 (file)
@@ -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) {
index 326471e..fa207a6 100644 (file)
@@ -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));
         }
     }
 
index fb18bcf..660a4fa 100644 (file)
@@ -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);