blob: 83d89c9a515005f92cc8bd204f37209941b4aba9 [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.gallery3d.filtershow.editors;
import android.app.ActionBar;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.colorpicker.ColorCompareView;
import com.android.gallery3d.filtershow.colorpicker.ColorHueView;
import com.android.gallery3d.filtershow.colorpicker.ColorListener;
import com.android.gallery3d.filtershow.colorpicker.ColorOpacityView;
import com.android.gallery3d.filtershow.colorpicker.ColorSVRectView;
import com.android.gallery3d.filtershow.controller.BasicParameterInt;
import com.android.gallery3d.filtershow.controller.BasicParameterStyle;
import com.android.gallery3d.filtershow.controller.ParameterColor;
import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
import java.util.Arrays;
public class EditorDrawTabletUI {
private EditorDraw mEditorDraw;
private int[] mBrushIcons;
private static int sIconDim = 120;
private int mSelectedColorButton;
private int mSelectedStyleButton;
private FilterDrawRepresentation mRep;
private Button[] mColorButton;
private ImageButton[] mStyleButton;
private ColorHueView mHueView;
private ColorSVRectView mSatValView;
private ColorOpacityView mOpacityView;
private ColorCompareView mColorCompareView;
private TextView mDrawSizeValue;
private int[] mBasColors;
private int mSelected;
private int mTransparent;
private SeekBar mdrawSizeSeekBar;
private int[] ids = {
R.id.draw_color_button01,
R.id.draw_color_button02,
R.id.draw_color_button03,
R.id.draw_color_button04,
R.id.draw_color_button05,
};
public void setDrawRepresentation(FilterDrawRepresentation rep) {
mRep = rep;
BasicParameterInt size;
size = (BasicParameterInt) mRep.getParam(FilterDrawRepresentation.PARAM_SIZE);
mdrawSizeSeekBar.setMax(size.getMaximum() - size.getMinimum());
mdrawSizeSeekBar.setProgress(size.getValue());
ParameterColor color;
color = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
color.setValue(mBasColors[mSelectedColorButton]);
BasicParameterStyle style;
style = (BasicParameterStyle) mRep.getParam(FilterDrawRepresentation.PARAM_STYLE);
style.setSelected(mSelectedStyleButton);
}
public EditorDrawTabletUI(EditorDraw editorDraw, Context context, LinearLayout lp) {
mEditorDraw = editorDraw;
mBasColors = editorDraw.mBasColors;
mBrushIcons = editorDraw.brushIcons;
Resources res = context.getResources();
sIconDim = res.getDimensionPixelSize(R.dimen.draw_style_icon_dim);
LinearLayout buttonContainer = (LinearLayout) lp.findViewById(R.id.listStyles);
mdrawSizeSeekBar = (SeekBar) lp.findViewById(R.id.drawSizeSeekBar);
mDrawSizeValue = (TextView) lp.findViewById(R.id.drawSizeValue);
Button clearButton = (Button) lp.findViewById(R.id.clearButton);
clearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mEditorDraw.clearDrawing();
}
});
mdrawSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
BasicParameterInt size;
size = (BasicParameterInt) mRep.getParam(FilterDrawRepresentation.PARAM_SIZE);
size.setValue(progress + size.getMinimum());
mEditorDraw.commitLocalRepresentation();
int val = progress + size.getMinimum();
mDrawSizeValue.setText(((val>0)?"+":"")+val);
}
});
ActionBar.LayoutParams params = new ActionBar.LayoutParams(sIconDim, sIconDim);
mStyleButton = new ImageButton[mBrushIcons.length];
for (int i = 0; i < mBrushIcons.length; i++) {
final ImageButton button = new ImageButton(context);
mStyleButton[i] = button;
button.setScaleType(ImageView.ScaleType.CENTER_CROP);
button.setLayoutParams(params);
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), mBrushIcons[i]);
button.setImageBitmap(bitmap);
button.setBackgroundResource(android.R.color.transparent);
buttonContainer.addView(button);
final int current = i;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mSelectedStyleButton = current;
if (mRep == null) {
return;
}
BasicParameterStyle style = (BasicParameterStyle)
mRep.getParam(FilterDrawRepresentation.PARAM_STYLE);
style.setSelected(current);
resetStyle();
mEditorDraw.commitLocalRepresentation();
}
});
}
final LinearLayout ctls = (LinearLayout) lp.findViewById(R.id.controls);
final LinearLayout pick = (LinearLayout) lp.findViewById(R.id.colorPicker);
Button b = (Button) lp.findViewById(R.id.draw_color_popupbutton);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean b = ctls.getVisibility() == View.VISIBLE;
ctls.setVisibility((b) ? View.GONE : View.VISIBLE);
pick.setVisibility((!b) ? View.GONE : View.VISIBLE);
}
}
);
mTransparent = res.getColor(R.color.color_chooser_unslected_border);
mSelected = res.getColor(R.color.color_chooser_slected_border);
mColorButton = new Button[ids.length];
for (int i = 0; i < ids.length; i++) {
mColorButton[i] = (Button) lp.findViewById(ids[i]);
float[] hsvo = new float[4];
Color.colorToHSV(mBasColors[i], hsvo);
hsvo[3] = (0xFF & (mBasColors[i] >> 24)) / (float) 255;
mColorButton[i].setTag(hsvo);
GradientDrawable sd = ((GradientDrawable) mColorButton[i].getBackground());
sd.setColor(mBasColors[i]);
sd.setStroke(3, (0 == i) ? mSelected : mTransparent);
final int buttonNo = i;
mColorButton[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
mSelectedColorButton = buttonNo;
float[] hsvo = Arrays.copyOf((float[]) mColorButton[buttonNo].getTag(), 4);
resetBorders();
if (mRep == null) {
return;
}
ParameterColor pram;
pram = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
pram.setValue(mBasColors[mSelectedColorButton]);
mEditorDraw.commitLocalRepresentation();
mHueView.setColor(hsvo);
mSatValView.setColor(hsvo);
mOpacityView.setColor(hsvo);
mColorCompareView.setColor(hsvo);
mColorCompareView.setOrigColor(hsvo);
}
});
}
mHueView = (ColorHueView) lp.findViewById(R.id.ColorHueView);
mSatValView = (ColorSVRectView) lp.findViewById(R.id.colorRectView);
mOpacityView = (ColorOpacityView) lp.findViewById(R.id.colorOpacityView);
mColorCompareView = (ColorCompareView) lp.findViewById(R.id.btnSelect);
float[] hsvo = new float[4];
Color.colorToHSV(mBasColors[0], hsvo);
hsvo[3] = (0xFF & (mBasColors[0] >> 24)) / (float) 255;
mColorCompareView.setOrigColor(hsvo);
ColorListener[] colorViews = {mHueView, mSatValView, mOpacityView, mColorCompareView};
for (int i = 0; i < colorViews.length; i++) {
colorViews[i].setColor(hsvo);
for (int j = 0; j < colorViews.length; j++) {
if (i == j) {
continue;
}
colorViews[i].addColorListener(colorViews[j]);
}
}
ColorListener colorListener = new ColorListener() {
@Override
public void setColor(float[] hsvo) {
int color = Color.HSVToColor((int) (hsvo[3] * 255), hsvo);
Button b = mColorButton[mSelectedColorButton];
float[] f = (float[]) b.getTag();
System.arraycopy(hsvo, 0, f, 0, 4);
mBasColors[mSelectedColorButton] = color;
GradientDrawable sd = ((GradientDrawable) b.getBackground());
sd.setColor(color);
resetBorders();
ParameterColor pram;
pram = (ParameterColor) mRep.getParam(FilterDrawRepresentation.PARAM_COLOR);
pram.setValue(color);
mEditorDraw.commitLocalRepresentation();
}
@Override
public void addColorListener(ColorListener l) {
}
};
for (int i = 0; i < colorViews.length; i++) {
colorViews[i].addColorListener(colorListener);
}
}
public void resetStyle() {
for (int i = 0; i < mStyleButton.length; i++) {
int rid = (i == mSelectedStyleButton) ? android.R.color.holo_blue_light :
android.R.color.transparent;
mStyleButton[i].setBackgroundResource(rid);
}
}
private void resetBorders() {
for (int i = 0; i < ids.length; i++) {
final Button button = mColorButton[i];
GradientDrawable sd = ((GradientDrawable) button.getBackground());
sd.setColor(mBasColors[i]);
sd.setStroke(3, (mSelectedColorButton == i) ? mSelected : mTransparent);
}
}
}