Merge "Fix Curves" into gb-ub-photos-bryce
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterCurvesRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterCurvesRepresentation.java
index 3511c67..cbcae4b 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterCurvesRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterCurvesRepresentation.java
@@ -1,5 +1,7 @@
 package com.android.gallery3d.filtershow.filters;
 
+import android.util.Log;
+
 import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.ui.Spline;
 
@@ -7,6 +9,8 @@
  * TODO: Insert description here. (generated by hoford)
  */
 public class FilterCurvesRepresentation extends FilterRepresentation {
+    private static final String LOGTAG = "FilterCurvesRepresentation";
+
     private Spline[] mSplines = new Spline[4];
 
     public FilterCurvesRepresentation() {
@@ -20,10 +24,33 @@
         setShowParameterValue(false);
         setShowUtilityPanel(true);
         setSupportsPartialRendering(true);
-        for (int i = 0; i < mSplines.length; i++) {
-            mSplines[i] = new Spline();
-            mSplines[i].reset();
+        reset();
+    }
+
+    @Override
+    public FilterRepresentation clone() throws CloneNotSupportedException {
+        FilterCurvesRepresentation rep = new FilterCurvesRepresentation();
+        rep.useParametersFrom(this);
+        return rep;
+    }
+
+    @Override
+    public void useParametersFrom(FilterRepresentation a) {
+        if (!(a instanceof FilterCurvesRepresentation)) {
+            Log.v(LOGTAG, "cannot use parameters from " + a);
+            return;
         }
+        FilterCurvesRepresentation representation = (FilterCurvesRepresentation) a;
+        Spline[] spline = new Spline[4];
+        for (int i = 0; i < spline.length; i++) {
+            Spline sp = representation.mSplines[i];
+            if (sp != null) {
+                spline[i] = new Spline(sp);
+            } else {
+                spline[i] = new Spline();
+            }
+        }
+        mSplines = spline;
     }
 
     public boolean isNil() {
diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
index 528746d..be5df0a 100644
--- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
+++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
@@ -26,6 +26,7 @@
 import android.graphics.PorterDuffXfermode;
 import android.os.AsyncTask;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.MotionEvent;
@@ -157,7 +158,7 @@
     }
 
     private Spline getSpline(int index) {
-        return curves().getSpline(index);
+        return mFilterCurvesRepresentation.getSpline(index);
     }
 
     @Override
@@ -169,8 +170,8 @@
     }
 
     public void resetCurve() {
-        if (curves() != null) {
-            curves().reset();
+        if (mFilterCurvesRepresentation != null) {
+            mFilterCurvesRepresentation.reset();
             updateCachedImage();
         }
     }
diff --git a/src/com/android/gallery3d/filtershow/ui/Spline.java b/src/com/android/gallery3d/filtershow/ui/Spline.java
index 2cfbd80..cadf2fd 100644
--- a/src/com/android/gallery3d/filtershow/ui/Spline.java
+++ b/src/com/android/gallery3d/filtershow/ui/Spline.java
@@ -98,7 +98,7 @@
     }
 
     public boolean isOriginal() {
-        if (this.getNbPoints() > 2) {
+        if (this.getNbPoints() != 2) {
             return false;
         }
         if (mPoints.elementAt(0).x != 0 || mPoints.elementAt(0).y != 1) {
@@ -378,6 +378,9 @@
 
     public void deletePoint(int n) {
         mPoints.remove(n);
+        if (mPoints.size() < 2) {
+            reset();
+        }
         Collections.sort(mPoints);
     }