summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/filtershow/presets/ImagePreset.java')
-rw-r--r--src/com/android/gallery3d/filtershow/presets/ImagePreset.java226
1 files changed, 135 insertions, 91 deletions
diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
index d6a69af3e..84266c55d 100644
--- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
@@ -21,10 +21,12 @@ import android.util.Log;
import com.android.gallery3d.filtershow.ImageStateAdapter;
import com.android.gallery3d.filtershow.cache.ImageLoader;
+import com.android.gallery3d.filtershow.filters.BaseFiltersManager;
+import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.filters.FiltersManager;
import com.android.gallery3d.filtershow.filters.ImageFilter;
-import com.android.gallery3d.filtershow.filters.ImageFilterRS;
import com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
-import com.android.gallery3d.filtershow.imageshow.ImageShow;
+import com.android.gallery3d.filtershow.imageshow.MasterImage;
import java.util.Vector;
@@ -32,13 +34,16 @@ public class ImagePreset {
private static final String LOGTAG = "ImagePreset";
- private ImageShow mEndPoint = null;
- private ImageFilter mImageBorder = null;
+ private FilterRepresentation mBorder = null;
private float mScaleFactor = 1.0f;
- private boolean mIsHighQuality = false;
+ public static final int QUALITY_ICON = 0;
+ public static final int QUALITY_PREVIEW = 1;
+ public static final int QUALITY_FINAL = 2;
+ private int mQuality = QUALITY_PREVIEW;
private ImageLoader mImageLoader = null;
- protected Vector<ImageFilter> mFilters = new Vector<ImageFilter>();
+ private Vector<FilterRepresentation> mFilters = new Vector<FilterRepresentation>();
+
protected String mName = "Original";
private String mHistoryName = "Original";
protected boolean mIsFxPreset = false;
@@ -48,10 +53,6 @@ public class ImagePreset {
public final GeometryMetadata mGeoData = new GeometryMetadata();
- enum FullRotate {
- ZERO, NINETY, HUNDRED_EIGHTY, TWO_HUNDRED_SEVENTY
- }
-
public ImagePreset() {
setup();
}
@@ -70,13 +71,12 @@ public class ImagePreset {
public ImagePreset(ImagePreset source) {
try {
- if (source.mImageBorder != null) {
- mImageBorder = source.mImageBorder.clone();
+ if (source.mBorder != null) {
+ mBorder = source.mBorder.clone();
}
for (int i = 0; i < source.mFilters.size(); i++) {
- ImageFilter filter = source.mFilters.elementAt(i).clone();
- filter.setImagePreset(this);
- add(filter);
+ FilterRepresentation representation = source.mFilters.elementAt(i).clone();
+ addFilter(representation);
}
} catch (java.lang.CloneNotSupportedException e) {
Log.v(LOGTAG, "Exception trying to clone: " + e);
@@ -89,6 +89,52 @@ public class ImagePreset {
mGeoData.set(source.mGeoData);
}
+ public FilterRepresentation getFilterRepresentation(int position) {
+ FilterRepresentation representation = null;
+ try {
+ representation = mFilters.elementAt(position).clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ return representation;
+ }
+
+ public int getPositionForRepresentation(FilterRepresentation representation) {
+ for (int i = 0; i < mFilters.size(); i++) {
+ if (mFilters.elementAt(i).getFilterClass() == representation.getFilterClass()) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public FilterRepresentation getFilterRepresentationCopyFrom(FilterRepresentation filterRepresentation) {
+ // TODO: add concept of position in the filters (to allow multiple instances)
+ if (filterRepresentation == null) {
+ return null;
+ }
+ int position = getPositionForRepresentation(filterRepresentation);
+ if (position == -1) {
+ return null;
+ }
+ FilterRepresentation representation = null;
+ try {
+ representation = mFilters.elementAt(position).clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ return representation;
+ }
+
+ public void updateFilterRepresentation(FilterRepresentation representation) {
+ synchronized (mFilters) {
+ int position = getPositionForRepresentation(representation);
+ FilterRepresentation old = mFilters.elementAt(position);
+ old.updateTempParametersFrom(representation);
+ }
+ MasterImage.getImage().invalidatePreview();
+ }
+
public void setDoApplyGeometry(boolean value) {
mDoApplyGeometry = value;
}
@@ -101,19 +147,19 @@ public class ImagePreset {
return mDoApplyFilters;
}
- public GeometryMetadata getGeometry() {
+ public synchronized GeometryMetadata getGeometry() {
return mGeoData;
}
public boolean hasModifications() {
- if (mImageBorder != null && !mImageBorder.isNil()) {
+ if (mBorder != null && !mBorder.isNil()) {
return true;
}
if (mGeoData.hasModifications()) {
return true;
}
for (int i = 0; i < mFilters.size(); i++) {
- ImageFilter filter = mFilters.elementAt(i);
+ FilterRepresentation filter = mFilters.elementAt(i);
if (!filter.isNil()) {
return true;
}
@@ -122,31 +168,31 @@ public class ImagePreset {
}
public boolean isPanoramaSafe() {
- if (mImageBorder != null && !mImageBorder.isNil()) {
+ if (mBorder != null && !mBorder.isNil()) {
return false;
}
if (mGeoData.hasModifications()) {
return false;
}
- for (ImageFilter filter : mFilters) {
- if (filter.getFilterType() == ImageFilter.TYPE_VIGNETTE
- && !filter.isNil()) {
+ for (FilterRepresentation representation : mFilters) {
+ if (representation.getPriority() == FilterRepresentation.TYPE_VIGNETTE
+ && !representation.isNil()) {
return false;
}
- if (filter.getFilterType() == ImageFilter.TYPE_TINYPLANET
- && !filter.isNil()) {
+ if (representation.getPriority() == FilterRepresentation.TYPE_TINYPLANET
+ && !representation.isNil()) {
return false;
}
}
return true;
}
- public void setGeometry(GeometryMetadata m) {
+ public synchronized void setGeometry(GeometryMetadata m) {
mGeoData.set(m);
}
- private void setBorder(ImageFilter filter) {
- mImageBorder = filter;
+ private void setBorder(FilterRepresentation filter) {
+ mBorder = filter;
}
public boolean isFx() {
@@ -180,8 +226,8 @@ public class ImagePreset {
}
if (mDoApplyFilters && preset.mDoApplyFilters) {
for (int i = 0; i < preset.mFilters.size(); i++) {
- ImageFilter a = preset.mFilters.elementAt(i);
- ImageFilter b = mFilters.elementAt(i);
+ FilterRepresentation a = preset.mFilters.elementAt(i);
+ FilterRepresentation b = mFilters.elementAt(i);
if (!a.equals(b)) {
return false;
}
@@ -190,14 +236,6 @@ public class ImagePreset {
return true;
}
- public void usePreset(ImagePreset preset) {
- for (int i = 0; i < preset.mFilters.size(); i++) {
- ImageFilter a = preset.mFilters.elementAt(i);
- ImageFilter b = mFilters.elementAt(i);
- b.useFilter(a);
- }
- }
-
public boolean same(ImagePreset preset) {
if (preset == null) {
return false;
@@ -219,11 +257,11 @@ public class ImagePreset {
return false;
}
- if (mDoApplyGeometry && mImageBorder != preset.mImageBorder) {
+ if (mDoApplyGeometry && mBorder != preset.mBorder) {
return false;
}
- if (mImageBorder != null && !mImageBorder.same(preset.mImageBorder)) {
+ if (mBorder != null && !mBorder.equals(preset.mBorder)) {
return false;
}
@@ -235,18 +273,15 @@ public class ImagePreset {
if (mDoApplyFilters && preset.mDoApplyFilters) {
for (int i = 0; i < preset.mFilters.size(); i++) {
- ImageFilter a = preset.mFilters.elementAt(i);
- ImageFilter b = mFilters.elementAt(i);
+ FilterRepresentation a = preset.mFilters.elementAt(i);
+ FilterRepresentation b = mFilters.elementAt(i);
if (!a.same(b)) {
return false;
}
}
}
- return true;
- }
- public int nbFilters() {
- return mFilters.size();
+ return true;
}
public int similarUpTo(ImagePreset preset) {
@@ -255,13 +290,13 @@ public class ImagePreset {
}
for (int i = 0; i < preset.mFilters.size(); i++) {
- ImageFilter a = preset.mFilters.elementAt(i);
+ FilterRepresentation a = preset.mFilters.elementAt(i);
if (i < mFilters.size()) {
- ImageFilter b = mFilters.elementAt(i);
+ FilterRepresentation b = mFilters.elementAt(i);
if (!a.same(b)) {
return i;
}
- if (a.getParameter() != b.getParameter()) {
+ if (!a.equals(b)) {
return i;
}
} else {
@@ -279,57 +314,58 @@ public class ImagePreset {
return mHistoryName;
}
- public void add(ImageFilter filter) {
+ public void showFilters() {
+ Log.v(LOGTAG, "\\\\\\ showFilters -- " + mFilters.size() + " filters");
+ int n = 0;
+ for (FilterRepresentation representation : mFilters) {
+ Log.v(LOGTAG, " filter " + n + " : " + representation.toString());
+ n++;
+ }
+ Log.v(LOGTAG, "/// showFilters -- " + mFilters.size() + " filters");
+ }
- if (filter.getFilterType() == ImageFilter.TYPE_BORDER) {
- setHistoryName(filter.getName());
- setBorder(filter);
- } else if (filter.getFilterType() == ImageFilter.TYPE_FX) {
+ public void addFilter(FilterRepresentation representation) {
+ Log.v(LOGTAG, "*** Add Filter *** " + representation);
+ if (representation.getPriority() == FilterRepresentation.TYPE_BORDER) {
+ setHistoryName(representation.getName());
+ setBorder(representation);
+ } else if (representation.getPriority() == FilterRepresentation.TYPE_FX) {
boolean found = false;
for (int i = 0; i < mFilters.size(); i++) {
- byte type = mFilters.get(i).getFilterType();
+ int type = mFilters.elementAt(i).getPriority();
if (found) {
- if (type != ImageFilter.TYPE_VIGNETTE) {
+ if (type != FilterRepresentation.TYPE_VIGNETTE) {
mFilters.remove(i);
continue;
}
}
- if (type == ImageFilter.TYPE_FX) {
+ if (type == FilterRepresentation.TYPE_FX) {
mFilters.remove(i);
- mFilters.add(i, filter);
- setHistoryName(filter.getName());
+ mFilters.add(i, representation);
+ setHistoryName(representation.getName());
found = true;
}
}
if (!found) {
- mFilters.add(filter);
- setHistoryName(filter.getName());
+ mFilters.add(representation);
+ setHistoryName(representation.getName());
}
} else {
- mFilters.add(filter);
- setHistoryName(filter.getName());
+ mFilters.add(representation);
+ setHistoryName(representation.getName());
}
- filter.setImagePreset(this);
}
- public void remove(String filterName) {
- ImageFilter filter = getFilter(filterName);
- if (filter != null) {
- mFilters.remove(filter);
- }
- }
-
- public int getCount() {
- return mFilters.size();
- }
-
- public ImageFilter getFilter(String name) {
+ public FilterRepresentation getRepresentation(FilterRepresentation filterRepresentation) {
for (int i = 0; i < mFilters.size(); i++) {
- ImageFilter filter = mFilters.elementAt(i);
- if (filter.getName().equalsIgnoreCase(name)) {
- return filter;
+ FilterRepresentation representation = mFilters.elementAt(i);
+ if (representation.getFilterClass() == filterRepresentation.getFilterClass()) {
+ return representation;
}
}
+ if (mBorder != null && mBorder.getFilterClass() == filterRepresentation.getFilterClass()) {
+ return mBorder;
+ }
return null;
}
@@ -337,10 +373,6 @@ public class ImagePreset {
// do nothing here
}
- public void setEndpoint(ImageShow image) {
- mEndPoint = image;
- }
-
public Bitmap apply(Bitmap original) {
Bitmap bitmap = original;
bitmap = applyFilters(bitmap, -1, -1);
@@ -350,12 +382,16 @@ public class ImagePreset {
public Bitmap applyGeometry(Bitmap bitmap) {
// Apply any transform -- 90 rotate, flip, straighten, crop
// Returns a new bitmap.
- return mGeoData.apply(bitmap, mScaleFactor, mIsHighQuality);
+ return mGeoData.apply(bitmap, mScaleFactor, mQuality);
}
public Bitmap applyBorder(Bitmap bitmap) {
- if (mImageBorder != null && mDoApplyGeometry) {
- bitmap = mImageBorder.apply(bitmap, mScaleFactor, mIsHighQuality);
+ if (mBorder != null && mDoApplyGeometry) {
+ ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(mBorder);
+ mBorder.synchronizeRepresentation();
+ filter.useRepresentation(mBorder);
+ filter.setImagePreset(this);
+ bitmap = filter.apply(bitmap, mScaleFactor, mQuality);
}
return bitmap;
}
@@ -370,8 +406,15 @@ public class ImagePreset {
to = mFilters.size();
}
for (int i = from; i < to; i++) {
- ImageFilter filter = mFilters.elementAt(i);
- bitmap = filter.apply(bitmap, mScaleFactor, mIsHighQuality);
+ FilterRepresentation representation = null;
+ synchronized (mFilters) {
+ representation = mFilters.elementAt(i);
+ representation.synchronizeRepresentation();
+ }
+ ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(representation);
+ filter.useRepresentation(representation);
+ filter.setImagePreset(this);
+ bitmap = filter.apply(bitmap, mScaleFactor, mQuality);
}
}
@@ -383,6 +426,7 @@ public class ImagePreset {
return;
}
imageStateAdapter.clear();
+ // TODO: re-enable the state panel
imageStateAdapter.addAll(mFilters);
imageStateAdapter.notifyDataSetChanged();
}
@@ -391,12 +435,12 @@ public class ImagePreset {
return mScaleFactor;
}
- public boolean isHighQuality() {
- return mIsHighQuality;
+ public int getQuality() {
+ return mQuality;
}
- public void setIsHighQuality(boolean value) {
- mIsHighQuality = value;
+ public void setQuality(int value) {
+ mQuality = value;
}
public void setScaleFactor(float value) {