Home | History | Annotate | Download | only in filters
      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