OSDN Git Service

Draw UI fixes
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / filtershow / controller / ColorChooser.java
1 package com.android.gallery3d.filtershow.controller;
2
3 import android.app.ActionBar.LayoutParams;
4 import android.content.Context;
5 import android.content.res.Resources;
6 import android.graphics.Color;
7 import android.graphics.drawable.GradientDrawable;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.Button;
12 import android.widget.LinearLayout;
13
14 import com.android.gallery3d.R;
15 import com.android.gallery3d.filtershow.colorpicker.ColorListener;
16 import com.android.gallery3d.filtershow.colorpicker.ColorPickerDialog;
17 import com.android.gallery3d.filtershow.editors.Editor;
18
19 import java.util.Arrays;
20 import java.util.Vector;
21
22 public class ColorChooser implements Control {
23     private final String LOGTAG = "StyleChooser";
24     protected ParameterColor mParameter;
25     protected LinearLayout mLinearLayout;
26     protected Editor mEditor;
27     private View mTopView;
28     private Vector<Button> mIconButton = new Vector<Button>();
29     protected int mLayoutID = R.layout.filtershow_control_color_chooser;
30     Context mContext;
31     private int mTransparent;
32     private int mSelected;
33     private static final int OPACITY_OFFSET = 3;
34     private int[] mButtonsID = {
35             R.id.draw_color_button01,
36             R.id.draw_color_button02,
37             R.id.draw_color_button03,
38             R.id.draw_color_button04,
39             R.id.draw_color_button05,
40     };
41     private Button[] mButton = new Button[mButtonsID.length];
42
43     int mSelectedButton = 0;
44
45     @Override
46     public void setUp(ViewGroup container, Parameter parameter, Editor editor) {
47         container.removeAllViews();
48         Resources res = container.getContext().getResources();
49         mTransparent  = res.getColor(R.color.color_chooser_unslected_border);
50         mSelected    = res.getColor(R.color.color_chooser_slected_border);
51         mEditor = editor;
52         mContext = container.getContext();
53         int iconDim = res.getDimensionPixelSize(R.dimen.draw_style_icon_dim);
54         mParameter = (ParameterColor) parameter;
55         LayoutInflater inflater =
56                 (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
57         mTopView = inflater.inflate(mLayoutID, container, true);
58         mLinearLayout = (LinearLayout) mTopView.findViewById(R.id.listStyles);
59         mTopView.setVisibility(View.VISIBLE);
60
61         mIconButton.clear();
62         LayoutParams lp = new LayoutParams(iconDim, iconDim);
63         int [] palette = mParameter.getColorPalette();
64         for (int i = 0; i < mButtonsID.length; i++) {
65             final Button button = (Button) mTopView.findViewById(mButtonsID[i]);
66             mButton[i] = button;
67             float[] hsvo = new float[4];
68             Color.colorToHSV(palette[i], hsvo);
69             hsvo[OPACITY_OFFSET] = (0xFF & (palette[i] >> 24)) / (float) 255;
70             button.setTag(hsvo);
71             GradientDrawable sd = ((GradientDrawable) button.getBackground());
72             sd.setColor(palette[i]);
73             sd.setStroke(3, (mSelectedButton == i) ? mSelected : mTransparent);
74
75             final int buttonNo = i;
76             button.setOnClickListener(new View.OnClickListener() {
77                 @Override
78                 public void onClick(View arg0) {
79                     selectColor(arg0, buttonNo);
80                 }
81             });
82         }
83         Button button = (Button) mTopView.findViewById(R.id.draw_color_popupbutton);
84
85         button.setOnClickListener(new View.OnClickListener() {
86             @Override
87             public void onClick(View arg0) {
88                 showColorPicker();
89             }
90         });
91
92     }
93
94     public void setColorSet(int[] basColors) {
95         int []palette = mParameter.getColorPalette();
96         for (int i = 0; i < palette.length; i++) {
97             palette[i] = basColors[i];
98             float[] hsvo = new float[4];
99             Color.colorToHSV(palette[i], hsvo);
100             hsvo[OPACITY_OFFSET] = (0xFF & (palette[i] >> 24)) / (float) 255;
101             mButton[i].setTag(hsvo);
102             GradientDrawable sd = ((GradientDrawable) mButton[i].getBackground());
103             sd.setColor(palette[i]);
104         }
105
106     }
107
108     public int[] getColorSet() {
109         return  mParameter.getColorPalette();
110     }
111
112     private void resetBorders() {
113         int []palette = mParameter.getColorPalette();
114         for (int i = 0; i < mButtonsID.length; i++) {
115             final Button button = mButton[i];
116             GradientDrawable sd = ((GradientDrawable) button.getBackground());
117             sd.setColor(palette[i]);
118             sd.setStroke(3, (mSelectedButton == i) ? mSelected : mTransparent);
119         }
120     }
121
122     public void selectColor(View button, int buttonNo) {
123         mSelectedButton = buttonNo;
124         float[] hsvo = (float[]) button.getTag();
125         mParameter.setValue(Color.HSVToColor((int) (hsvo[OPACITY_OFFSET] * 255), hsvo));
126         resetBorders();
127         mEditor.commitLocalRepresentation();
128     }
129
130     @Override
131     public View getTopView() {
132         return mTopView;
133     }
134
135     @Override
136     public void setPrameter(Parameter parameter) {
137         mParameter = (ParameterColor) parameter;
138         updateUI();
139     }
140
141     @Override
142     public void updateUI() {
143         if (mParameter == null) {
144             return;
145         }
146     }
147
148     public void changeSelectedColor(float[] hsvo) {
149         int []palette = mParameter.getColorPalette();
150         int c = Color.HSVToColor((int) (hsvo[3] * 255), hsvo);
151         final Button button = mButton[mSelectedButton];
152         GradientDrawable sd = ((GradientDrawable) button.getBackground());
153         sd.setColor(c);
154         palette[mSelectedButton] = c;
155         mParameter.setValue(Color.HSVToColor((int) (hsvo[OPACITY_OFFSET] * 255), hsvo));
156         button.setTag(hsvo);
157         mEditor.commitLocalRepresentation();
158         button.invalidate();
159     }
160
161     public void showColorPicker() {
162         ColorListener cl = new ColorListener() {
163             @Override
164             public void setColor(float[] hsvo) {
165                 changeSelectedColor(hsvo);
166             }
167             @Override
168             public void addColorListener(ColorListener l) {
169             }
170         };
171         ColorPickerDialog cpd = new ColorPickerDialog(mContext, cl);
172         float[] c = (float[]) mButton[mSelectedButton].getTag();
173         cpd.setColor(Arrays.copyOf(c, 4));
174         cpd.setOrigColor(Arrays.copyOf(c, 4));
175         cpd.show();
176     }
177 }