1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.gallery3d.filtershow.filters; 18 19 import android.util.JsonReader; 20 import android.util.JsonWriter; 21 22 import com.android.gallery3d.R; 23 import com.android.gallery3d.filtershow.controller.BasicParameterInt; 24 import com.android.gallery3d.filtershow.controller.Parameter; 25 import com.android.gallery3d.filtershow.editors.EditorVignette; 26 import com.android.gallery3d.filtershow.imageshow.Oval; 27 28 import java.io.IOException; 29 30 public class FilterVignetteRepresentation extends FilterRepresentation implements Oval { 31 private static final String LOGTAG = "FilterVignetteRepresentation"; 32 33 private float mCenterX = .5f; 34 private float mCenterY = .5f; 35 private float mRadiusX = .5f; 36 private float mRadiusY = .5f; 37 public static final int MODE_VIGNETTE = 0; 38 public static final int MODE_EXPOSURE = 1; 39 public static final int MODE_SATURATION = 2; 40 public static final int MODE_CONTRAST = 3; 41 public static final int MODE_FALLOFF = 4; 42 private static int MIN = -100; 43 private static int MAX = 100; 44 private static int MAXFALLOF = 200; 45 46 private BasicParameterInt mParamVignette = new BasicParameterInt(MODE_VIGNETTE, 50, MIN, MAX); 47 private BasicParameterInt mParamExposure = new BasicParameterInt(MODE_EXPOSURE, 0, MIN, MAX); 48 private BasicParameterInt mParamSaturation = new BasicParameterInt(MODE_SATURATION, 0, MIN, MAX); 49 private BasicParameterInt mParamContrast = new BasicParameterInt(MODE_CONTRAST, 0, MIN, MAX); 50 private BasicParameterInt mParamFalloff = new BasicParameterInt(MODE_FALLOFF, 40, 0, MAXFALLOF); 51 private BasicParameterInt[] mAllParam = { 52 mParamVignette, 53 mParamExposure, 54 mParamSaturation, 55 mParamContrast, 56 mParamFalloff}; 57 private int mParameterMode; 58 59 public FilterVignetteRepresentation() { 60 super("Vignette"); 61 setSerializationName("VIGNETTE"); 62 setShowParameterValue(true); 63 setFilterType(FilterRepresentation.TYPE_VIGNETTE); 64 setTextId(R.string.vignette); 65 setEditorId(EditorVignette.ID); 66 setName("Vignette"); 67 setFilterClass(ImageFilterVignette.class); 68 } 69 70 @Override 71 public void useParametersFrom(FilterRepresentation a) { 72 super.useParametersFrom(a); 73 FilterVignetteRepresentation rep = (FilterVignetteRepresentation) a; 74 mCenterX = rep.mCenterX; 75 mCenterY = rep.mCenterY; 76 mRadiusX = rep.mRadiusX; 77 mRadiusY = rep.mRadiusY; 78 mParamVignette.setValue(rep.mParamVignette.getValue()); 79 mParamExposure.setValue(rep.mParamExposure.getValue()); 80 mParamSaturation.setValue(rep.mParamSaturation.getValue()); 81 mParamContrast.setValue(rep.mParamContrast.getValue()); 82 mParamFalloff.setValue(rep.mParamFalloff.getValue()); 83 } 84 85 public int getValue(int mode) { 86 return mAllParam[mode].getValue(); 87 } 88 89 public void setValue(int mode, int value) { 90 mAllParam[mode].setValue(value); 91 } 92 93 @Override 94 public String toString() { 95 return getName() + " : " + mCenterX + ", " + mCenterY + " radius: " + mRadiusX; 96 } 97 98 @Override 99 public FilterRepresentation copy() { 100 FilterVignetteRepresentation representation = new FilterVignetteRepresentation(); 101 copyAllParameters(representation); 102 return representation; 103 } 104 105 @Override 106 protected void copyAllParameters(FilterRepresentation representation) { 107 super.copyAllParameters(representation); 108 representation.useParametersFrom(this); 109 } 110 111 @Override 112 public void setCenter(float centerX, float centerY) { 113 mCenterX = centerX; 114 mCenterY = centerY; 115 } 116 117 @Override 118 public float getCenterX() { 119 return mCenterX; 120 } 121 122 @Override 123 public float getCenterY() { 124 return mCenterY; 125 } 126 127 @Override 128 public void setRadius(float radiusX, float radiusY) { 129 mRadiusX = radiusX; 130 mRadiusY = radiusY; 131 } 132 133 @Override 134 public void setRadiusX(float radiusX) { 135 mRadiusX = radiusX; 136 } 137 138 @Override 139 public void setRadiusY(float radiusY) { 140 mRadiusY = radiusY; 141 } 142 143 @Override 144 public float getRadiusX() { 145 return mRadiusX; 146 } 147 148 @Override 149 public float getRadiusY() { 150 return mRadiusY; 151 } 152 153 public boolean isCenterSet() { 154 return mCenterX != Float.NaN; 155 } 156 157 @Override 158 public boolean isNil() { 159 return false; 160 } 161 162 @Override 163 public boolean equals(FilterRepresentation representation) { 164 if (!super.equals(representation)) { 165 return false; 166 } 167 if (representation instanceof FilterVignetteRepresentation) { 168 FilterVignetteRepresentation rep = (FilterVignetteRepresentation) representation; 169 for (int i = 0; i < mAllParam.length; i++) { 170 if (mAllParam[i].getValue() != rep.mAllParam[i].getValue()) 171 return false; 172 } 173 if (rep.getCenterX() == getCenterX() 174 && rep.getCenterY() == getCenterY() 175 && rep.getRadiusX() == getRadiusX() 176 && rep.getRadiusY() == getRadiusY()) { 177 return true; 178 } 179 } 180 return false; 181 } 182 183 private static final String ELLIPSE = "ellipse"; 184 private static final String ARGS = "adjust"; 185 @Override 186 public void serializeRepresentation(JsonWriter writer) throws IOException { 187 writer.beginObject(); 188 writer.name(ELLIPSE); 189 writer.beginArray(); 190 writer.value(mCenterX); 191 writer.value(mCenterY); 192 writer.value(mRadiusX); 193 writer.value(mRadiusY); 194 writer.endArray(); 195 196 writer.name(ARGS); 197 writer.beginArray(); 198 writer.value(mParamVignette.getValue()); 199 writer.value(mParamExposure.getValue()); 200 writer.value(mParamSaturation.getValue()); 201 writer.value(mParamContrast.getValue()); 202 writer.value(mParamFalloff.getValue()); 203 writer.endArray(); 204 writer.endObject(); 205 } 206 207 208 @Override 209 public void deSerializeRepresentation(JsonReader sreader) throws IOException { 210 sreader.beginObject(); 211 212 while (sreader.hasNext()) { 213 String name = sreader.nextName(); 214 if (name.startsWith(ELLIPSE)) { 215 sreader.beginArray(); 216 sreader.hasNext(); 217 mCenterX = (float) sreader.nextDouble(); 218 sreader.hasNext(); 219 mCenterY = (float) sreader.nextDouble(); 220 sreader.hasNext(); 221 mRadiusX = (float) sreader.nextDouble(); 222 sreader.hasNext(); 223 mRadiusY = (float) sreader.nextDouble(); 224 sreader.hasNext(); 225 sreader.endArray(); 226 } else if (name.startsWith(ARGS)) { 227 sreader.beginArray(); 228 sreader.hasNext(); 229 mParamVignette.setValue(sreader.nextInt()); 230 sreader.hasNext(); 231 mParamExposure.setValue(sreader.nextInt()); 232 sreader.hasNext(); 233 mParamSaturation.setValue(sreader.nextInt()); 234 sreader.hasNext(); 235 mParamContrast.setValue(sreader.nextInt()); 236 sreader.hasNext(); 237 mParamFalloff.setValue(sreader.nextInt()); 238 sreader.hasNext(); 239 sreader.endArray(); 240 } else { 241 sreader.skipValue(); 242 } 243 } 244 sreader.endObject(); 245 } 246 public int getParameterMode() { 247 return mParameterMode; 248 } 249 250 public void setParameterMode(int parameterMode) { 251 mParameterMode = parameterMode; 252 } 253 254 public int getCurrentParameter() { 255 return getValue(mParameterMode); 256 } 257 258 public void setCurrentParameter(int value) { 259 setValue(mParameterMode, value); 260 } 261 262 public BasicParameterInt getFilterParameter(int index) { 263 return mAllParam[index]; 264 } 265 266 } 267