Home | History | Annotate | Download | only in colorpicker
      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.colorpicker;
     18 
     19 import android.app.Dialog;
     20 import android.content.Context;
     21 import android.content.res.Configuration;
     22 import android.graphics.Color;
     23 import android.graphics.drawable.GradientDrawable;
     24 import android.util.DisplayMetrics;
     25 import android.view.View;
     26 import android.view.ViewGroup;
     27 import android.view.Window;
     28 import android.view.WindowManager;
     29 import android.widget.Button;
     30 import android.widget.ImageButton;
     31 import android.widget.ToggleButton;
     32 
     33 import com.android.gallery3d.R;
     34 import com.android.gallery3d.filtershow.FilterShowActivity;
     35 import com.android.photos.views.GalleryThumbnailView;
     36 
     37 public class ColorPickerDialog extends Dialog   {
     38     ToggleButton mSelectedButton;
     39     ColorHueView mColorHueView;
     40     ColorSVRectView mColorSVRectView;
     41     ColorOpacityView mColorOpacityView;
     42     ColorCompareView mColorCompareView;
     43 
     44     float[] mHSVO = new float[4]; // hue=0..360, sat & val opacity = 0...1
     45 
     46     public ColorPickerDialog(Context context, final ColorListener cl) {
     47         super(context);
     48         DisplayMetrics metrics = new DisplayMetrics();
     49         WindowManager wm =  (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
     50         wm.getDefaultDisplay().getMetrics(metrics);
     51         int height = metrics.heightPixels*8/10;
     52         int width = metrics.widthPixels*8/10;
     53         getWindow().setLayout(width, height);
     54         requestWindowFeature(Window.FEATURE_NO_TITLE);
     55         setContentView(R.layout.filtershow_color_picker);
     56         mColorHueView = (ColorHueView) findViewById(R.id.ColorHueView);
     57         mColorSVRectView = (ColorSVRectView) findViewById(R.id.colorRectView);
     58         mColorOpacityView = (ColorOpacityView) findViewById(R.id.colorOpacityView);
     59         mColorCompareView = (ColorCompareView) findViewById(R.id.btnSelect);
     60 
     61         float[] hsvo = new float[] {
     62                 123, .9f, 1, 1 };
     63 
     64         ImageButton apply = (ImageButton) findViewById(R.id.applyColorPick);
     65         ImageButton cancel = (ImageButton) findViewById(R.id.cancelColorPick);
     66 
     67         apply.setOnClickListener(new View.OnClickListener() {
     68             @Override
     69             public void onClick(View view) {
     70                 cl.setColor(mHSVO);
     71                 ColorPickerDialog.this.dismiss();
     72             }
     73         });
     74         cancel.setOnClickListener(new View.OnClickListener() {
     75             @Override
     76             public void onClick(View view) {
     77                 ColorPickerDialog.this.dismiss();
     78             }
     79         });
     80         ColorListener [] c = {mColorCompareView,mColorSVRectView,mColorOpacityView,mColorHueView};
     81         for (int i = 0; i < c.length; i++) {
     82             c[i].setColor(hsvo);
     83             for (int j = 0; j < c.length; j++) {
     84                 if (i==j) {
     85                      continue;
     86                 }
     87                c[i].addColorListener(c[j]);
     88             }
     89         }
     90 
     91         ColorListener colorListener = new ColorListener(){
     92             @Override
     93             public void setColor(float[] hsvo) {
     94                 System.arraycopy(hsvo, 0, mHSVO, 0, mHSVO.length);
     95                 int color = Color.HSVToColor(hsvo);
     96                 setButtonColor(mSelectedButton, hsvo);
     97             }
     98 
     99             @Override
    100             public void addColorListener(ColorListener l) {
    101             }
    102         };
    103 
    104         for (int i = 0; i < c.length; i++) {
    105             c[i].addColorListener(colorListener);
    106         }
    107         setOnShowListener((FilterShowActivity) context);
    108         setOnDismissListener((FilterShowActivity) context);
    109     }
    110 
    111     void toggleClick(ToggleButton v, int[] buttons, boolean isChecked) {
    112         int id = v.getId();
    113         if (!isChecked) {
    114             mSelectedButton = null;
    115             return;
    116         }
    117         for (int i = 0; i < buttons.length; i++) {
    118             if (id != buttons[i]) {
    119                 ToggleButton b = (ToggleButton) findViewById(buttons[i]);
    120                 b.setChecked(false);
    121             }
    122         }
    123         mSelectedButton = v;
    124 
    125         float[] hsv = (float[]) v.getTag();
    126 
    127         ColorHueView csv = (ColorHueView) findViewById(R.id.ColorHueView);
    128         ColorSVRectView cwv = (ColorSVRectView) findViewById(R.id.colorRectView);
    129         ColorOpacityView cvv = (ColorOpacityView) findViewById(R.id.colorOpacityView);
    130         cwv.setColor(hsv);
    131         cvv.setColor(hsv);
    132         csv.setColor(hsv);
    133     }
    134 
    135     public void setOrigColor(float[] hsvo) {
    136         mColorCompareView.setOrigColor(hsvo);
    137     }
    138 
    139     public void setColor(float[] hsvo) {
    140         mColorOpacityView.setColor(hsvo);
    141         mColorHueView.setColor(hsvo);
    142         mColorSVRectView.setColor(hsvo);
    143         mColorCompareView.setColor(hsvo);
    144     }
    145 
    146     private void setButtonColor(ToggleButton button, float[] hsv) {
    147         if (button == null) {
    148             return;
    149         }
    150         int color = Color.HSVToColor(hsv);
    151         button.setBackgroundColor(color);
    152         float[] fg = new float[] {
    153                 (hsv[0] + 180) % 360,
    154                 hsv[1],
    155                         (hsv[2] > .5f) ? .1f : .9f
    156         };
    157         button.setTextColor(Color.HSVToColor(fg));
    158         button.setTag(hsv);
    159     }
    160 
    161 }
    162