summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/category
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-08-13 10:30:06 -0700
committernicolasroard <nicolasroard@google.com>2013-08-13 10:36:25 -0700
commita0cd22d21474c112ad78b011fbd6f0be977400e6 (patch)
tree72c9a5e6e1e6e8230d18575ce0ec0a182d7ca7e9 /src/com/android/gallery3d/filtershow/category
parentc31d762d7630f2e5edd451ce5ddb200cf5743ee4 (diff)
downloadandroid_packages_apps_Gallery2-a0cd22d21474c112ad78b011fbd6f0be977400e6.tar.gz
android_packages_apps_Gallery2-a0cd22d21474c112ad78b011fbd6f0be977400e6.tar.bz2
android_packages_apps_Gallery2-a0cd22d21474c112ad78b011fbd6f0be977400e6.zip
Fix icons rendering to be consistent
Change-Id: Ie9384df9a34a39311dfe7ccc1cff1250d2f3918e
Diffstat (limited to 'src/com/android/gallery3d/filtershow/category')
-rw-r--r--src/com/android/gallery3d/filtershow/category/Action.java4
-rw-r--r--src/com/android/gallery3d/filtershow/category/CategoryPanel.java8
-rw-r--r--src/com/android/gallery3d/filtershow/category/CategoryView.java114
-rw-r--r--src/com/android/gallery3d/filtershow/category/IconView.java229
4 files changed, 253 insertions, 102 deletions
diff --git a/src/com/android/gallery3d/filtershow/category/Action.java b/src/com/android/gallery3d/filtershow/category/Action.java
index 332ca18b0..d0cfffd35 100644
--- a/src/com/android/gallery3d/filtershow/category/Action.java
+++ b/src/com/android/gallery3d/filtershow/category/Action.java
@@ -58,6 +58,10 @@ public class Action implements RenderingRequestCaller {
this(context, representation, CROP_VIEW);
}
+ public int getType() {
+ return mType;
+ }
+
public FilterRepresentation getRepresentation() {
return mRepresentation;
}
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryPanel.java b/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
index 0dfe7cb3c..302f021d7 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
@@ -37,8 +37,7 @@ public class CategoryPanel extends Fragment implements View.OnClickListener {
private int mCurrentAdapter = MainPanel.LOOKS;
private CategoryAdapter mAdapter;
- private ImageButton mAddButton;
- private TextView mAddButtonText;
+ private IconView mAddButton;
public void setAdapter(int value) {
mCurrentAdapter = value;
@@ -114,8 +113,7 @@ public class CategoryPanel extends Fragment implements View.OnClickListener {
mAdapter.setContainer(panel);
}
- mAddButton = (ImageButton) main.findViewById(R.id.addButton);
- mAddButtonText = (TextView) main.findViewById(R.id.addButtonText);
+ mAddButton = (IconView) main.findViewById(R.id.addButton);
if (mAddButton != null) {
mAddButton.setOnClickListener(this);
updateAddButtonVisibility();
@@ -141,7 +139,7 @@ public class CategoryPanel extends Fragment implements View.OnClickListener {
if (activity.isShowingImageStatePanel() && mAdapter.showAddButton()) {
mAddButton.setVisibility(View.VISIBLE);
if (mAdapter != null) {
- mAddButtonText.setText(mAdapter.getAddButtonText());
+ mAddButton.setText(mAdapter.getAddButtonText());
}
} else {
mAddButton.setVisibility(View.GONE);
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryView.java b/src/com/android/gallery3d/filtershow/category/CategoryView.java
index dc2b63a89..cb72bc813 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryView.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryView.java
@@ -23,16 +23,13 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
-import com.android.gallery3d.filtershow.filters.FilterRepresentation;
import com.android.gallery3d.filtershow.ui.SelectionRenderer;
-public class CategoryView extends View
+public class CategoryView extends IconView
implements View.OnClickListener, SwipableView{
private static final String LOGTAG = "CategoryView";
@@ -40,17 +37,11 @@ public class CategoryView extends View
public static final int HORIZONTAL = 1;
private Paint mPaint = new Paint();
private Action mAction;
- private Rect mTextBounds = new Rect();
- private int mMargin = 16;
- private int mTextSize = 32;
- private int mTextColor;
- private int mBackgroundColor;
private Paint mSelectPaint;
CategoryAdapter mAdapter;
private int mSelectionStroke;
private Paint mBorderPaint;
private int mBorderStroke;
- private int mOrientation = VERTICAL;
private float mStartTouchY = 0;
private float mDeleteSlope = 20;
@@ -58,11 +49,7 @@ public class CategoryView extends View
super(context);
setOnClickListener(this);
Resources res = getResources();
- mBackgroundColor = res.getColor(R.color.filtershow_categoryview_background);
- mTextColor = res.getColor(R.color.filtershow_categoryview_text);
mSelectionStroke = res.getDimensionPixelSize(R.dimen.thumbnail_margin);
- mTextSize = res.getDimensionPixelSize(R.dimen.category_panel_text_size);
- mMargin = res.getDimensionPixelOffset(R.dimen.category_panel_margin);
mSelectPaint = new Paint();
mSelectPaint.setStyle(Paint.Style.FILL);
mSelectPaint.setColor(res.getColor(R.color.filtershow_category_selection));
@@ -71,103 +58,40 @@ public class CategoryView extends View
mBorderStroke = mSelectionStroke / 3;
}
- private void computeTextPosition(String text) {
- if (text == null) {
- return;
- }
- mPaint.setTextSize(mTextSize);
- if (mOrientation == VERTICAL) {
- text = text.toUpperCase();
- // TODO: set this in xml
- mPaint.setTypeface(Typeface.DEFAULT_BOLD);
- }
- mPaint.getTextBounds(text, 0, text.length(), mTextBounds);
- }
-
- public void drawText(Canvas canvas, String text) {
- if (text == null) {
- return;
- }
- float textWidth = mPaint.measureText(text);
- int x = (int) (canvas.getWidth() - textWidth - mMargin);
- if (mOrientation == HORIZONTAL) {
- x = (int) ((canvas.getWidth() - textWidth) / 2.0f);
- }
- if (x < 0) {
- // If the text takes more than the view width,
- // justify to the left.
- x = mMargin;
- }
- int y = canvas.getHeight() - mMargin;
- canvas.drawText(text, x, y, mPaint);
- }
-
@Override
- public CharSequence getContentDescription () {
- if (mAction != null) {
- return mAction.getName();
+ public boolean isHalfImage() {
+ if (mAction == null) {
+ return false;
+ }
+ if (mAction.getType() == Action.CROP_VIEW) {
+ return true;
}
- return null;
+ return false;
}
- @Override
public void onDraw(Canvas canvas) {
- canvas.drawColor(mBackgroundColor);
if (mAction != null) {
- mPaint.reset();
- mPaint.setAntiAlias(true);
- computeTextPosition(mAction.getName());
if (mAction.getImage() == null) {
- mAction.setImageFrame(new Rect(0, 0, getWidth(), getHeight()), mOrientation);
+ mAction.setImageFrame(new Rect(0, 0, getWidth(), getHeight()), getOrientation());
} else {
- Bitmap bitmap = mAction.getImage();
- canvas.save();
- Rect clipRect = new Rect(mSelectionStroke, mSelectionStroke,
- getWidth() - mSelectionStroke,
- getHeight() - 2* mMargin - mTextSize);
- int offsetx = 0;
- int offsety = 0;
- if (mOrientation == HORIZONTAL) {
- canvas.clipRect(clipRect);
- offsetx = - (bitmap.getWidth() - clipRect.width()) / 2;
- offsety = - (bitmap.getHeight() - clipRect.height()) / 2;
- }
- canvas.drawBitmap(bitmap, offsetx, offsety, mPaint);
- canvas.restore();
- if (mAdapter.isSelected(this)) {
- if (mOrientation == HORIZONTAL) {
- SelectionRenderer.drawSelection(canvas, 0, 0,
- getWidth(), getHeight() - mMargin - mTextSize,
- mSelectionStroke, mSelectPaint, mBorderStroke, mBorderPaint);
- } else {
- SelectionRenderer.drawSelection(canvas, 0, 0,
- Math.min(bitmap.getWidth(), getWidth()),
- Math.min(bitmap.getHeight(), getHeight()),
- mSelectionStroke, mSelectPaint, mBorderStroke, mBorderPaint);
- }
- }
+ setBitmap(mAction.getImage());
}
- mPaint.setColor(mBackgroundColor);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setStrokeWidth(3);
- drawText(canvas, mAction.getName());
- mPaint.setColor(mTextColor);
- mPaint.setStyle(Paint.Style.FILL);
- mPaint.setStrokeWidth(1);
- drawText(canvas, mAction.getName());
+ }
+ super.onDraw(canvas);
+ if (mAdapter.isSelected(this)) {
+ SelectionRenderer.drawSelection(canvas, 0, 0,
+ getWidth(), getHeight(),
+ mSelectionStroke, mSelectPaint, mBorderStroke, mBorderPaint);
}
}
public void setAction(Action action, CategoryAdapter adapter) {
mAction = action;
+ setText(mAction.getName());
mAdapter = adapter;
invalidate();
}
- public FilterRepresentation getRepresentation() {
- return mAction.getRepresentation();
- }
-
@Override
public void onClick(View view) {
FilterShowActivity activity = (FilterShowActivity) getContext();
@@ -175,10 +99,6 @@ public class CategoryView extends View
mAdapter.setSelected(this);
}
- public void setOrientation(int orientation) {
- mOrientation = orientation;
- }
-
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
diff --git a/src/com/android/gallery3d/filtershow/category/IconView.java b/src/com/android/gallery3d/filtershow/category/IconView.java
new file mode 100644
index 000000000..5d2aacfa5
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/category/IconView.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2013 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.filtershow.category;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.LinearGradient;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.view.View;
+import com.android.gallery3d.R;
+
+public class IconView extends View {
+
+ public static final int VERTICAL = 0;
+ public static final int HORIZONTAL = 1;
+
+ private Paint mPaint = new Paint();
+ private int mTextColor;
+ private int mBackgroundColor;
+ private int mMargin = 16;
+ private int mOrientation = HORIZONTAL;
+ private int mTextSize = 32;
+ private Rect mTextBounds = new Rect();
+ private Bitmap mBitmap;
+ private Rect mBitmapBounds;
+ private String mText;
+ private boolean mUseOnlyDrawable = false;
+
+ public IconView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setup(context);
+ int bitmapRsc = attrs.getAttributeResourceValue(
+ "http://schemas.android.com/apk/res/android", "src", 0);
+ Resources res = context.getResources();
+ Bitmap bitmap = BitmapFactory.decodeStream(res.openRawResource(bitmapRsc));
+ mUseOnlyDrawable = true;
+ setBitmap(bitmap);
+ }
+
+ public IconView(Context context) {
+ super(context);
+ setup(context);
+ }
+
+ private void setup(Context context) {
+ Resources res = getResources();
+ mTextColor = res.getColor(R.color.filtershow_categoryview_text);
+ mBackgroundColor = res.getColor(R.color.filtershow_categoryview_background);
+ mMargin = res.getDimensionPixelOffset(R.dimen.category_panel_margin);
+ mTextSize = res.getDimensionPixelSize(R.dimen.category_panel_text_size);
+ }
+
+ protected void computeTextPosition(String text) {
+ if (text == null) {
+ return;
+ }
+ mPaint.setTextSize(mTextSize);
+ if (getOrientation() == VERTICAL) {
+ text = text.toUpperCase();
+ // TODO: set this in xml
+ mPaint.setTypeface(Typeface.DEFAULT_BOLD);
+ }
+ mPaint.getTextBounds(text, 0, text.length(), mTextBounds);
+ }
+
+ protected void drawText(Canvas canvas, String text) {
+ if (text == null) {
+ return;
+ }
+ float textWidth = mPaint.measureText(text);
+ int x = (int) (canvas.getWidth() - textWidth - 2*mMargin);
+ if (mOrientation == HORIZONTAL) {
+ x = (int) ((canvas.getWidth() - textWidth) / 2.0f);
+ }
+ if (x < 0) {
+ // If the text takes more than the view width,
+ // justify to the left.
+ x = mMargin;
+ }
+ int y = canvas.getHeight() - 2*mMargin;
+ canvas.drawText(text, x, y, mPaint);
+ }
+
+ protected void drawOutlinedText(Canvas canvas, String text) {
+ mPaint.setColor(getBackgroundColor());
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeWidth(3);
+ drawText(canvas, text);
+ mPaint.setColor(getTextColor());
+ mPaint.setStyle(Paint.Style.FILL);
+ mPaint.setStrokeWidth(1);
+ drawText(canvas, text);
+ }
+
+ public int getOrientation() {
+ return mOrientation;
+ }
+
+ public void setOrientation(int orientation) {
+ mOrientation = orientation;
+ }
+
+ public int getMargin() {
+ return mMargin;
+ }
+
+ public int getTextSize() {
+ return mTextSize;
+ }
+
+ public int getTextColor() {
+ return mTextColor;
+ }
+
+ public int getBackgroundColor() {
+ return mBackgroundColor;
+ }
+
+ public void setText(String text) {
+ mText = text;
+ }
+
+ public String getText() {
+ return mText;
+ }
+
+ public void setBitmap(Bitmap bitmap) {
+ mBitmap = bitmap;
+ }
+
+ public Rect getBitmapBounds() {
+ return mBitmapBounds;
+ }
+
+ @Override
+ public CharSequence getContentDescription () {
+ return mText;
+ }
+
+ public boolean isHalfImage() {
+ return false;
+ }
+
+ public void computeBitmapBounds() {
+ if (mUseOnlyDrawable) {
+ mBitmapBounds = new Rect(mMargin/2, mMargin, getWidth() - mMargin/2,
+ getHeight() - mTextSize - 2*mMargin);
+ } else {
+ if (getOrientation() == VERTICAL && isHalfImage()) {
+ mBitmapBounds = new Rect(mMargin/2, mMargin, getWidth()/2, getHeight());
+ } else {
+ mBitmapBounds = new Rect(mMargin/2, mMargin, getWidth() - mMargin/2, getHeight());
+ }
+ }
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ mPaint.reset();
+ mPaint.setAntiAlias(true);
+ canvas.drawColor(mBackgroundColor);
+ computeBitmapBounds();
+ computeTextPosition(getText());
+ if (mBitmap != null) {
+ canvas.save();
+ canvas.clipRect(mBitmapBounds);
+ Matrix m = new Matrix();
+ if (mUseOnlyDrawable) {
+ mPaint.setFilterBitmap(true);
+ m.setRectToRect(new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight()),
+ new RectF(mBitmapBounds), Matrix.ScaleToFit.CENTER);
+ } else {
+ float scaleWidth = mBitmapBounds.width() / (float) mBitmap.getWidth();
+ float scaleHeight = mBitmapBounds.height() / (float) mBitmap.getHeight();
+ float scale = Math.max(scaleWidth, scaleHeight);
+ float dx = (mBitmapBounds.width() - (mBitmap.getWidth() * scale)) / 2f;
+ float dy = (mBitmapBounds.height() - (mBitmap.getHeight() * scale)) / 2f;
+ dx += mBitmapBounds.left;
+ dy += mBitmapBounds.top;
+ m.postScale(scale, scale);
+ m.postTranslate(dx, dy);
+ }
+
+ canvas.drawBitmap(mBitmap, m, mPaint);
+ canvas.restore();
+ }
+
+ if (!mUseOnlyDrawable) {
+ int startColor = Color.argb(0, 0, 0, 0);
+ int endColor = Color.argb(200, 0, 0, 0);
+ float start = getHeight() - 2 * mMargin - 2 * mTextSize;
+ float end = getHeight();
+ Shader shader = new LinearGradient(0, start, 0, end, startColor,
+ endColor, Shader.TileMode.CLAMP);
+ mPaint.setShader(shader);
+ float startGradient = 0;
+ if (getOrientation() == VERTICAL && isHalfImage()) {
+ startGradient = getWidth()/2;
+ }
+ canvas.drawRect(new RectF(startGradient, start, getWidth(), end), mPaint);
+ mPaint.setShader(null);
+ }
+ drawOutlinedText(canvas, getText());
+ }
+}