summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/pipeline
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-07-15 11:24:36 -0700
committernicolasroard <nicolasroard@google.com>2013-07-30 11:28:59 -0700
commitfa474a198019851ecc3824a1dfbac94cd1928efc (patch)
tree0ae590fda9b0703022771c86927d977330429184 /src/com/android/gallery3d/filtershow/pipeline
parent41c10a66ee55978b0673ac68a097d556b719887a (diff)
downloadandroid_packages_apps_Gallery2-fa474a198019851ecc3824a1dfbac94cd1928efc.tar.gz
android_packages_apps_Gallery2-fa474a198019851ecc3824a1dfbac94cd1928efc.tar.bz2
android_packages_apps_Gallery2-fa474a198019851ecc3824a1dfbac94cd1928efc.zip
Add user presets saving/loading
Change-Id: I85c5dd0df1e9264a01c8d7a6d44602e87799890c
Diffstat (limited to 'src/com/android/gallery3d/filtershow/pipeline')
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java7
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java63
2 files changed, 60 insertions, 10 deletions
diff --git a/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
index f97dc757a..29608bfbd 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
@@ -20,6 +20,7 @@ import android.graphics.Bitmap;
import android.support.v8.renderscript.Allocation;
import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
import com.android.gallery3d.filtershow.filters.FiltersManagerInterface;
import com.android.gallery3d.filtershow.filters.ImageFilter;
@@ -128,6 +129,12 @@ public class FilterEnvironment {
}
public Bitmap applyRepresentation(FilterRepresentation representation, Bitmap bitmap) {
+ if (representation instanceof FilterUserPresetRepresentation) {
+ // we allow instances of FilterUserPresetRepresentation in a preset only to know if one
+ // has been applied (so we can show this in the UI). But as all the filters in them are
+ // applied directly they do not themselves need to do any kind of filtering.
+ return bitmap;
+ }
ImageFilter filter = mFiltersManager.getFilterForRepresentation(representation);
filter.useRepresentation(representation);
filter.setEnvironment(this);
diff --git a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
index 5a0857bce..28ae2694e 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
@@ -33,6 +33,7 @@ import com.android.gallery3d.filtershow.filters.FilterMirrorRepresentation;
import com.android.gallery3d.filtershow.filters.FilterRepresentation;
import com.android.gallery3d.filtershow.filters.FilterRotateRepresentation;
import com.android.gallery3d.filtershow.filters.FilterStraightenRepresentation;
+import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
import com.android.gallery3d.filtershow.filters.FiltersManager;
import com.android.gallery3d.filtershow.filters.ImageFilter;
import com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
@@ -52,8 +53,6 @@ public class ImagePreset {
private Vector<FilterRepresentation> mFilters = new Vector<FilterRepresentation>();
- protected boolean mIsFxPreset = false;
-
private boolean mDoApplyGeometry = true;
private boolean mDoApplyFilters = true;
@@ -65,7 +64,6 @@ public class ImagePreset {
}
public ImagePreset(ImagePreset source) {
-
for (int i = 0; i < source.mFilters.size(); i++) {
FilterRepresentation representation = null;
FilterRepresentation sourceRepresentation = source.mFilters.elementAt(i);
@@ -77,9 +75,8 @@ public class ImagePreset {
} else {
representation = sourceRepresentation.copy();
}
- addFilter(representation);
+ mFilters.add(representation);
}
-
}
public FilterRepresentation getFilterRepresentation(int position) {
@@ -340,7 +337,21 @@ public class ImagePreset {
setGeometry((GeometryMetadata) representation);
return;
}
-
+ if (representation instanceof FilterUserPresetRepresentation) {
+ ImagePreset preset = ((FilterUserPresetRepresentation) representation).getImagePreset();
+ // user preset replace everything but geometry
+ GeometryMetadata geometry = getGeometry();
+ mFilters.clear();
+ mFilters.add(geometry);
+ for (int i = 0; i < preset.nbFilters(); i++) {
+ FilterRepresentation rep = preset.getFilterRepresentation(i);
+ if (!(representation instanceof GeometryMetadata)) {
+ addFilter(rep);
+ }
+ }
+ mFilters.add(representation);
+ return;
+ }
if (representation.getFilterType() == FilterRepresentation.TYPE_BORDER) {
removeFilter(representation);
if (!isNoneBorderFilter(representation)) {
@@ -349,7 +360,8 @@ public class ImagePreset {
} else if (representation.getFilterType() == FilterRepresentation.TYPE_FX) {
boolean found = false;
for (int i = 0; i < mFilters.size(); i++) {
- int type = mFilters.elementAt(i).getFilterType();
+ FilterRepresentation current = mFilters.elementAt(i);
+ int type = current.getFilterType();
if (found) {
if (type != FilterRepresentation.TYPE_VIGNETTE) {
mFilters.remove(i);
@@ -357,9 +369,33 @@ public class ImagePreset {
}
}
if (type == FilterRepresentation.TYPE_FX) {
- mFilters.remove(i);
- if (!isNoneFxFilter(representation)) {
- mFilters.add(i, representation);
+ if (current instanceof FilterUserPresetRepresentation) {
+ ImagePreset preset = ((FilterUserPresetRepresentation) current)
+ .getImagePreset();
+ // If we had an existing user preset, let's remove all the presets that
+ // were added by it
+ for (int j = 0; j < preset.nbFilters(); j++) {
+ FilterRepresentation rep = preset.getFilterRepresentation(j);
+ int pos = getPositionForRepresentation(rep);
+ if (pos != -1) {
+ mFilters.remove(pos);
+ }
+ }
+ int pos = getPositionForRepresentation(current);
+ if (pos != -1) {
+ mFilters.remove(pos);
+ } else {
+ pos = 0;
+ }
+ if (!isNoneFxFilter(representation)) {
+ mFilters.add(pos, representation);
+ }
+
+ } else {
+ mFilters.remove(i);
+ if (!isNoneFxFilter(representation)) {
+ mFilters.add(i, representation);
+ }
}
found = true;
}
@@ -535,6 +571,10 @@ public class ImagePreset {
// TODO: supports Geometry representations in the state panel.
continue;
}
+ if (filter instanceof FilterUserPresetRepresentation) {
+ // do not show the user preset itself in the state panel
+ continue;
+ }
State state = new State(filter.getName());
state.setFilterRepresentation(filter);
states.add(state);
@@ -583,6 +623,9 @@ public class ImagePreset {
writer.beginObject();
for (int i = 0; i < numFilters; i++) {
FilterRepresentation filter = mFilters.get(i);
+ if (filter instanceof FilterUserPresetRepresentation) {
+ continue;
+ }
String sname = filter.getSerializationName();
if (DEBUG) {
Log.v(LOGTAG, "Serialization: " + sname);