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.LayoutInflater;
27 import android.view.Menu;
28 import android.view.MenuItem;
29 import android.view.View;
30 import android.view.View.OnClickListener;
31 import android.view.ViewGroup;
32 import android.widget.Button;
33 import android.widget.FrameLayout;
34 import android.widget.ImageButton;
35 import android.widget.ImageView;
36 import android.widget.LinearLayout;
37 import android.widget.PopupMenu;
38 import android.widget.SeekBar;
40 import com.android.gallery3d.R;
41 import com.android.gallery3d.filtershow.colorpicker.ColorHueView;
42 import com.android.gallery3d.filtershow.colorpicker.ColorListener;
43 import com.android.gallery3d.filtershow.colorpicker.ColorOpacityView;
44 import com.android.gallery3d.filtershow.colorpicker.ColorSVRectView;
45 import com.android.gallery3d.filtershow.controller.BitmapCaller;
46 import com.android.gallery3d.filtershow.controller.ColorChooser;
47 import com.android.gallery3d.filtershow.controller.FilterView;
48 import com.android.gallery3d.filtershow.controller.ParameterColor;
49 import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
50 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
51 import com.android.gallery3d.filtershow.filters.ImageFilterDraw;
52 import com.android.gallery3d.filtershow.imageshow.ImageDraw;
54 public class EditorDraw extends ParametricEditor implements FilterView {
55 private static final String LOGTAG = "EditorDraw";
56 public static final int ID = R.id.editorDraw;
57 public ImageDraw mImageDraw;
58 private static final int MODE_SIZE = FilterDrawRepresentation.PARAM_SIZE;
59 private static final int MODE_SIZEE = FilterDrawRepresentation.PARAM_SIZE;
60 private static final int MODE_STYLE = FilterDrawRepresentation.PARAM_STYLE;
61 private static final int MODE_COLOR = FilterDrawRepresentation.PARAM_COLOR;
63 R.drawable.brush_flat,
64 R.drawable.brush_round,
65 R.drawable.brush_gauss,
66 R.drawable.brush_marker,
67 R.drawable.brush_spatter
71 FilterDrawRepresentation.DEFAULT_MENU_COLOR1,
72 FilterDrawRepresentation.DEFAULT_MENU_COLOR2,
73 FilterDrawRepresentation.DEFAULT_MENU_COLOR3,
74 FilterDrawRepresentation.DEFAULT_MENU_COLOR4,
75 FilterDrawRepresentation.DEFAULT_MENU_COLOR5,
77 private EditorDrawTabletUI mTabletUI;
78 private String mParameterString;
79 private int mSelectedColorButton;
80 private String mDrawString = null;
87 public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
88 FilterDrawRepresentation rep = getDrawRep();
89 if (mDrawString != null) {
90 mImageDraw.displayDrawLook();
96 if (!ParametricEditor.useCompact(mContext)) {
99 if (mParameterString == null) {
100 mParameterString = "";
103 String val = rep.getValueString();
105 mImageDraw.displayDrawLook();
106 return mParameterString + val;
110 public void createEditor(Context context, FrameLayout frameLayout) {
111 mView = mImageShow = mImageDraw = new ImageDraw(context);
112 super.createEditor(context, frameLayout);
113 mImageDraw.setEditor(this);
118 public void reflectCurrentFilter() {
119 super.reflectCurrentFilter();
120 FilterRepresentation rep = getLocalRepresentation();
121 if (rep != null && getLocalRepresentation() instanceof FilterDrawRepresentation) {
122 FilterDrawRepresentation drawRep = (FilterDrawRepresentation) getLocalRepresentation();
123 mImageDraw.setFilterDrawRepresentation(drawRep);
124 if (!ParametricEditor.useCompact(mContext)) {
125 if (mTabletUI != null) {
127 mTabletUI.setDrawRepresentation(drawRep);
132 drawRep.getParam(FilterDrawRepresentation.PARAM_STYLE).setFilterView(this);
133 drawRep.setPramMode(FilterDrawRepresentation.PARAM_COLOR);
134 mParameterString = mContext.getString(R.string.draw_color);
135 control(drawRep.getCurrentParam(), mEditControl);
140 public void openUtilityPanel(final LinearLayout accessoryViewList) {
141 Button view = (Button) accessoryViewList.findViewById(R.id.applyEffect);
143 view.setText(mContext.getString(R.string.draw_color));
144 view.setOnClickListener(new OnClickListener() {
147 public void onClick(View arg0) {
148 showPopupMenu(accessoryViewList);
155 public boolean showsSeekBar() {
159 private void showPopupMenu(LinearLayout accessoryViewList) {
160 final Button button = (Button) accessoryViewList.findViewById(
162 if (button == null) {
165 final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), button);
166 popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_draw, popupMenu.getMenu());
167 if (!ParametricEditor.useCompact(mContext)) {
168 Menu menu = popupMenu.getMenu();
169 int count = menu.size();
170 for (int i = 0; i < count; i++) {
171 MenuItem item = menu.getItem(i);
172 if (item.getItemId() != R.id.draw_menu_clear) {
173 item.setVisible(false);
176 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
179 public boolean onMenuItemClick(MenuItem item) {
185 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
188 public boolean onMenuItemClick(MenuItem item) {
189 selectMenuItem(item);
198 protected void selectMenuItem(MenuItem item) {
199 ImageFilterDraw filter = (ImageFilterDraw) mImageShow.getCurrentFilter();
200 FilterDrawRepresentation rep = getDrawRep();
205 switch (item.getItemId()) {
206 case R.id.draw_menu_clear:
209 case R.id.draw_menu_size:
210 rep.setPramMode(FilterDrawRepresentation.PARAM_SIZE);
212 case R.id.draw_menu_style:
213 rep.setPramMode(FilterDrawRepresentation.PARAM_STYLE);
215 case R.id.draw_menu_color:
216 rep.setPramMode(FilterDrawRepresentation.PARAM_COLOR);
219 if (item.getItemId() != R.id.draw_menu_clear) {
220 mParameterString = item.getTitle().toString();
223 if (mControl instanceof ColorChooser) {
224 ColorChooser c = (ColorChooser) mControl;
225 mBasColors = c.getColorSet();
227 control(rep.getCurrentParam(), mEditControl);
228 if (mControl instanceof ColorChooser) {
229 ColorChooser c = (ColorChooser) mControl;
230 c.setColorSet(mBasColors);
236 public void clearDrawing(){
237 ImageDraw idraw = (ImageDraw) mImageShow;
238 idraw.resetParameter();
239 commitLocalRepresentation();
243 public void setUtilityPanelUI(View actionButton, View editControl) {
244 if (ParametricEditor.useCompact(mContext)) {
245 super.setUtilityPanelUI(actionButton, editControl);
249 mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
250 if (mSeekBar != null) {
251 mSeekBar.setVisibility(View.GONE);
253 LayoutInflater inflater =
254 (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
255 LinearLayout lp = (LinearLayout) inflater.inflate(
256 R.layout.filtershow_draw_ui, (ViewGroup) editControl, true);
258 mTabletUI = new EditorDrawTabletUI(this, mContext, lp);
259 mDrawString = mContext.getResources().getString(R.string.imageDraw).toUpperCase();
264 FilterDrawRepresentation getDrawRep() {
265 FilterRepresentation rep = getLocalRepresentation();
266 if (rep instanceof FilterDrawRepresentation) {
267 return (FilterDrawRepresentation) rep;
273 public void computeIcon(int index, BitmapCaller caller) {
274 Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), brushIcons[index]);
275 caller.available(bitmap);
278 public int getBrushIcon(int type) {
279 return brushIcons[type];