1 /*
2  * Copyright (C) 2012 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.ui;
18 
19 import android.content.Context;
20 import android.content.res.TypedArray;
21 import android.graphics.Canvas;
22 import android.graphics.Paint;
23 import android.graphics.Path;
24 import android.graphics.Rect;
25 import android.util.AttributeSet;
26 import android.widget.ImageButton;
27 
28 import com.android.gallery3d.R;
29 
30 public class FramedTextButton extends ImageButton {
31     private static final String LOGTAG = "FramedTextButton";
32     private String mText = null;
33     private static int mTextSize = 24;
34     private static int mTextPadding = 20;
35     private static Paint gPaint = new Paint();
36     private static Path gPath = new Path();
37     private static int mTrianglePadding = 2;
38     private static int mTriangleSize = 30;
39 
setTextSize(int value)40     public static void setTextSize(int value) {
41         mTextSize = value;
42     }
43 
setTextPadding(int value)44     public static void setTextPadding(int value) {
45         mTextPadding = value;
46     }
47 
setTrianglePadding(int value)48     public static void setTrianglePadding(int value) {
49         mTrianglePadding = value;
50     }
51 
setTriangleSize(int value)52     public static void setTriangleSize(int value) {
53         mTriangleSize = value;
54     }
55 
setText(String text)56     public void setText(String text) {
57         mText = text;
58         invalidate();
59     }
60 
setTextFrom(int itemId)61     public void setTextFrom(int itemId) {
62         switch (itemId) {
63             case R.id.curve_menu_rgb: {
64                 setText(getContext().getString(R.string.curves_channel_rgb));
65                 break;
66             }
67             case R.id.curve_menu_red: {
68                 setText(getContext().getString(R.string.curves_channel_red));
69                 break;
70             }
71             case R.id.curve_menu_green: {
72                 setText(getContext().getString(R.string.curves_channel_green));
73                 break;
74             }
75             case R.id.curve_menu_blue: {
76                 setText(getContext().getString(R.string.curves_channel_blue));
77                 break;
78             }
79         }
80         invalidate();
81     }
82 
FramedTextButton(Context context)83     public FramedTextButton(Context context) {
84         this(context, null);
85     }
86 
FramedTextButton(Context context, AttributeSet attrs)87     public FramedTextButton(Context context, AttributeSet attrs) {
88         super(context, attrs);
89         if (attrs == null) {
90             return;
91         }
92         TypedArray a = getContext().obtainStyledAttributes(
93                 attrs, R.styleable.ImageButtonTitle);
94 
95         mText = a.getString(R.styleable.ImageButtonTitle_android_text);
96     }
97 
getText()98     public String getText(){
99         return mText;
100     }
101 
102     @Override
onDraw(Canvas canvas)103     public void onDraw(Canvas canvas) {
104         gPaint.setARGB(96, 255, 255, 255);
105         gPaint.setStrokeWidth(2);
106         gPaint.setStyle(Paint.Style.STROKE);
107         int w = getWidth();
108         int h = getHeight();
109         canvas.drawRect(mTextPadding, mTextPadding, w - mTextPadding,
110                 h - mTextPadding, gPaint);
111         gPath.reset();
112         gPath.moveTo(w - mTextPadding - mTrianglePadding - mTriangleSize,
113                      h - mTextPadding - mTrianglePadding);
114         gPath.lineTo(w - mTextPadding - mTrianglePadding,
115                      h - mTextPadding - mTrianglePadding - mTriangleSize);
116         gPath.lineTo(w - mTextPadding - mTrianglePadding,
117                      h - mTextPadding - mTrianglePadding);
118         gPath.close();
119         gPaint.setARGB(128, 255, 255, 255);
120         gPaint.setStrokeWidth(1);
121         gPaint.setStyle(Paint.Style.FILL_AND_STROKE);
122         canvas.drawPath(gPath, gPaint);
123         if (mText != null) {
124             gPaint.reset();
125             gPaint.setARGB(255, 255, 255, 255);
126             gPaint.setTextSize(mTextSize);
127             float textWidth = gPaint.measureText(mText);
128             Rect bounds = new Rect();
129             gPaint.getTextBounds(mText, 0, mText.length(), bounds);
130             int x = (int) ((w - textWidth) / 2);
131             int y = (h + bounds.height()) / 2;
132 
133             canvas.drawText(mText, x, y, gPaint);
134         }
135     }
136 
137 }
138