diff options
Diffstat (limited to 'src/com/android/gallery3d/ui/TextButton.java')
-rw-r--r-- | src/com/android/gallery3d/ui/TextButton.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/ui/TextButton.java b/src/com/android/gallery3d/ui/TextButton.java new file mode 100644 index 000000000..c6b85bf55 --- /dev/null +++ b/src/com/android/gallery3d/ui/TextButton.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2010 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.ui; + +import static com.android.gallery3d.ui.TextButtonConfig.*; + +import android.content.Context; +import android.graphics.Rect; +import android.view.MotionEvent; + +public class TextButton extends Label { + private static final String TAG = "TextButton"; + private boolean mPressed; + private Texture mPressedBackground; + private Texture mNormalBackground; + private OnClickedListener mOnClickListener; + + public interface OnClickedListener { + public void onClicked(GLView source); + } + + public TextButton(Context context, int label) { + super(context, label); + setPaddings(HORIZONTAL_PADDINGS, VERTICAL_PADDINGS, + HORIZONTAL_PADDINGS, VERTICAL_PADDINGS); + } + + public void setOnClickListener(OnClickedListener listener) { + mOnClickListener = listener; + } + + public void setPressedBackground(Texture texture) { + mPressedBackground = texture; + } + + public void setNormalBackground(Texture texture) { + mNormalBackground = texture; + } + + @SuppressWarnings("fallthrough") + @Override + protected boolean onTouch(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + mPressed = true; + invalidate(); + break; + case MotionEvent.ACTION_UP: + if (mOnClickListener != null) { + mOnClickListener.onClicked(this); + } + // fall-through + case MotionEvent.ACTION_CANCEL: + mPressed = false; + invalidate(); + break; + } + return true; + } + + @Override + protected void render(GLCanvas canvas) { + Texture bg = mPressed ? mPressedBackground : mNormalBackground; + if (bg != null) { + int width = getWidth(); + int height = getHeight(); + if (bg instanceof NinePatchTexture) { + Rect p = ((NinePatchTexture) bg).getPaddings(); + bg.draw(canvas, -p.left, -p.top, + width + p.left + p.right, height + p.top + p.bottom); + } else { + bg.draw(canvas, 0, 0, width, height); + } + } + super.render(canvas); + } +} |