Home | History | Annotate | Download | only in filters
      1 /*
      2  * Copyright (C) 2013 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.controller.ParameterSet;
     26 import com.android.gallery3d.filtershow.editors.EditorChanSat;
     27 import com.android.gallery3d.filtershow.imageshow.ControlPoint;
     28 import com.android.gallery3d.filtershow.imageshow.Spline;
     29 
     30 import java.io.IOException;
     31 import java.util.Vector;
     32 
     33 /**
     34  * Representation for a filter that has per channel & Master saturation
     35  */
     36 public class FilterChanSatRepresentation extends FilterRepresentation implements ParameterSet {
     37     private static final String LOGTAG = "FilterChanSatRepresentation";
     38     private static final String ARGS = "ARGS";
     39     private static final String SERIALIZATION_NAME = "channelsaturation";
     40 
     41     public static final int MODE_MASTER = 0;
     42     public static final int MODE_RED = 1;
     43     public static final int MODE_YELLOW = 2;
     44     public static final int MODE_GREEN = 3;
     45     public static final int MODE_CYAN = 4;
     46     public static final int MODE_BLUE = 5;
     47     public static final int MODE_MAGENTA = 6;
     48     private int mParameterMode = MODE_MASTER;
     49 
     50     private static int MINSAT = -100;
     51     private static int MAXSAT = 100;
     52     private BasicParameterInt mParamMaster = new BasicParameterInt(MODE_MASTER, 0, MINSAT, MAXSAT);
     53     private BasicParameterInt mParamRed = new BasicParameterInt(MODE_RED, 0, MINSAT, MAXSAT);
     54     private BasicParameterInt mParamYellow = new BasicParameterInt(MODE_YELLOW, 0, MINSAT, MAXSAT);
     55     private BasicParameterInt mParamGreen = new BasicParameterInt(MODE_GREEN, 0, MINSAT, MAXSAT);
     56     private BasicParameterInt mParamCyan = new BasicParameterInt(MODE_CYAN, 0, MINSAT, MAXSAT);
     57     private BasicParameterInt mParamBlue = new BasicParameterInt(MODE_BLUE, 0, MINSAT, MAXSAT);
     58     private BasicParameterInt mParamMagenta = new BasicParameterInt(MODE_MAGENTA, 0, MINSAT, MAXSAT);
     59 
     60     private BasicParameterInt[] mAllParam = {
     61             mParamMaster,
     62             mParamRed,
     63             mParamYellow,
     64             mParamGreen,
     65             mParamCyan,
     66             mParamBlue,
     67             mParamMagenta};
     68 
     69     public FilterChanSatRepresentation() {
     70         super("ChannelSaturation");
     71         setTextId(R.string.saturation);
     72         setFilterType(FilterRepresentation.TYPE_NORMAL);
     73         setSerializationName(SERIALIZATION_NAME);
     74         setFilterClass(ImageFilterChanSat.class);
     75         setEditorId(EditorChanSat.ID);
     76         setSupportsPartialRendering(true);
     77     }
     78 
     79     public String toString() {
     80         return getName() + " : " + mParamRed + ", " + mParamCyan + ", " + mParamRed
     81                 + ", " + mParamGreen + ", " + mParamMaster + ", " + mParamYellow;
     82     }
     83 
     84     @Override
     85     public FilterRepresentation copy() {
     86         FilterChanSatRepresentation representation = new FilterChanSatRepresentation();
     87         copyAllParameters(representation);
     88         return representation;
     89     }
     90 
     91     @Override
     92     protected void copyAllParameters(FilterRepresentation representation) {
     93         super.copyAllParameters(representation);
     94         representation.useParametersFrom(this);
     95     }
     96 
     97     public void useParametersFrom(FilterRepresentation a) {
     98         if (a instanceof FilterChanSatRepresentation) {
     99             FilterChanSatRepresentation representation = (FilterChanSatRepresentation) a;
    100 
    101             for (int i = 0; i < mAllParam.length; i++) {
    102                 mAllParam[i].copyFrom(representation.mAllParam[i]);
    103             }
    104         }
    105     }
    106 
    107     @Override
    108     public boolean equals(FilterRepresentation representation) {
    109         if (!super.equals(representation)) {
    110             return false;
    111         }
    112         if (representation instanceof FilterChanSatRepresentation) {
    113             FilterChanSatRepresentation rep = (FilterChanSatRepresentation) representation;
    114             for (int i = 0; i < mAllParam.length; i++) {
    115                 if (rep.getValue(i) != getValue(i))
    116                     return false;
    117             }
    118             return true;
    119         }
    120         return false;
    121     }
    122 
    123     public int getValue(int mode) {
    124         return mAllParam[mode].getValue();
    125     }
    126 
    127     public void setValue(int mode, int value) {
    128         mAllParam[mode].setValue(value);
    129     }
    130 
    131     public int getMinimum() {
    132         return mParamMaster.getMinimum();
    133     }
    134 
    135     public int getMaximum() {
    136         return mParamMaster.getMaximum();
    137     }
    138 
    139     public int getParameterMode() {
    140         return mParameterMode;
    141     }
    142 
    143     public void setParameterMode(int parameterMode) {
    144         mParameterMode = parameterMode;
    145     }
    146 
    147     public int getCurrentParameter() {
    148         return getValue(mParameterMode);
    149     }
    150 
    151     public void setCurrentParameter(int value) {
    152         setValue(mParameterMode, value);
    153     }
    154 
    155     @Override
    156     public int getNumberOfParameters() {
    157         return 6;
    158     }
    159 
    160     @Override
    161     public Parameter getFilterParameter(int index) {
    162         return mAllParam[index];
    163     }
    164 
    165     @Override
    166     public void serializeRepresentation(JsonWriter writer) throws IOException {
    167         writer.beginObject();
    168 
    169         writer.name(ARGS);
    170         writer.beginArray();
    171         writer.value(getValue(MODE_MASTER));
    172         writer.value(getValue(MODE_RED));
    173         writer.value(getValue(MODE_YELLOW));
    174         writer.value(getValue(MODE_GREEN));
    175         writer.value(getValue(MODE_CYAN));
    176         writer.value(getValue(MODE_BLUE));
    177         writer.value(getValue(MODE_MAGENTA));
    178         writer.endArray();
    179         writer.endObject();
    180     }
    181 
    182     @Override
    183     public void deSerializeRepresentation(JsonReader sreader) throws IOException {
    184         sreader.beginObject();
    185 
    186         while (sreader.hasNext()) {
    187             String name = sreader.nextName();
    188             if (name.startsWith(ARGS)) {
    189                 sreader.beginArray();
    190                 sreader.hasNext();
    191                 setValue(MODE_MASTER, sreader.nextInt());
    192                 sreader.hasNext();
    193                 setValue(MODE_RED, sreader.nextInt());
    194                 sreader.hasNext();
    195                 setValue(MODE_YELLOW, sreader.nextInt());
    196                 sreader.hasNext();
    197                 setValue(MODE_GREEN, sreader.nextInt());
    198                 sreader.hasNext();
    199                 setValue(MODE_CYAN, sreader.nextInt());
    200                 sreader.hasNext();
    201                 setValue(MODE_BLUE, sreader.nextInt());
    202                 sreader.hasNext();
    203                 setValue(MODE_MAGENTA, sreader.nextInt());
    204                 sreader.hasNext();
    205                 sreader.endArray();
    206             } else {
    207                 sreader.skipValue();
    208             }
    209         }
    210         sreader.endObject();
    211     }
    212 }