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