summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2012-10-17 17:46:47 -0700
committernicolasroard <nicolasroard@google.com>2012-10-18 17:05:58 -0700
commitd7899c56b8df278dfd6720ae11eadc2f89fe8094 (patch)
tree181da9205017c8f8045443aa8159c8405d16cc8f
parent0745eba4898419aad2b6e79be137a2a1edf4d0fc (diff)
downloadandroid_packages_apps_Gallery2-d7899c56b8df278dfd6720ae11eadc2f89fe8094.tar.gz
android_packages_apps_Gallery2-d7899c56b8df278dfd6720ae11eadc2f89fe8094.tar.bz2
android_packages_apps_Gallery2-d7899c56b8df278dfd6720ae11eadc2f89fe8094.zip
Fix undo/redo/back button behaviour with effects and enable history
bug:7332980 bug:7357734 bug:7325872 Change-Id: Ie952a410c218c91ac927095ddcf542209fe7b90c
-rw-r--r--res/drawable-hdpi/camera_crop.pngbin0 -> 1662 bytes
-rw-r--r--res/drawable-mdpi/camera_crop.pngbin0 -> 1093 bytes
-rw-r--r--res/drawable-xhdpi/camera_crop.pngbin0 -> 2400 bytes
-rw-r--r--res/layout/filtershow_history_operation_row.xml2
-rw-r--r--res/menu/filtershow_activity_menu.xml2
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java30
-rw-r--r--src/com/android/gallery3d/filtershow/HistoryAdapter.java69
-rw-r--r--src/com/android/gallery3d/filtershow/PanelController.java20
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java17
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java5
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageFlip.java7
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java22
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java5
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java82
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java6
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java5
-rw-r--r--src/com/android/gallery3d/filtershow/ui/ImageCurves.java91
-rw-r--r--src/com/android/gallery3d/filtershow/ui/Spline.java10
18 files changed, 253 insertions, 120 deletions
diff --git a/res/drawable-hdpi/camera_crop.png b/res/drawable-hdpi/camera_crop.png
new file mode 100644
index 000000000..97b1b989e
--- /dev/null
+++ b/res/drawable-hdpi/camera_crop.png
Binary files differ
diff --git a/res/drawable-mdpi/camera_crop.png b/res/drawable-mdpi/camera_crop.png
new file mode 100644
index 000000000..cf385641c
--- /dev/null
+++ b/res/drawable-mdpi/camera_crop.png
Binary files differ
diff --git a/res/drawable-xhdpi/camera_crop.png b/res/drawable-xhdpi/camera_crop.png
new file mode 100644
index 000000000..e0a53bcc9
--- /dev/null
+++ b/res/drawable-xhdpi/camera_crop.png
Binary files differ
diff --git a/res/layout/filtershow_history_operation_row.xml b/res/layout/filtershow_history_operation_row.xml
index 6f9ea1b8f..dd9b66e93 100644
--- a/res/layout/filtershow_history_operation_row.xml
+++ b/res/layout/filtershow_history_operation_row.xml
@@ -23,7 +23,7 @@
<ImageView
android:id="@+id/selectedMark"
- android:src="@drawable/filtershow_button_current"
+ android:src="@drawable/camera_crop"
android:background="@android:color/transparent"
android:layout_width="32dip"
android:layout_height="match_parent"
diff --git a/res/menu/filtershow_activity_menu.xml b/res/menu/filtershow_activity_menu.xml
index 34d5c7bcb..efb8747f9 100644
--- a/res/menu/filtershow_activity_menu.xml
+++ b/res/menu/filtershow_activity_menu.xml
@@ -22,7 +22,7 @@
android:id="@+id/operationsButton"
android:icon="@drawable/filtershow_button_operations"
android:showAsAction="never"
- android:visible="false"
+ android:visible="true"
android:title="@string/show_history_panel"/>
<item
android:id="@+id/showImageStateButton"
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 98f977dd7..277859fdd 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -308,17 +308,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
listColors.addView(fView, pos);
}
- mPanelController.addComponent(mColorsButton, findViewById(R.id.tinyplanetButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.curvesButtonRGB));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.sharpenButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.vibranceButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.contrastButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.saturationButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.wbalanceButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.hueButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.exposureButton));
- mPanelController.addComponent(mColorsButton, findViewById(R.id.shadowRecoveryButton));
-
mPanelController.addView(findViewById(R.id.applyEffect));
mPanelController.addView(findViewById(R.id.pickCurvesChannel));
mPanelController.addView(findViewById(R.id.aspect));
@@ -326,11 +315,11 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
createOnClickResetOperationsButton());
ListView operationsList = (ListView) findViewById(R.id.operationsList);
- operationsList.setAdapter(mImageShow.getHistoryAdapter());
+ operationsList.setAdapter(mImageShow.getHistory());
operationsList.setOnItemClickListener(this);
ListView imageStateList = (ListView) findViewById(R.id.imageStateList);
imageStateList.setAdapter(mImageShow.getImageStateAdapter());
- mImageLoader.setAdapter((HistoryAdapter) mImageShow.getHistoryAdapter());
+ mImageLoader.setAdapter(mImageShow.getHistory());
fillListImages(listFilters);
fillListBorders(listBorders);
@@ -485,8 +474,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.undoButton: {
- HistoryAdapter adapter = (HistoryAdapter) mImageShow
- .getHistoryAdapter();
+ HistoryAdapter adapter = mImageShow.getHistory();
int position = adapter.undo();
mImageShow.onItemClick(position);
mImageShow.showToast("Undo");
@@ -494,8 +482,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
return true;
}
case R.id.redoButton: {
- HistoryAdapter adapter = (HistoryAdapter) mImageShow
- .getHistoryAdapter();
+ HistoryAdapter adapter = mImageShow.getHistory();
int position = adapter.redo();
mImageShow.onItemClick(position);
mImageShow.showToast("Redo");
@@ -663,6 +650,10 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
// //////////////////////////////////////////////////////////////////////////////
// imageState panel...
+ public boolean isShowingHistoryPanel() {
+ return mShowingHistoryPanel;
+ }
+
private void toggleImageStatePanel() {
final View view = findViewById(R.id.mainPanel);
final View viewList = findViewById(R.id.imageStatePanel);
@@ -696,7 +687,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
// //////////////////////////////////////////////////////////////////////////////
// history panel...
- private void toggleHistoryPanel() {
+ public void toggleHistoryPanel() {
final View view = findViewById(R.id.mainPanel);
final View viewList = findViewById(R.id.historyPanel);
@@ -727,8 +718,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
}
private void resetHistory() {
- HistoryAdapter adapter = (HistoryAdapter) mImageShow
- .getHistoryAdapter();
+ HistoryAdapter adapter = mImageShow.getHistory();
adapter.reset();
ImagePreset original = new ImagePreset(adapter.getItem(0));
mImageShow.setImagePreset(original);
diff --git a/src/com/android/gallery3d/filtershow/HistoryAdapter.java b/src/com/android/gallery3d/filtershow/HistoryAdapter.java
index 803c45fc0..475f44313 100644
--- a/src/com/android/gallery3d/filtershow/HistoryAdapter.java
+++ b/src/com/android/gallery3d/filtershow/HistoryAdapter.java
@@ -1,21 +1,19 @@
package com.android.gallery3d.filtershow;
-import java.util.Vector;
-
-import com.android.gallery3d.filtershow.presets.ImagePreset;
-import com.android.gallery3d.R;
-
import android.content.Context;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
-import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
+
+import java.util.Vector;
+
public class HistoryAdapter extends ArrayAdapter<ImagePreset> {
private static final String LOGTAG = "HistoryAdapter";
private int mCurrentPresetPosition = 0;
@@ -35,13 +33,35 @@ public class HistoryAdapter extends ArrayAdapter<ImagePreset> {
}
ImagePreset first = getItem(getCount() - 1);
clear();
- insert(first, 0);
+ addHistoryItem(first);
}
- public void insert(ImagePreset preset, int position) {
- if (getCount() > position && getItem(position).same(preset)) {
- return;
+ public ImagePreset getLast() {
+ if (getCount() == 0) {
+ return null;
}
+ return getItem(0);
+ }
+
+ public void addHistoryItem(ImagePreset preset) {
+ if (canAddHistoryItem(preset)) {
+ insert(preset, 0);
+ }
+ }
+
+ public boolean canAddHistoryItem(ImagePreset preset) {
+ if (getCount() > 0 && getLast().same(preset)) {
+ // we may still want to insert if the previous
+ // history element isn't the same
+ if (getLast().historyName().equalsIgnoreCase(preset.historyName())) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void insert(ImagePreset preset, int position) {
if (mCurrentPresetPosition != 0) {
// in this case, let's discount the presets before the current one
Vector<ImagePreset> oldItems = new Vector<ImagePreset>();
@@ -54,9 +74,9 @@ public class HistoryAdapter extends ArrayAdapter<ImagePreset> {
}
mCurrentPresetPosition = position;
this.notifyDataSetChanged();
- }
- if (getCount() > position && getItem(position).same(preset)) {
- return;
+ if (!canAddHistoryItem(preset)) {
+ return;
+ }
}
super.insert(preset, position);
mCurrentPresetPosition = position;
@@ -81,6 +101,7 @@ public class HistoryAdapter extends ArrayAdapter<ImagePreset> {
return mCurrentPresetPosition;
}
+ @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
@@ -102,17 +123,27 @@ public class HistoryAdapter extends ArrayAdapter<ImagePreset> {
markView.setVisibility(View.INVISIBLE);
}
ImageView typeView = (ImageView) view.findViewById(R.id.typeMark);
+ // TODO: use type of last filter, not a string, to discriminate.
if (position == getCount() - 1) {
- typeView.setImageResource(R.drawable.filtershow_button_origin);
+ typeView.setImageResource(R.drawable.ic_photoeditor_effects);
} else if (item.historyName().equalsIgnoreCase("Border")) {
- typeView.setImageResource(R.drawable.filtershow_button_border);
- } else if (item.isFx()) {
- typeView.setImageResource(R.drawable.filtershow_button_fx);
+ typeView.setImageResource(R.drawable.ic_photoeditor_border);
+ } else if (item.historyName().equalsIgnoreCase("Straighten")) {
+ typeView.setImageResource(R.drawable.ic_photoeditor_fix);
+ } else if (item.historyName().equalsIgnoreCase("Crop")) {
+ typeView.setImageResource(R.drawable.ic_photoeditor_fix);
+ } else if (item.historyName().equalsIgnoreCase("Rotation")) {
+ typeView.setImageResource(R.drawable.ic_photoeditor_fix);
+ } else if (item.historyName().equalsIgnoreCase("Mirror")) {
+ typeView.setImageResource(R.drawable.ic_photoeditor_fix);
+ } else if (item.isFx()) {
+ typeView.setImageResource(R.drawable.ic_photoeditor_effects);
} else {
- typeView.setImageResource(R.drawable.filtershow_button_settings);
+ typeView.setImageResource(R.drawable.ic_photoeditor_color);
}
}
return view;
}
+
}
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java
index 03319b074..1dbaca218 100644
--- a/src/com/android/gallery3d/filtershow/PanelController.java
+++ b/src/com/android/gallery3d/filtershow/PanelController.java
@@ -11,6 +11,7 @@ import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.filters.ImageFilter;
import com.android.gallery3d.filtershow.filters.ImageFilterContrast;
+import com.android.gallery3d.filtershow.filters.ImageFilterCurves;
import com.android.gallery3d.filtershow.filters.ImageFilterExposure;
import com.android.gallery3d.filtershow.filters.ImageFilterHue;
import com.android.gallery3d.filtershow.filters.ImageFilterRedEye;
@@ -36,6 +37,7 @@ public class PanelController implements OnClickListener {
private static int VERTICAL_MOVE = 0;
private static int HORIZONTAL_MOVE = 1;
private static final int ANIM_DURATION = 200;
+ private static final String LOGTAG = "PanelController";
class Panel {
private final View mView;
@@ -338,7 +340,9 @@ public class PanelController implements OnClickListener {
if (mUtilityPanel == null || !mUtilityPanel.selected()) {
return true;
}
- resetParameters();
+ HistoryAdapter adapter = mMasterImage.getHistory();
+ int position = adapter.undo();
+ mMasterImage.onItemClick(position);
return false;
}
@@ -450,6 +454,18 @@ public class PanelController implements OnClickListener {
public void ensureFilter(String name) {
ImagePreset preset = getImagePreset();
ImageFilter filter = preset.getFilter(name);
+ if (filter != null) {
+ // If we already have a filter, we might still want
+ // to push it onto the history stack.
+ ImagePreset copy = new ImagePreset(getImagePreset());
+ copy.setHistoryName(name);
+ mMasterImage.setImagePreset(copy);
+ filter = copy.getFilter(name);
+ }
+ if (filter == null && name.equalsIgnoreCase(
+ mCurrentImage.getContext().getString(R.string.curvesRGB))) {
+ filter = setImagePreset(new ImageFilterCurves(), name);
+ }
if (filter == null && name.equalsIgnoreCase(
mCurrentImage.getContext().getString(R.string.tinyplanet))) {
filter = setImagePreset(new ImageFilterTinyPlanet(), name);
@@ -570,7 +586,7 @@ public class PanelController implements OnClickListener {
mUtilityPanel.setEffectName(ename);
mUtilityPanel.setShowParameter(false);
mUtilityPanel.showCurvesButtons();
- curves.reloadCurve();
+ ensureFilter("Curves");
mCurrentImage = curves;
break;
}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java
index 0f05a1c83..8c5bda04d 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java
@@ -8,11 +8,11 @@ import com.android.gallery3d.filtershow.ui.Spline;
public class ImageFilterCurves extends ImageFilter {
private static final String LOGTAG = "ImageFilterCurves";
-
private final Spline[] mSplines = new Spline[4];
public ImageFilterCurves() {
mName = "Curves";
+ reset();
}
@Override
@@ -20,7 +20,7 @@ public class ImageFilterCurves extends ImageFilter {
ImageFilterCurves filter = (ImageFilterCurves) super.clone();
for (int i = 0; i < 4; i++) {
if (mSplines[i] != null) {
- filter.setSpline(new Spline(mSplines[i]), i);
+ filter.setSpline(mSplines[i], i);
}
}
return filter;
@@ -93,10 +93,21 @@ public class ImageFilterCurves extends ImageFilter {
}
public void setSpline(Spline spline, int splineIndex) {
- mSplines[splineIndex] = spline;
+ mSplines[splineIndex] = new Spline(spline);
}
public Spline getSpline(int splineIndex) {
return mSplines[splineIndex];
}
+
+ public void reset() {
+ Spline spline = new Spline();
+
+ spline.addPoint(0.0f, 1.0f);
+ spline.addPoint(1.0f, 0.0f);
+
+ for (int i = 0; i < 4; i++) {
+ mSplines[i] = new Spline(spline);
+ }
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
index e34e3a249..2a570aa29 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
@@ -84,6 +84,11 @@ public class ImageCrop extends ImageGeometry {
borderPaint.setStrokeWidth(2f);
}
+ @Override
+ public String getName() {
+ return "Crop";
+ }
+
private boolean switchCropBounds(int moving_corner, RectF dst) {
RectF crop = getCropBoundsDisplayed();
float dx1 = 0;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageFlip.java b/src/com/android/gallery3d/filtershow/imageshow/ImageFlip.java
index 00b9aed16..a75ce4d0c 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageFlip.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageFlip.java
@@ -41,13 +41,18 @@ public class ImageFlip extends ImageGeometry {
}
@Override
+ public String getName() {
+ return "Mirror";
+ }
+
+ @Override
protected void setActionDown(float x, float y) {
super.setActionDown(x, y);
}
boolean hasRotated90(){
int rot = constrainedRotation(getLocalRotation());
- return ((int) (rot / 90)) % 2 != 0;
+ return (rot / 90) % 2 != 0;
}
@Override
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
index d5a7ada69..1cf8d7af5 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
@@ -31,7 +31,6 @@ import android.view.View;
import com.android.gallery3d.filtershow.imageshow.GeometryMetadata.FLIP;
import com.android.gallery3d.filtershow.presets.ImagePreset;
-import com.android.gallery3d.filtershow.imageshow.GeometryMath;
public abstract class ImageGeometry extends ImageSlave {
private boolean mVisibilityGained = false;
@@ -368,12 +367,23 @@ public abstract class ImageGeometry extends ImageSlave {
return false;
}
+ public String getName() {
+ return "Geometry";
+ }
+
protected void saveAndSetPreset() {
- ImagePreset copy = new ImagePreset(getImagePreset());
- copy.setGeometry(mLocalGeometry);
- copy.setHistoryName("Geometry");
- copy.setIsFx(false);
- setImagePreset(copy);
+ ImagePreset lastHistoryItem = getHistory().getLast();
+ if (lastHistoryItem != null && lastHistoryItem.historyName().equalsIgnoreCase(getName())) {
+ getImagePreset().setGeometry(mLocalGeometry);
+ mImageLoader.resetImageForPreset(getImagePreset(), this);
+ } else {
+ ImagePreset copy = new ImagePreset(getImagePreset());
+ copy.setGeometry(mLocalGeometry);
+ copy.setHistoryName(getName());
+ copy.setIsFx(false);
+ setImagePreset(copy, true);
+ }
+ invalidate();
}
public static RectF getUntranslatedStraightenCropBounds(RectF imageRect, float straightenAngle) {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java b/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java
index 775aa716b..c88e51d76 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java
@@ -38,6 +38,11 @@ public class ImageRotate extends ImageGeometry {
super(context);
}
+ @Override
+ public String getName() {
+ return "Rotation";
+ }
+
private static final Paint gPaint = new Paint();
private void computeValue() {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 0c51f1270..58f72e1df 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -25,6 +25,9 @@ import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Handler;
import android.util.AttributeSet;
+import android.view.GestureDetector;
+import android.view.GestureDetector.OnDoubleTapListener;
+import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
@@ -44,7 +47,10 @@ import com.android.gallery3d.filtershow.ui.SliderListener;
import java.io.File;
-public class ImageShow extends View implements SliderListener, OnSeekBarChangeListener {
+public class ImageShow extends View implements OnGestureListener,
+ OnDoubleTapListener,
+ SliderListener,
+ OnSeekBarChangeListener {
private static final String LOGTAG = "ImageShow";
@@ -69,6 +75,8 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
// slider gesture
protected SliderController mSliderController = new SliderController();
+ private GestureDetector mGestureDetector = null;
+
private HistoryAdapter mHistoryAdapter = null;
private ImageStateAdapter mImageStateAdapter = null;
@@ -92,6 +100,8 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
private SeekBar mSeekBar = null;
private PanelController mController = null;
+ private FilterShowActivity mActivity = null;
+
public static void setDefaultBackgroundColor(int value) {
mBackgroundColor = value;
}
@@ -206,6 +216,8 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
R.id.rowTextView);
mImageStateAdapter = new ImageStateAdapter(context,
R.layout.filtershow_imagestate_row);
+ setupGestureDetector(context);
+ mActivity = (FilterShowActivity) context;
}
public ImageShow(Context context) {
@@ -215,6 +227,12 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
}
mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row,
R.id.rowTextView);
+ setupGestureDetector(context);
+ mActivity = (FilterShowActivity) context;
+ }
+
+ public void setupGestureDetector(Context context) {
+ mGestureDetector = new GestureDetector(context, this);
}
@Override
@@ -422,7 +440,7 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
mImagePreset = preset;
if (getImagePreset() != null) {
if (addToHistory) {
- mHistoryAdapter.insert(getImagePreset(), 0);
+ mHistoryAdapter.addHistoryItem(getImagePreset());
}
getImagePreset().setEndpoint(this);
updateImage();
@@ -486,13 +504,14 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
if (USE_SLIDER_GESTURE) {
mSliderController.onTouchEvent(event);
}
+ mGestureDetector.onTouchEvent(event);
invalidate();
return true;
}
// listview stuff
- public ArrayAdapter getHistoryAdapter() {
+ public HistoryAdapter getHistory() {
return mHistoryAdapter;
}
@@ -560,4 +579,61 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
// TODO Auto-generated method stub
}
+
+ @Override
+ public boolean onDoubleTap(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean onDoubleTapEvent(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean onDown(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean onFling(MotionEvent startEvent, MotionEvent endEvent, float arg2, float arg3) {
+ if ((!mActivity.isShowingHistoryPanel() && startEvent.getX() > endEvent.getX())
+ || (mActivity.isShowingHistoryPanel() && endEvent.getX() > startEvent.getX())){
+ mActivity.toggleHistoryPanel();
+ }
+ return true;
+ }
+
+ @Override
+ public void onLongPress(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void onShowPress(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean onSingleTapUp(MotionEvent arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
index f320a0341..c1fb0e471 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
+import com.android.gallery3d.filtershow.HistoryAdapter;
import com.android.gallery3d.filtershow.PanelController;
import com.android.gallery3d.filtershow.filters.ImageFilter;
import com.android.gallery3d.filtershow.presets.ImagePreset;
@@ -44,6 +45,11 @@ public class ImageSlave extends ImageShow {
}
@Override
+ public HistoryAdapter getHistory() {
+ return mMasterImageShow.getHistory();
+ }
+
+ @Override
public ImagePreset getImagePreset() {
return mMasterImageShow.getImagePreset();
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
index 26c9671bb..4f29c0f81 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
@@ -41,6 +41,11 @@ public class ImageStraighten extends ImageGeometry {
}
@Override
+ public String getName() {
+ return "Straighten";
+ }
+
+ @Override
protected void setActionDown(float x, float y) {
super.setActionDown(x, y);
mBaseAngle = mAngle = getLocalStraighten();
diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
index a8445b830..84edf234a 100644
--- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
+++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
@@ -21,7 +21,6 @@ public class ImageCurves extends ImageSlave {
private static final String LOGTAG = "ImageCurves";
Paint gPaint = new Paint();
- Spline[] mSplines = new Spline[4];
Path gPathSpline = new Path();
private int mCurrentCurveIndex = 0;
@@ -54,23 +53,16 @@ public class ImageCurves extends ImageSlave {
return false;
}
- public void reloadCurve() {
+ private ImageFilterCurves curves() {
if (getMaster() != null) {
String filterName = getFilterName();
- ImageFilterCurves filter = (ImageFilterCurves) getImagePreset()
- .getFilter(filterName);
- if (filter == null) {
- resetCurve();
- return;
- }
- for (int i = 0; i < 4; i++) {
- Spline spline = filter.getSpline(i);
- if (spline != null) {
- mSplines[i] = new Spline(spline);
- }
- }
- applyNewCurve();
+ return (ImageFilterCurves) getImagePreset().getFilter(filterName);
}
+ return null;
+ }
+
+ private Spline getSpline(int index) {
+ return curves().getSpline(index);
}
@Override
@@ -82,16 +74,9 @@ public class ImageCurves extends ImageSlave {
}
public void resetCurve() {
- Spline spline = new Spline();
-
- spline.addPoint(0.0f, 1.0f);
- spline.addPoint(1.0f, 0.0f);
-
- for (int i = 0; i < 4; i++) {
- mSplines[i] = new Spline(spline);
- }
- if (getMaster() != null) {
- applyNewCurve();
+ if (getMaster() != null && curves() != null) {
+ curves().reset();
+ updateCachedImage();
}
}
@@ -118,7 +103,7 @@ public class ImageCurves extends ImageSlave {
// We only display the other channels curves when showing the RGB curve
if (mCurrentCurveIndex == Spline.RGB) {
for (int i = 0; i < 4; i++) {
- Spline spline = mSplines[i];
+ Spline spline = getSpline(i);
if (i != mCurrentCurveIndex && !spline.isOriginal()) {
// And we only display a curve if it has more than two
// points
@@ -127,7 +112,7 @@ public class ImageCurves extends ImageSlave {
}
}
// ...but we always display the current curve.
- mSplines[mCurrentCurveIndex]
+ getSpline(mCurrentCurveIndex)
.draw(canvas, Spline.colorForCurve(mCurrentCurveIndex), getWidth(), getHeight(),
true);
drawToast(canvas);
@@ -136,12 +121,13 @@ public class ImageCurves extends ImageSlave {
private int pickControlPoint(float x, float y) {
int pick = 0;
- float px = mSplines[mCurrentCurveIndex].getPoint(0).x;
- float py = mSplines[mCurrentCurveIndex].getPoint(0).y;
+ Spline spline = getSpline(mCurrentCurveIndex);
+ float px = spline.getPoint(0).x;
+ float py = spline.getPoint(0).y;
double delta = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
- for (int i = 1; i < mSplines[mCurrentCurveIndex].getNbPoints(); i++) {
- px = mSplines[mCurrentCurveIndex].getPoint(i).x;
- py = mSplines[mCurrentCurveIndex].getPoint(i).y;
+ for (int i = 1; i < spline.getNbPoints(); i++) {
+ px = spline.getPoint(i).x;
+ py = spline.getPoint(i).y;
double currentDelta = Math.sqrt((px - x) * (px - x) + (py - y)
* (py - y));
if (currentDelta < delta) {
@@ -151,7 +137,7 @@ public class ImageCurves extends ImageSlave {
}
if (!mDidAddPoint && (delta * getWidth() > 100)
- && (mSplines[mCurrentCurveIndex].getNbPoints() < 10)) {
+ && (spline.getNbPoints() < 10)) {
return -1;
}
@@ -176,15 +162,8 @@ public class ImageCurves extends ImageSlave {
posY = (posY - margin) / (getHeight() - 2 * margin);
if (e.getActionMasked() == MotionEvent.ACTION_UP) {
- applyNewCurve();
mCurrentControlPoint = null;
- String name = "Curves";
- ImagePreset copy = new ImagePreset(getImagePreset(), name);
-
- copy.setIsFx(false);
- mImageLoader.getHistory().insert(copy, 0);
-
- invalidate();
+ updateCachedImage();
mDidAddPoint = false;
if (mDidDelete) {
mDidDelete = false;
@@ -196,48 +175,32 @@ public class ImageCurves extends ImageSlave {
return true;
}
+ Spline spline = getSpline(mCurrentCurveIndex);
int pick = pickControlPoint(posX, posY);
if (mCurrentControlPoint == null) {
if (pick == -1) {
mCurrentControlPoint = new ControlPoint(posX, posY);
- mSplines[mCurrentCurveIndex].addPoint(mCurrentControlPoint);
+ spline.addPoint(mCurrentControlPoint);
mDidAddPoint = true;
} else {
- mCurrentControlPoint = mSplines[mCurrentCurveIndex].getPoint(pick);
+ mCurrentControlPoint = spline.getPoint(pick);
}
}
- if (mSplines[mCurrentCurveIndex].isPointContained(posX, pick)) {
+ if (spline.isPointContained(posX, pick)) {
mCurrentControlPoint.x = posX;
mCurrentControlPoint.y = posY;
} else if (pick != -1) {
- mSplines[mCurrentCurveIndex].deletePoint(pick);
+ spline.deletePoint(pick);
mDidDelete = true;
}
- applyNewCurve();
- invalidate();
+ updateCachedImage();
return true;
}
- public synchronized void applyNewCurve() {
+ public synchronized void updateCachedImage() {
// update image
if (getImagePreset() != null) {
- String filterName = getFilterName();
- ImageFilterCurves filter = (ImageFilterCurves) getImagePreset()
- .getFilter(filterName);
- if (filter == null) {
- filter = new ImageFilterCurves();
- filter.setName(filterName);
- ImagePreset copy = new ImagePreset(getImagePreset());
- copy.add(filter);
- setImagePreset(copy, false);
- }
-
- if (filter != null) {
- for (int i = 0; i < 4; i++) {
- filter.setSpline(new Spline(mSplines[i]), i);
- }
- }
mImageLoader.resetImageForPreset(getImagePreset(), this);
invalidate();
}
diff --git a/src/com/android/gallery3d/filtershow/ui/Spline.java b/src/com/android/gallery3d/filtershow/ui/Spline.java
index b5c79747d..ddbf97c74 100644
--- a/src/com/android/gallery3d/filtershow/ui/Spline.java
+++ b/src/com/android/gallery3d/filtershow/ui/Spline.java
@@ -6,6 +6,7 @@ import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.Drawable;
+import android.util.Log;
import java.util.Collections;
import java.util.Vector;
@@ -20,6 +21,7 @@ public class Spline {
public static final int RED = 1;
public static final int GREEN = 2;
public static final int BLUE = 3;
+ private static final String LOGTAG = "Spline";
private final Paint gPaint = new Paint();
@@ -350,4 +352,12 @@ public class Spline {
return spline;
}
+ public void show() {
+ Log.v(LOGTAG, "show curve " + this);
+ for (int i = 0; i < mPoints.size(); i++) {
+ ControlPoint point = mPoints.elementAt(i);
+ Log.v(LOGTAG, "point " + i + " is (" + point.x + ", " + point.y + ")");
+ }
+ }
+
}