package com.android.gallery3d.filtershow.filters; import android.util.JsonReader; import android.util.JsonWriter; import android.util.Log; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.ui.ControlPoint; import com.android.gallery3d.filtershow.ui.Spline; import java.io.IOException; /** * TODO: Insert description here. (generated by hoford) */ public class FilterCurvesRepresentation extends FilterRepresentation { private static final String LOGTAG = "FilterCurvesRepresentation"; public static final String SERIALIZATION_NAME = "Curve"; private static final int MAX_SPLINE_NUMBER = 4; private Spline[] mSplines = new Spline[MAX_SPLINE_NUMBER]; public FilterCurvesRepresentation() { super("Curves"); setSerializationName("CURVES"); setFilterClass(ImageFilterCurves.class); setTextId(R.string.curvesRGB); setOverlayId(R.drawable.filtershow_button_colors_curve); setEditorId(R.id.imageCurves); setShowParameterValue(false); setSupportsPartialRendering(true); 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[MAX_SPLINE_NUMBER]; 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() { for (int i = 0; i < MAX_SPLINE_NUMBER; i++) { if (getSpline(i) != null && !getSpline(i).isOriginal()) { return false; } } return true; } public void reset() { Spline spline = new Spline(); spline.addPoint(0.0f, 1.0f); spline.addPoint(1.0f, 0.0f); for (int i = 0; i < MAX_SPLINE_NUMBER; i++) { mSplines[i] = new Spline(spline); } } public void setSpline(int splineIndex, Spline s) { mSplines[splineIndex] = s; } public Spline getSpline(int splineIndex) { return mSplines[splineIndex]; } @Override public void serializeRepresentation(JsonWriter writer) throws IOException { writer.beginObject(); { writer.name(NAME_TAG); writer.value(getName()); for (int i = 0; i < mSplines.length; i++) { writer.name(SERIALIZATION_NAME + i); writer.beginArray(); int nop = mSplines[i].getNbPoints(); for (int j = 0; j < nop; j++) { ControlPoint p = mSplines[i].getPoint(j); writer.beginArray(); writer.value(p.x); writer.value(p.y); writer.endArray(); } writer.endArray(); } } writer.endObject(); } @Override public void deSerializeRepresentation(JsonReader sreader) throws IOException { sreader.beginObject(); Spline[] spline = new Spline[MAX_SPLINE_NUMBER]; while (sreader.hasNext()) { String name = sreader.nextName(); if (NAME_TAG.equals(name)) { setName(sreader.nextString()); } else if (name.startsWith(SERIALIZATION_NAME)) { int curveNo = Integer.parseInt(name.substring(SERIALIZATION_NAME.length())); spline[curveNo] = new Spline(); sreader.beginArray(); while (sreader.hasNext()) { sreader.beginArray(); sreader.hasNext(); float x = (float) sreader.nextDouble(); sreader.hasNext(); float y = (float) sreader.nextDouble(); sreader.endArray(); spline[curveNo].addPoint(x, y); } sreader.endArray(); } } mSplines = spline; sreader.endObject(); } }