OSDN Git Service

Draw UI fixes
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / filtershow / editors / EditorDrawTabletUI.java
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.app.ActionBar;
20 import android.content.Context;
21 import android.content.res.Resources;
22 import android.graphics.Bitmap;
23 import android.graphics.BitmapFactory;
24 import android.graphics.Color;
25 import android.graphics.drawable.GradientDrawable;
26 import android.view.View;
27 import android.widget.Button;
28 import android.widget.ImageButton;
29 import android.widget.ImageView;
30 import android.widget.LinearLayout;
31 import android.widget.SeekBar;
32 import android.widget.TextView;
33
34 import com.android.gallery3d.R;
35 import com.android.gallery3d.filtershow.colorpicker.ColorCompareView;
36 import com.android.gallery3d.filtershow.colorpicker.ColorHueView;
37 import com.android.gallery3d.filtershow.colorpicker.ColorListener;
38 import com.android.gallery3d.filtershow.colorpicker.ColorOpacityView;
39 import com.android.gallery3d.filtershow.colorpicker.ColorSVRectView;
40 import com.android.gallery3d.filtershow.controller.BasicParameterInt;
41 import com.android.gallery3d.filtershow.controller.BasicParameterStyle;
42 import com.android.gallery3d.filtershow.controller.ParameterColor;
43 import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
44
45 import java.util.Arrays;
46
47 public class EditorDrawTabletUI {
48     private EditorDraw mEditorDraw;
49     private int[] mBrushIcons;
50     private static int sIconDim = 120;
51     private int mSelectedColorButton;
52     private int mSelectedStyleButton;
53     private FilterDrawRepresentation mRep;
54     private Button[] mColorButton;
55     private ImageButton[] mStyleButton;
56     private ColorHueView mHueView;
57     private ColorSVRectView mSatValView;
58     private ColorOpacityView mOpacityView;
59     private ColorCompareView mColorCompareView;
60
61     private int[] mBasColors;
62     private int mSelected;
63     private int mTransparent;
64     private SeekBar mdrawSizeSeekBar;
65     private int[] ids = {
66             R.id.draw_color_button01,
67             R.id.draw_color_button02,
68             R.id.draw_color_button03,
69             R.id.draw_color_button04,
70             R.id.draw_color_button05,
71     };
72
73     public void setDrawRepresentation(FilterDrawRepresentation rep) {
74         mRep = rep;
75         BasicParameterInt size;
76         size = (BasicParameterInt) mRep.getParam(FilterDrawRepresentation.PARAM_SIZE);
77         mdrawSizeSeekBar.setMax(size.getMaximum() - size.getMinimum());
78         mdrawSizeSeekBar.setProgress(size.getValue());
79
80         ParameterColor color;
81         color = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
82         color.setValue(mBasColors[mSelectedColorButton]);
83         BasicParameterStyle style;
84         style = (BasicParameterStyle) mRep.getParam(FilterDrawRepresentation.PARAM_STYLE);
85         style.setSelected(mSelectedStyleButton);
86     }
87
88     public EditorDrawTabletUI(EditorDraw editorDraw, Context context, LinearLayout lp) {
89         mEditorDraw = editorDraw;
90         mBasColors = editorDraw.mBasColors;
91         mBrushIcons = editorDraw.brushIcons;
92         Resources res = context.getResources();
93         sIconDim = res.getDimensionPixelSize(R.dimen.draw_style_icon_dim);
94         LinearLayout buttonContainer = (LinearLayout) lp.findViewById(R.id.listStyles);
95
96         mdrawSizeSeekBar = (SeekBar) lp.findViewById(R.id.drawSizeSeekBar);
97         TextView drawSizeValue = (TextView) lp.findViewById(R.id.drawSizeValue);
98
99         Button clearButton = (Button) lp.findViewById(R.id.clearButton);
100         clearButton.setOnClickListener(new View.OnClickListener() {
101             @Override
102             public void onClick(View view) {
103                 mEditorDraw.clearDrawing();
104             }
105         });
106
107         mdrawSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
108
109             @Override
110             public void onStopTrackingTouch(SeekBar seekBar) {
111             }
112
113             @Override
114             public void onStartTrackingTouch(SeekBar seekBar) {
115             }
116
117             @Override
118             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
119                 BasicParameterInt size;
120                 size = (BasicParameterInt) mRep.getParam(FilterDrawRepresentation.PARAM_SIZE);
121                 size.setValue(progress + size.getMinimum());
122                 mEditorDraw.commitLocalRepresentation();
123             }
124         });
125
126         ActionBar.LayoutParams params = new ActionBar.LayoutParams(sIconDim, sIconDim);
127         mStyleButton = new ImageButton[mBrushIcons.length];
128         for (int i = 0; i < mBrushIcons.length; i++) {
129             final ImageButton button = new ImageButton(context);
130             mStyleButton[i] = button;
131             button.setScaleType(ImageView.ScaleType.CENTER_CROP);
132             button.setLayoutParams(params);
133             Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), mBrushIcons[i]);
134             button.setImageBitmap(bitmap);
135             button.setBackgroundResource(android.R.color.transparent);
136             buttonContainer.addView(button);
137             final int current = i;
138             button.setOnClickListener(new View.OnClickListener() {
139                 @Override
140                 public void onClick(View view) {
141                     mSelectedStyleButton = current;
142                     if (mRep == null) {
143                         return;
144                     }
145                     BasicParameterStyle style = (BasicParameterStyle)
146                             mRep.getParam(FilterDrawRepresentation.PARAM_STYLE);
147                     style.setSelected(current);
148                     resetStyle();
149                     mEditorDraw.commitLocalRepresentation();
150                 }
151             });
152         }
153
154         final LinearLayout ctls = (LinearLayout) lp.findViewById(R.id.controls);
155         final LinearLayout pick = (LinearLayout) lp.findViewById(R.id.colorPicker);
156         Button b = (Button) lp.findViewById(R.id.draw_color_popupbutton);
157         b.setOnClickListener(new View.OnClickListener() {
158             @Override
159             public void onClick(View view) {
160                 boolean b = ctls.getVisibility() == View.VISIBLE;
161                 ctls.setVisibility((b) ? View.GONE : View.VISIBLE);
162                 pick.setVisibility((!b) ? View.GONE : View.VISIBLE);
163             }
164         }
165         );
166
167         mTransparent = res.getColor(R.color.color_chooser_unslected_border);
168         mSelected = res.getColor(R.color.color_chooser_slected_border);
169
170         mColorButton = new Button[ids.length];
171         for (int i = 0; i < ids.length; i++) {
172             mColorButton[i] = (Button) lp.findViewById(ids[i]);
173
174             float[] hsvo = new float[4];
175             Color.colorToHSV(mBasColors[i], hsvo);
176             hsvo[3] = (0xFF & (mBasColors[i] >> 24)) / (float) 255;
177             mColorButton[i].setTag(hsvo);
178             GradientDrawable sd = ((GradientDrawable) mColorButton[i].getBackground());
179
180             sd.setColor(mBasColors[i]);
181             sd.setStroke(3, (0 == i) ? mSelected : mTransparent);
182
183             final int buttonNo = i;
184             mColorButton[i].setOnClickListener(new View.OnClickListener() {
185                 @Override
186                 public void onClick(View arg0) {
187
188                     mSelectedColorButton = buttonNo;
189                     float[] hsvo = Arrays.copyOf((float[]) mColorButton[buttonNo].getTag(), 4);
190                     resetBorders();
191                     if (mRep == null) {
192                         return;
193                     }
194                     ParameterColor pram;
195                     pram = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
196                     pram.setValue(mBasColors[mSelectedColorButton]);
197                     mEditorDraw.commitLocalRepresentation();
198                     mHueView.setColor(hsvo);
199                     mSatValView.setColor(hsvo);
200                     mOpacityView.setColor(hsvo);
201                     mColorCompareView.setColor(hsvo);
202                     mColorCompareView.setOrigColor(hsvo);
203                 }
204             });
205         }
206
207         mHueView = (ColorHueView) lp.findViewById(R.id.ColorHueView);
208         mSatValView = (ColorSVRectView) lp.findViewById(R.id.colorRectView);
209         mOpacityView = (ColorOpacityView) lp.findViewById(R.id.colorOpacityView);
210         mColorCompareView = (ColorCompareView) lp.findViewById(R.id.btnSelect);
211
212         float[] hsvo = new float[4];
213         Color.colorToHSV(mBasColors[0], hsvo);
214         hsvo[3] = (0xFF & (mBasColors[0] >> 24)) / (float) 255;
215
216         mColorCompareView.setOrigColor(hsvo);
217         ColorListener[] colorViews = {mHueView, mSatValView, mOpacityView, mColorCompareView};
218         for (int i = 0; i < colorViews.length; i++) {
219             colorViews[i].setColor(hsvo);
220
221             for (int j = 0; j < colorViews.length; j++) {
222                 if (i == j) {
223                     continue;
224                 }
225                 colorViews[i].addColorListener(colorViews[j]);
226             }
227         }
228         ColorListener colorListener = new ColorListener() {
229
230             @Override
231             public void setColor(float[] hsvo) {
232                 int color = Color.HSVToColor((int) (hsvo[3] * 255), hsvo);
233                 Button b = mColorButton[mSelectedColorButton];
234                 float[] f = (float[]) b.getTag();
235                 System.arraycopy(hsvo, 0, f, 0, 4);
236                 mBasColors[mSelectedColorButton] = color;
237                 GradientDrawable sd = ((GradientDrawable) b.getBackground());
238                 sd.setColor(color);
239                 resetBorders();
240                 ParameterColor pram;
241                 pram = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
242                 pram.setValue(color);
243                 mEditorDraw.commitLocalRepresentation();
244             }
245
246             @Override
247             public void addColorListener(ColorListener l) {
248             }
249         };
250
251         for (int i = 0; i < colorViews.length; i++) {
252             colorViews[i].addColorListener(colorListener);
253         }
254
255     }
256
257     public void resetStyle() {
258         for (int i = 0; i < mStyleButton.length; i++) {
259             int rid = (i == mSelectedStyleButton) ? android.R.color.holo_blue_light :
260                     android.R.color.transparent;
261             mStyleButton[i].setBackgroundResource(rid);
262
263         }
264     }
265
266     private void resetBorders() {
267         for (int i = 0; i < ids.length; i++) {
268             final Button button = mColorButton[i];
269
270             GradientDrawable sd = ((GradientDrawable) button.getBackground());
271             sd.setColor(mBasColors[i]);
272             sd.setStroke(3, (mSelectedColorButton == i) ? mSelected : mTransparent);
273         }
274     }
275 }