1a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard/*
2a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Copyright (C) 2012 The Android Open Source Project
3a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard *
4a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
5a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * you may not use this file except in compliance with the License.
6a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * You may obtain a copy of the License at
7a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard *
8a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
9a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard *
10a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Unless required by applicable law or agreed to in writing, software
11a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
12a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * See the License for the specific language governing permissions and
14a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * limitations under the License.
15a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard */
16a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard
17c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardpackage com.android.gallery3d.filtershow.ui;
18c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
19c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.content.Context;
20c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.content.res.TypedArray;
21c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.graphics.Canvas;
22c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.graphics.Paint;
23f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroardimport android.graphics.Path;
24c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.graphics.Rect;
25c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.util.AttributeSet;
26c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport android.widget.ImageButton;
27c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
28c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardimport com.android.gallery3d.R;
29c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
30c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroardpublic class FramedTextButton extends ImageButton {
31c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    private static final String LOGTAG = "FramedTextButton";
32c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    private String mText = null;
33c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    private static int mTextSize = 24;
34c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    private static int mTextPadding = 20;
35c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    private static Paint gPaint = new Paint();
36f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    private static Path gPath = new Path();
37f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    private static int mTrianglePadding = 2;
38f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    private static int mTriangleSize = 30;
39f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard
40c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public static void setTextSize(int value) {
41c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        mTextSize = value;
42c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
43c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
44c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public static void setTextPadding(int value) {
45c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        mTextPadding = value;
46c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
47c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
48f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    public static void setTrianglePadding(int value) {
49f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        mTrianglePadding = value;
50f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    }
51f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard
52f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    public static void setTriangleSize(int value) {
53f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        mTriangleSize = value;
54f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard    }
55f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard
56c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public void setText(String text) {
57c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        mText = text;
58c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        invalidate();
59c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
60c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
61c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public void setTextFrom(int itemId) {
62c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        switch (itemId) {
63c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            case R.id.curve_menu_rgb: {
649820e7e753b7e1977ef3d2163605431769ce9165nicolasroard                setText(getContext().getString(R.string.curves_channel_rgb));
65c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard                break;
66c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            }
67c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            case R.id.curve_menu_red: {
689820e7e753b7e1977ef3d2163605431769ce9165nicolasroard                setText(getContext().getString(R.string.curves_channel_red));
69c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard                break;
70c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            }
71c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            case R.id.curve_menu_green: {
729820e7e753b7e1977ef3d2163605431769ce9165nicolasroard                setText(getContext().getString(R.string.curves_channel_green));
73c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard                break;
74c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            }
75c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            case R.id.curve_menu_blue: {
769820e7e753b7e1977ef3d2163605431769ce9165nicolasroard                setText(getContext().getString(R.string.curves_channel_blue));
77c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard                break;
78c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            }
79c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        }
80c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        invalidate();
81c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
82c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
839820e7e753b7e1977ef3d2163605431769ce9165nicolasroard    public FramedTextButton(Context context) {
849820e7e753b7e1977ef3d2163605431769ce9165nicolasroard        this(context, null);
859820e7e753b7e1977ef3d2163605431769ce9165nicolasroard    }
869820e7e753b7e1977ef3d2163605431769ce9165nicolasroard
87c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public FramedTextButton(Context context, AttributeSet attrs) {
88c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        super(context, attrs);
899820e7e753b7e1977ef3d2163605431769ce9165nicolasroard        if (attrs == null) {
909820e7e753b7e1977ef3d2163605431769ce9165nicolasroard            return;
919820e7e753b7e1977ef3d2163605431769ce9165nicolasroard        }
92c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        TypedArray a = getContext().obtainStyledAttributes(
93c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard                attrs, R.styleable.ImageButtonTitle);
94c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
95c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        mText = a.getString(R.styleable.ImageButtonTitle_android_text);
96c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
97c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
98c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public String getText(){
99c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        return mText;
100c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
101c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
102c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    @Override
103c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    public void onDraw(Canvas canvas) {
104f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPaint.setARGB(96, 255, 255, 255);
105c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        gPaint.setStrokeWidth(2);
106c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        gPaint.setStyle(Paint.Style.STROKE);
107f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        int w = getWidth();
108f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        int h = getHeight();
109f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        canvas.drawRect(mTextPadding, mTextPadding, w - mTextPadding,
110f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard                h - mTextPadding, gPaint);
111f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPath.reset();
112f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPath.moveTo(w - mTextPadding - mTrianglePadding - mTriangleSize,
113f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard                     h - mTextPadding - mTrianglePadding);
114f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPath.lineTo(w - mTextPadding - mTrianglePadding,
115f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard                     h - mTextPadding - mTrianglePadding - mTriangleSize);
116f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPath.lineTo(w - mTextPadding - mTrianglePadding,
117f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard                     h - mTextPadding - mTrianglePadding);
118f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPath.close();
119f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPaint.setARGB(128, 255, 255, 255);
120f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPaint.setStrokeWidth(1);
121f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        gPaint.setStyle(Paint.Style.FILL_AND_STROKE);
122f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard        canvas.drawPath(gPath, gPaint);
123c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        if (mText != null) {
1247592704e662e49e4bbf3ba86a43d790774829bb0nicolasroard            gPaint.reset();
1257592704e662e49e4bbf3ba86a43d790774829bb0nicolasroard            gPaint.setARGB(255, 255, 255, 255);
126c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            gPaint.setTextSize(mTextSize);
127c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            float textWidth = gPaint.measureText(mText);
128c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            Rect bounds = new Rect();
129c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            gPaint.getTextBounds(mText, 0, mText.length(), bounds);
130f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard            int x = (int) ((w - textWidth) / 2);
131f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard            int y = (h + bounds.height()) / 2;
132c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
133c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard            canvas.drawText(mText, x, y, gPaint);
134c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard        }
135c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard    }
136c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard
137c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard}
138