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