Home | History | Annotate | Download | only in editors
      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.editors;
     18 
     19 import android.content.Context;
     20 import android.content.res.Resources;
     21 import android.graphics.Color;
     22 import android.graphics.drawable.GradientDrawable;
     23 import android.view.LayoutInflater;
     24 import android.view.View;
     25 import android.view.ViewGroup;
     26 import android.widget.Button;
     27 import android.widget.LinearLayout;
     28 import android.widget.SeekBar;
     29 import android.widget.TextView;
     30 
     31 import com.android.gallery3d.R;
     32 import com.android.gallery3d.filtershow.colorpicker.ColorCompareView;
     33 import com.android.gallery3d.filtershow.colorpicker.ColorHueView;
     34 import com.android.gallery3d.filtershow.colorpicker.ColorListener;
     35 import com.android.gallery3d.filtershow.colorpicker.ColorOpacityView;
     36 import com.android.gallery3d.filtershow.colorpicker.ColorSVRectView;
     37 import com.android.gallery3d.filtershow.controller.BasicParameterInt;
     38 import com.android.gallery3d.filtershow.controller.ParameterColor;
     39 import com.android.gallery3d.filtershow.filters.FilterColorBorderRepresentation;
     40 
     41 import java.util.Arrays;
     42 
     43 public class EditorColorBorderTabletUI {
     44     private EditorColorBorder mEditorDraw;
     45     private static int sIconDim = 120;
     46     private int mSelectedColorButton;
     47     private FilterColorBorderRepresentation mRep;
     48     private Button[] mColorButton;
     49     private ColorHueView mHueView;
     50     private ColorSVRectView mSatValView;
     51     private ColorOpacityView mOpacityView;
     52     private ColorCompareView mColorCompareView;
     53 
     54     private int[] mBasColors;
     55     private int mSelected;
     56     private int mTransparent;
     57     private SeekBar mCBSizeSeekBar;
     58     private SeekBar mCBCornerSizeSeekBar;
     59     TextView mCBCornerSizeValue;
     60     TextView mCBSizeValue;
     61 
     62     private int[] ids = {
     63             R.id.draw_color_button01,
     64             R.id.draw_color_button02,
     65             R.id.draw_color_button03,
     66             R.id.draw_color_button04,
     67             R.id.draw_color_button05,
     68     };
     69 
     70     public void setColorBorderRepresentation(FilterColorBorderRepresentation rep) {
     71         mRep = rep;
     72         BasicParameterInt size;
     73         size = (BasicParameterInt) mRep.getParam(FilterColorBorderRepresentation.PARAM_SIZE);
     74         mCBSizeSeekBar.setMax(size.getMaximum() - size.getMinimum());
     75         mCBSizeSeekBar.setProgress(size.getValue());
     76 
     77         BasicParameterInt radius;
     78         radius = (BasicParameterInt) mRep.getParam(FilterColorBorderRepresentation.PARAM_RADIUS);
     79         mCBCornerSizeSeekBar.setMax(radius.getMaximum() - radius.getMinimum());
     80         mCBCornerSizeSeekBar.setProgress(radius.getValue());
     81 
     82         ParameterColor color;
     83         color = (ParameterColor) mRep.getParam(FilterColorBorderRepresentation.PARAM_COLOR);
     84         mBasColors = color.getColorPalette();
     85         color.setValue(mBasColors[mSelectedColorButton]);
     86     }
     87 
     88     public EditorColorBorderTabletUI(EditorColorBorder editorDraw, Context context, View base) {
     89         mEditorDraw = editorDraw;
     90         mBasColors = editorDraw.mBasColors;
     91         LayoutInflater inflater =
     92                 (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     93         LinearLayout lp = (LinearLayout) inflater.inflate(
     94                 R.layout.filtershow_color_border_ui, (ViewGroup) base, true);
     95 
     96         Resources res = context.getResources();
     97         sIconDim = res.getDimensionPixelSize(R.dimen.draw_style_icon_dim);
     98         LinearLayout buttonContainer = (LinearLayout) lp.findViewById(R.id.listStyles);
     99 
    100         mCBCornerSizeSeekBar = (SeekBar) lp.findViewById(R.id.colorBorderCornerSizeSeekBar);
    101         mCBCornerSizeValue = (TextView) lp.findViewById(R.id.colorBorderCornerValue);
    102         mCBSizeSeekBar = (SeekBar) lp.findViewById(R.id.colorBorderSizeSeekBar);
    103 
    104         mCBSizeValue = (TextView) lp.findViewById(R.id.colorBorderSizeValue);
    105         setupCBSizeSeekBar(lp);
    106         setupCBCornerSizeSeekBar(lp);
    107         setupColor(lp, res);
    108     }
    109 
    110     private void setupCBSizeSeekBar(LinearLayout lp) {
    111         mCBSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    112             @Override
    113             public void onStopTrackingTouch(SeekBar seekBar) {
    114             }
    115             @Override
    116             public void onStartTrackingTouch(SeekBar seekBar) {
    117             }
    118             @Override
    119             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    120                 int type = FilterColorBorderRepresentation.PARAM_SIZE;
    121                 BasicParameterInt size = (BasicParameterInt) mRep.getParam(type);
    122                 size.setValue(progress + size.getMinimum());
    123                 mCBSizeValue.setText(Integer.toString(size.getValue()));
    124                 mEditorDraw.commitLocalRepresentation();
    125             }
    126         });
    127 
    128     }
    129 
    130     private void setupCBCornerSizeSeekBar(LinearLayout lp) {
    131         mCBCornerSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    132             @Override
    133             public void onStopTrackingTouch(SeekBar seekBar) {
    134             }
    135             @Override
    136             public void onStartTrackingTouch(SeekBar seekBar) {
    137             }
    138             @Override
    139             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    140                 int type = FilterColorBorderRepresentation.PARAM_RADIUS;
    141                 BasicParameterInt size = (BasicParameterInt) mRep.getParam(type);
    142                 size.setValue(progress + size.getMinimum());
    143                 mCBCornerSizeValue.setText(size.getValue() + "");
    144                 mEditorDraw.commitLocalRepresentation();
    145             }
    146         });
    147 
    148     }
    149 
    150     private void setupColor(LinearLayout lp, Resources res) {
    151         final LinearLayout ctls = (LinearLayout) lp.findViewById(R.id.controls);
    152         final LinearLayout pick = (LinearLayout) lp.findViewById(R.id.colorPicker);
    153         Button b = (Button) lp.findViewById(R.id.draw_color_popupbutton);
    154         b.setOnClickListener(new View.OnClickListener() {
    155 
    156             @Override
    157             public void onClick(View view) {
    158                 boolean b = ctls.getVisibility() == View.VISIBLE;
    159                 ctls.setVisibility((b) ? View.GONE : View.VISIBLE);
    160                 pick.setVisibility((!b) ? View.GONE : View.VISIBLE);
    161             }
    162         }
    163         );
    164 
    165         mTransparent = res.getColor(R.color.color_chooser_unslected_border);
    166         mSelected = res.getColor(R.color.color_chooser_slected_border);
    167 
    168         mColorButton = new Button[ids.length];
    169         for (int i = 0; i < ids.length; i++) {
    170             mColorButton[i] = (Button) lp.findViewById(ids[i]);
    171             float[] hsvo = new float[4];
    172             Color.colorToHSV(mBasColors[i], hsvo);
    173             hsvo[3] = (0xFF & (mBasColors[i] >> 24)) / (float) 255;
    174             mColorButton[i].setTag(hsvo);
    175             GradientDrawable sd = ((GradientDrawable) mColorButton[i].getBackground());
    176             sd.setColor(mBasColors[i]);
    177             sd.setStroke(3, (0 == i) ? mSelected : mTransparent);
    178             final int buttonNo = i;
    179             mColorButton[i].setOnClickListener(new View.OnClickListener() {
    180                 @Override
    181                 public void onClick(View arg0) {
    182                     mSelectedColorButton = buttonNo;
    183                     float[] hsvo = Arrays.copyOf((float[]) mColorButton[buttonNo].getTag(), 4);
    184                     resetBorders();
    185                     if (mRep == null) {
    186                         return;
    187                     }
    188                     int type = FilterColorBorderRepresentation.PARAM_COLOR;
    189                     ParameterColor pram = (ParameterColor) mRep.getParam(type);
    190                     pram.setValue(mBasColors[mSelectedColorButton]);
    191                     mEditorDraw.commitLocalRepresentation();
    192                     mHueView.setColor(hsvo);
    193                     mSatValView.setColor(hsvo);
    194                     mOpacityView.setColor(hsvo);
    195                     mColorCompareView.setOrigColor(hsvo);
    196 
    197                 }
    198             });
    199         }
    200         mHueView = (ColorHueView) lp.findViewById(R.id.ColorHueView);
    201         mSatValView = (ColorSVRectView) lp.findViewById(R.id.colorRectView);
    202         mOpacityView = (ColorOpacityView) lp.findViewById(R.id.colorOpacityView);
    203         mColorCompareView = (ColorCompareView) lp.findViewById(R.id.btnSelect);
    204 
    205         float[] hsvo = new float[4];
    206         Color.colorToHSV(mBasColors[0], hsvo);
    207         hsvo[3] = (0xFF & (mBasColors[0] >> 24)) / (float) 255;
    208         mColorCompareView.setOrigColor(hsvo);
    209 
    210         ColorListener[] colorViews = {mHueView, mSatValView, mOpacityView, mColorCompareView};
    211         for (int i = 0; i < colorViews.length; i++) {
    212             colorViews[i].setColor(hsvo);
    213             for (int j = 0; j < colorViews.length; j++) {
    214                 if (i == j) {
    215                     continue;
    216                 }
    217                 colorViews[i].addColorListener(colorViews[j]);
    218             }
    219         }
    220 
    221         ColorListener colorListener = new ColorListener() {
    222             @Override
    223             public void setColor(float[] hsvo) {
    224                 int color = Color.HSVToColor((int) (hsvo[3] * 255), hsvo);
    225                 Button b = mColorButton[mSelectedColorButton];
    226                 float[] f = (float[]) b.getTag();
    227                 System.arraycopy(hsvo, 0, f, 0, 4);
    228                 mBasColors[mSelectedColorButton] = color;
    229                 GradientDrawable sd = ((GradientDrawable) b.getBackground());
    230                 sd.setColor(color);
    231                 resetBorders();
    232                 ParameterColor pram;
    233                 pram = (ParameterColor) mRep.getParam(FilterColorBorderRepresentation.PARAM_COLOR);
    234                 pram.setValue(color);
    235                 mEditorDraw.commitLocalRepresentation();
    236             }
    237             @Override
    238             public void addColorListener(ColorListener l) {
    239             }
    240         };
    241 
    242         for (int i = 0; i < colorViews.length; i++) {
    243             colorViews[i].addColorListener(colorListener);
    244         }
    245     }
    246 
    247     private void resetBorders() {
    248         for (int i = 0; i < ids.length; i++) {
    249             final Button button = mColorButton[i];
    250             GradientDrawable sd = ((GradientDrawable) button.getBackground());
    251             sd.setColor(mBasColors[i]);
    252             sd.setStroke(3, (mSelectedColorButton == i) ? mSelected : mTransparent);
    253         }
    254     }
    255 }
    256