2 * Copyright (C) 2013 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.gallery3d.filtershow.editors;
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;
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;
45 import java.util.Arrays;
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;
61 private int[] mBasColors;
62 private int mSelected;
63 private int mTransparent;
64 private SeekBar mdrawSizeSeekBar;
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,
73 public void setDrawRepresentation(FilterDrawRepresentation rep) {
75 BasicParameterInt size;
76 size = (BasicParameterInt) mRep.getParam(FilterDrawRepresentation.PARAM_SIZE);
77 mdrawSizeSeekBar.setMax(size.getMaximum() - size.getMinimum());
78 mdrawSizeSeekBar.setProgress(size.getValue());
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);
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);
96 mdrawSizeSeekBar = (SeekBar) lp.findViewById(R.id.drawSizeSeekBar);
97 TextView drawSizeValue = (TextView) lp.findViewById(R.id.drawSizeValue);
99 Button clearButton = (Button) lp.findViewById(R.id.clearButton);
100 clearButton.setOnClickListener(new View.OnClickListener() {
102 public void onClick(View view) {
103 mEditorDraw.clearDrawing();
107 mdrawSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
110 public void onStopTrackingTouch(SeekBar seekBar) {
114 public void onStartTrackingTouch(SeekBar seekBar) {
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();
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() {
140 public void onClick(View view) {
141 mSelectedStyleButton = current;
145 BasicParameterStyle style = (BasicParameterStyle)
146 mRep.getParam(FilterDrawRepresentation.PARAM_STYLE);
147 style.setSelected(current);
149 mEditorDraw.commitLocalRepresentation();
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() {
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);
167 mTransparent = res.getColor(R.color.color_chooser_unslected_border);
168 mSelected = res.getColor(R.color.color_chooser_slected_border);
170 mColorButton = new Button[ids.length];
171 for (int i = 0; i < ids.length; i++) {
172 mColorButton[i] = (Button) lp.findViewById(ids[i]);
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());
180 sd.setColor(mBasColors[i]);
181 sd.setStroke(3, (0 == i) ? mSelected : mTransparent);
183 final int buttonNo = i;
184 mColorButton[i].setOnClickListener(new View.OnClickListener() {
186 public void onClick(View arg0) {
188 mSelectedColorButton = buttonNo;
189 float[] hsvo = Arrays.copyOf((float[]) mColorButton[buttonNo].getTag(), 4);
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);
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);
212 float[] hsvo = new float[4];
213 Color.colorToHSV(mBasColors[0], hsvo);
214 hsvo[3] = (0xFF & (mBasColors[0] >> 24)) / (float) 255;
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);
221 for (int j = 0; j < colorViews.length; j++) {
225 colorViews[i].addColorListener(colorViews[j]);
228 ColorListener colorListener = new ColorListener() {
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());
241 pram = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
242 pram.setValue(color);
243 mEditorDraw.commitLocalRepresentation();
247 public void addColorListener(ColorListener l) {
251 for (int i = 0; i < colorViews.length; i++) {
252 colorViews[i].addColorListener(colorListener);
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);
266 private void resetBorders() {
267 for (int i = 0; i < ids.length; i++) {
268 final Button button = mColorButton[i];
270 GradientDrawable sd = ((GradientDrawable) button.getBackground());
271 sd.setColor(mBasColors[i]);
272 sd.setStroke(3, (mSelectedColorButton == i) ? mSelected : mTransparent);