summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-06-26 14:33:15 -0700
committernicolasroard <nicolasroard@google.com>2013-06-26 15:26:28 -0700
commit977489b60c2375cd084a481e03c9878c03e6b077 (patch)
tree190a68589f97d285de17940801ad7b4419f6c49e /src/com
parent3be6f26ab847dfd336fb4de58a00d8dac081ebd1 (diff)
downloadandroid_packages_apps_Snap-977489b60c2375cd084a481e03c9878c03e6b077.tar.gz
android_packages_apps_Snap-977489b60c2375cd084a481e03c9878c03e6b077.tar.bz2
android_packages_apps_Snap-977489b60c2375cd084a481e03c9878c03e6b077.zip
Cleanup in ImagePreset
Move GeometryMetadata to the list of filters Change-Id: I0bef13ca0d9cb41e68eddd108000ff7bd426b313
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java10
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilter.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java16
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/MasterImage.java9
-rw-r--r--src/com/android/gallery3d/filtershow/presets/ImagePreset.java119
-rw-r--r--src/com/android/gallery3d/filtershow/ui/FilterIconButton.java4
7 files changed, 99 insertions, 63 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 2ac7e981b..9512ff088 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -462,7 +462,15 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
if (representation == null) {
return;
}
- useFilterRepresentation(representation);
+
+ // TODO: this check is needed because the GeometryMetadata doesn't quite
+ // follow the same pattern as the other filters to update/sync their values.
+ // We thus need to not call useFilterRepresentation() for now, as it
+ // would override the current Geometry. Once GeometryMetadata is fixed,
+ // let's remove the check and call useFilterRepresentation all the time.
+ if (!(representation instanceof GeometryMetadata)) {
+ useFilterRepresentation(representation);
+ }
// show representation
Editor mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId());
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
index 6481e108e..5ac87c665 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
@@ -89,7 +89,7 @@ public abstract class ImageFilter implements Cloneable {
protected Matrix getOriginalToScreenMatrix(int w, int h) {
ImagePreset preset = getEnvironment().getImagePreset();
- GeometryMetadata geo = getEnvironment().getImagePreset().mGeoData;
+ GeometryMetadata geo = getEnvironment().getImagePreset().getGeometry();
Matrix originalToScreen = geo.getOriginalToScreen(true,
preset.getImageLoader().getOriginalBounds().width(),
preset.getImageLoader().getOriginalBounds().height(),
diff --git a/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java b/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
index 77dbd5e7b..af18372eb 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
@@ -38,7 +38,7 @@ import java.util.LinkedHashSet;
import java.util.List;
public class GeometryMetadata extends FilterRepresentation {
- private static final String SERIALIZATION_NAME = "GEOM";
+ public static final String SERIALIZATION_NAME = "GEOM";
private static final String LOGTAG = "GeometryMetadata";
private float mScaleFactor = 1.0f;
private float mRotation = 0;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 1b9398397..13f18dc45 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -89,7 +89,7 @@ public class ImageShow extends View implements OnGestureListener,
InteractionMode mInteractionMode = InteractionMode.NONE;
protected GeometryMetadata getGeometry() {
- return new GeometryMetadata(getImagePreset().mGeoData);
+ return new GeometryMetadata(getImagePreset().getGeometry());
}
private FilterShowActivity mActivity = null;
@@ -161,12 +161,12 @@ public class ImageShow extends View implements OnGestureListener,
public Rect getImageBounds() {
Rect dst = new Rect();
- getImagePreset().mGeoData.getPhotoBounds().roundOut(dst);
+ getImagePreset().getGeometry().getPhotoBounds().roundOut(dst);
return dst;
}
public Rect getImageCropBounds() {
- return GeometryMath.roundNearest(getImagePreset().mGeoData.getPreviewCropBounds());
+ return GeometryMath.roundNearest(getImagePreset().getGeometry().getPreviewCropBounds());
}
/* consider moving the following 2 methods into a subclass */
@@ -177,7 +177,7 @@ public class ImageShow extends View implements OnGestureListener,
* @return Image to Screen transformation matrix
*/
protected Matrix getImageToScreenMatrix(boolean reflectRotation) {
- GeometryMetadata geo = getImagePreset().mGeoData;
+ GeometryMetadata geo = getImagePreset().getGeometry();
if (geo == null || mImageLoader == null
|| mImageLoader.getOriginalBounds() == null) {
return new Matrix();
@@ -377,15 +377,15 @@ public class ImageShow extends View implements OnGestureListener,
return;
float w = image.getWidth();
float h = image.getHeight();
- GeometryMetadata geo = getImagePreset().mGeoData;
+ GeometryMetadata geo = getImagePreset().getGeometry();
RectF pb = geo.getPhotoBounds();
if (w == pb.width() && h == pb.height()) {
return;
}
RectF r = new RectF(0, 0, w, h);
- getImagePreset().mGeoData.setPhotoBounds(r);
- getImagePreset().mGeoData.setCropBounds(r);
-
+ geo.setPhotoBounds(r);
+ geo.setCropBounds(r);
+ getImagePreset().setGeometry(geo);
}
public void updateImage() {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index 4ea944b7b..839f638c1 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -151,7 +151,7 @@ public class MasterImage implements RenderingRequestCaller {
mHistory.addHistoryItem(mPreset);
}
updatePresets(true);
- GeometryMetadata geo = mPreset.mGeoData;
+ GeometryMetadata geo = mPreset.getGeometry();
if (!geo.equals(mPreviousGeometry)) {
notifyGeometryChange();
}
@@ -182,7 +182,7 @@ public class MasterImage implements RenderingRequestCaller {
}
float w = image.getWidth();
float h = image.getHeight();
- GeometryMetadata geo = mPreset.mGeoData;
+ GeometryMetadata geo = mPreset.getGeometry();
RectF pb = geo.getPhotoBounds();
if (w == pb.width() && h == pb.height()) {
return;
@@ -190,6 +190,7 @@ public class MasterImage implements RenderingRequestCaller {
RectF r = new RectF(0, 0, w, h);
geo.setPhotoBounds(r);
geo.setCropBounds(r);
+ mPreset.setGeometry(geo);
}
public void onHistoryItemClick(int position) {
@@ -242,7 +243,7 @@ public class MasterImage implements RenderingRequestCaller {
}
public void setOriginalGeometry(Bitmap originalBitmapLarge) {
- GeometryMetadata geo = getPreset().mGeoData;
+ GeometryMetadata geo = getPreset().getGeometry();
float w = originalBitmapLarge.getWidth();
float h = originalBitmapLarge.getHeight();
RectF r = new RectF(0, 0, w, h);
@@ -349,7 +350,7 @@ public class MasterImage implements RenderingRequestCaller {
}
private Matrix getImageToScreenMatrix(boolean reflectRotation) {
- GeometryMetadata geo = mPreset.mGeoData;
+ GeometryMetadata geo = mPreset.getGeometry();
if (geo == null || mLoader == null
|| mLoader.getOriginalBounds() == null
|| mImageShowSize.x == 0) {
diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
index 7b226099d..11502afda 100644
--- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
@@ -63,19 +63,16 @@ public class ImagePreset {
private boolean mDoApplyGeometry = true;
private boolean mDoApplyFilters = true;
- public final GeometryMetadata mGeoData = new GeometryMetadata();
private boolean mPartialRendering = false;
private Rect mPartialRenderingBounds;
private Bitmap mPreviewImage;
public ImagePreset() {
- setup();
}
public ImagePreset(String historyName) {
setHistoryName(historyName);
- setup();
}
public ImagePreset(ImagePreset source, String historyName) {
@@ -88,7 +85,17 @@ public class ImagePreset {
public ImagePreset(ImagePreset source) {
try {
for (int i = 0; i < source.mFilters.size(); i++) {
- FilterRepresentation representation = source.mFilters.elementAt(i).clone();
+ FilterRepresentation representation = null;
+ FilterRepresentation sourceRepresentation = source.mFilters.elementAt(i);
+ if (sourceRepresentation instanceof GeometryMetadata) {
+ GeometryMetadata geoData = new GeometryMetadata();
+ GeometryMetadata srcGeo = (GeometryMetadata) sourceRepresentation;
+ geoData.set(srcGeo);
+ representation = geoData;
+ } else {
+ // TODO: get rid of clone()...
+ representation = sourceRepresentation.clone();
+ }
addFilter(representation);
}
} catch (java.lang.CloneNotSupportedException e) {
@@ -99,8 +106,6 @@ public class ImagePreset {
mIsFxPreset = source.isFx();
mImageLoader = source.getImageLoader();
mPreviewImage = source.getPreviewImage();
-
- mGeoData.set(source.mGeoData);
}
public FilterRepresentation getFilterRepresentation(int position) {
@@ -184,15 +189,24 @@ public class ImagePreset {
}
public synchronized GeometryMetadata getGeometry() {
- return mGeoData;
+ for (FilterRepresentation representation : mFilters) {
+ if (representation instanceof GeometryMetadata) {
+ return (GeometryMetadata) representation;
+ }
+ }
+ GeometryMetadata geo = new GeometryMetadata();
+ mFilters.add(0, geo); // Hard Requirement for now -- Geometry ought to be first.
+ return geo;
}
public boolean hasModifications() {
- if (mGeoData.hasModifications()) {
- return true;
- }
for (int i = 0; i < mFilters.size(); i++) {
FilterRepresentation filter = mFilters.elementAt(i);
+ if (filter instanceof GeometryMetadata) {
+ if (((GeometryMetadata) filter).hasModifications()) {
+ return true;
+ }
+ }
if (!filter.isNil() && !filter.getName().equalsIgnoreCase("none")) {
return true;
}
@@ -201,10 +215,12 @@ public class ImagePreset {
}
public boolean isPanoramaSafe() {
- if (mGeoData.hasModifications()) {
- return false;
- }
for (FilterRepresentation representation : mFilters) {
+ if (representation instanceof GeometryMetadata) {
+ if (((GeometryMetadata) representation).hasModifications()) {
+ return false;
+ }
+ }
if (representation.getFilterType() == FilterRepresentation.TYPE_BORDER
&& !representation.isNil()) {
return false;
@@ -221,8 +237,11 @@ public class ImagePreset {
return true;
}
- public synchronized void setGeometry(GeometryMetadata m) {
- mGeoData.set(m);
+ public synchronized void setGeometry(GeometryMetadata representation) {
+ GeometryMetadata geoData = getGeometry();
+ if (geoData != representation) {
+ geoData.set(representation);
+ }
MasterImage.getImage().notifyGeometryChange();
}
@@ -284,7 +303,7 @@ public class ImagePreset {
return false;
}
- if (mDoApplyGeometry && !mGeoData.equals(preset.mGeoData)) {
+ if (mDoApplyGeometry && !getGeometry().equals(preset.getGeometry())) {
return false;
}
@@ -298,6 +317,10 @@ public class ImagePreset {
for (int i = 0; i < preset.mFilters.size(); i++) {
FilterRepresentation a = preset.mFilters.elementAt(i);
FilterRepresentation b = mFilters.elementAt(i);
+ if (a instanceof GeometryMetadata) {
+ // Note: Geometry will always be at the same place
+ continue;
+ }
if (!a.same(b)) {
return false;
}
@@ -308,7 +331,7 @@ public class ImagePreset {
}
public int similarUpTo(ImagePreset preset) {
- if (!mGeoData.equals(preset.mGeoData)) {
+ if (!getGeometry().equals(preset.getGeometry())) {
return -1;
}
@@ -412,9 +435,6 @@ public class ImagePreset {
}
public FilterRepresentation getRepresentation(FilterRepresentation filterRepresentation) {
- if (filterRepresentation instanceof GeometryMetadata) {
- return mGeoData;
- }
for (int i = 0; i < mFilters.size(); i++) {
FilterRepresentation representation = mFilters.elementAt(i);
if (representation.getFilterClass() == filterRepresentation.getFilterClass()) {
@@ -424,10 +444,6 @@ public class ImagePreset {
return null;
}
- public void setup() {
- // do nothing here
- }
-
public Bitmap apply(Bitmap original, FilterEnvironment environment) {
Bitmap bitmap = original;
bitmap = applyFilters(bitmap, -1, -1, environment);
@@ -438,8 +454,9 @@ public class ImagePreset {
// Apply any transform -- 90 rotate, flip, straighten, crop
// Returns a new bitmap.
if (mDoApplyGeometry) {
- mGeoData.synchronizeRepresentation();
- bitmap = environment.applyRepresentation(mGeoData, bitmap);
+ GeometryMetadata geoData = getGeometry();
+ geoData.synchronizeRepresentation();
+ bitmap = environment.applyRepresentation(geoData, bitmap);
}
return bitmap;
}
@@ -481,6 +498,10 @@ public class ImagePreset {
representation = mFilters.elementAt(i);
representation.synchronizeRepresentation();
}
+ if (representation instanceof GeometryMetadata) {
+ // skip the geometry as it's already applied.
+ continue;
+ }
if (representation.getFilterType() == FilterRepresentation.TYPE_BORDER) {
// for now, let's skip the border as it will be applied in applyBorder()
// TODO: might be worth getting rid of applyBorder.
@@ -532,6 +553,10 @@ public class ImagePreset {
representation = mFilters.elementAt(i);
representation.synchronizeRepresentation();
}
+ if (representation instanceof GeometryMetadata) {
+ // skip the geometry as it's already applied.
+ continue;
+ }
if (representation.getFilterType() == FilterRepresentation.TYPE_BORDER) {
// for now, let's skip the border as it will be applied in applyBorder()
continue;
@@ -545,9 +570,6 @@ public class ImagePreset {
}
public boolean canDoPartialRendering() {
- if (mGeoData.hasModifications()) {
- return false;
- }
if (ImageLoader.getZoomOrientation() != ImageLoader.ORI_NORMAL) {
return false;
}
@@ -556,6 +578,10 @@ public class ImagePreset {
synchronized (mFilters) {
representation = mFilters.elementAt(i);
}
+ if (representation instanceof GeometryMetadata
+ && ((GeometryMetadata) representation).hasModifications()) {
+ return false;
+ }
if (!representation.supportsPartialRendering()) {
return false;
}
@@ -568,13 +594,11 @@ public class ImagePreset {
return;
}
Vector<State> states = new Vector<State>();
- // TODO: supports Geometry representations in the state panel.
- if (false && mGeoData != null && mGeoData.hasModifications()) {
- State geo = new State("Geometry");
- geo.setFilterRepresentation(mGeoData);
- states.add(geo);
- }
for (FilterRepresentation filter : mFilters) {
+ if (filter instanceof GeometryMetadata) {
+ // TODO: supports Geometry representations in the state panel.
+ continue;
+ }
State state = new State(filter.getName());
state.setFilterRepresentation(filter);
states.add(state);
@@ -631,10 +655,11 @@ public class ImagePreset {
try {
writer.beginObject();
writer.name(PRESET_NAME).value(name);
- writer.name(mGeoData.getSerializationName());
+ GeometryMetadata geoData = getGeometry();
+ writer.name(geoData.getSerializationName());
writer.beginObject();
{
- String[][] rep = mGeoData.serializeRepresentation();
+ String[][] rep = geoData.serializeRepresentation();
for (int i = 0; i < rep.length; i++) {
writer.name(rep[i][0]);
writer.value(rep[i][1]);
@@ -644,6 +669,9 @@ public class ImagePreset {
for (int i = 0; i < numFilters; i++) {
FilterRepresentation filter = mFilters.get(i);
+ if (filter instanceof GeometryMetadata) {
+ continue;
+ }
String sname = filter.getSerializationName();
writer.name(sname);
writer.beginObject();
@@ -685,22 +713,21 @@ public class ImagePreset {
while (sreader.hasNext()) {
String name = sreader.nextName();
-
- if (mGeoData.getSerializationName().equals(name)) {
- mGeoData.deSerializeRepresentation(read(sreader));
- } else {
- FilterRepresentation filter = creatFilterFromName(name);
- if (filter == null)
- return false;
- filter.deSerializeRepresentation(read(sreader));
- addFilter(filter);
+ FilterRepresentation filter = creatFilterFromName(name);
+ if (filter == null) {
+ return false;
}
+ filter.deSerializeRepresentation(read(sreader));
+ addFilter(filter);
}
sreader.endObject();
return true;
}
FilterRepresentation creatFilterFromName(String name) {
+ if (GeometryMetadata.SERIALIZATION_NAME.equalsIgnoreCase(name)) {
+ return new GeometryMetadata();
+ }
FiltersManager filtersManager = FiltersManager.getManager();
return filtersManager.createFilterFromName(name);
}
diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
index 96126c55c..bc41e0e9c 100644
--- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
+++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
@@ -182,11 +182,11 @@ public class FilterIconButton extends IconButton implements View.OnClickListener
ImagePreset mPreset = new ImagePreset();
mPreset.addFilter(mFilterRepresentation);
- GeometryMetadata geometry = mPreset.mGeoData;
+ GeometryMetadata geometry = mPreset.getGeometry();
RectF bound = new RectF(0, 0, dst.getWidth(), dst.getHeight());
geometry.setCropBounds(bound);
geometry.setPhotoBounds(bound);
-
+ mPreset.setGeometry(geometry);
RenderingRequest.post(dst.copy(Bitmap.Config.ARGB_8888, true),
mPreset, RenderingRequest.ICON_RENDERING, this);
}