diff options
author | Michael Kolb <kolby@google.com> | 2013-04-30 09:23:23 -0700 |
---|---|---|
committer | Michael Kolb <kolby@google.com> | 2013-04-30 09:23:23 -0700 |
commit | b7c49994231f31f5cf4de4a66eec7a85a3bd9551 (patch) | |
tree | af702be3a4b029483296d1ec0ac6cf65bed7dfe9 /src/com/android/camera/ui | |
parent | 6cf36371a5888be8e137af1ede183bd592bb07b2 (diff) | |
download | android_packages_apps_Snap-b7c49994231f31f5cf4de4a66eec7a85a3bd9551.tar.gz android_packages_apps_Snap-b7c49994231f31f5cf4de4a66eec7a85a3bd9551.tar.bz2 android_packages_apps_Snap-b7c49994231f31f5cf4de4a66eec7a85a3bd9551.zip |
Remove empty slots from menu
Bug: 8640131
When a specific camera doesn't support one of the menu options,
the option is removed from the menu, no empty spot anymore.
Change-Id: I002d6347c35cb0bfd5f71d880294f04f45ffb38f
Diffstat (limited to 'src/com/android/camera/ui')
-rw-r--r-- | src/com/android/camera/ui/PieItem.java | 15 | ||||
-rw-r--r-- | src/com/android/camera/ui/PieRenderer.java | 60 |
2 files changed, 32 insertions, 43 deletions
diff --git a/src/com/android/camera/ui/PieItem.java b/src/com/android/camera/ui/PieItem.java index 6dbcb85d5..47fe06758 100644 --- a/src/com/android/camera/ui/PieItem.java +++ b/src/com/android/camera/ui/PieItem.java @@ -35,8 +35,6 @@ public class PieItem { private Drawable mDrawable; private int level; - private int mPosition; - private int mCount; private boolean mSelected; private boolean mEnabled; @@ -68,19 +66,6 @@ public class PieItem { return mLabel; } - public void setPosition(int pos, int count) { - mPosition = pos; - mCount = count; - } - - public int getPosition() { - return mPosition; - } - - public int getCount() { - return mCount; - } - public boolean hasItems() { return mItems != null; } diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java index a4e7eb044..dcd6350e2 100644 --- a/src/com/android/camera/ui/PieRenderer.java +++ b/src/com/android/camera/ui/PieRenderer.java @@ -370,10 +370,12 @@ public class PieRenderer extends OverlayRenderer Path path = makeSlice(getDegrees(0) + extend, getDegrees(SWEEP_ARC) - extend, mArcRadius, mArcRadius + mRadiusInc + mRadiusInc / 4, mPieCenterX, mArcCenterY - level * mRadiusInc); + final int count = items.size(); + int pos = 0; for (PieItem item : items) { // shared between items item.setPath(path); - float angle = getArcCenter(item); + float angle = getArcCenter(item, pos, count); int w = item.getIntrinsicWidth(); int h = item.getIntrinsicHeight(); // move views to outer border @@ -386,6 +388,7 @@ public class PieRenderer extends OverlayRenderer if (item.hasItems()) { layoutItems(level + 1, item.getItems()); } + pos++; } } @@ -403,14 +406,14 @@ public class PieRenderer extends OverlayRenderer return path; } - private float getArcCenter(PieItem item) { - return getCenter(item.getPosition(), item.getCount(), SWEEP_ARC); + private float getArcCenter(PieItem item, int pos, int count) { + return getCenter(pos, count, SWEEP_ARC); } - private float getSliceCenter(PieItem item) { + private float getSliceCenter(PieItem item, int pos, int count) { float center = (getCenterAngle() - CENTER) * 0.5f + CENTER; - return center + (item.getCount() - 1) * SWEEP_SLICE / 2f - - item.getPosition() * SWEEP_SLICE; + return center + (count - 1) * SWEEP_SLICE / 2f + - pos * SWEEP_SLICE; } private float getCenter(int pos, int count, float sweep) { @@ -520,20 +523,28 @@ public class PieRenderer extends OverlayRenderer if (!hasOpenItem() || (mXFade != null)) { // draw base menu drawArc(canvas, getLevel(), getParent()); + List<PieItem> items = getParent().getItems(); + final int count = items.size(); + int pos = 0; for (PieItem item : getParent().getItems()) { - drawItem(Math.max(0, mOpen.size() - 2), canvas, item, alpha); + drawItem(Math.max(0, mOpen.size() - 2), pos, count, canvas, item, alpha); + pos++; } mLabel.draw(canvas); } if (hasOpenItem()) { int level = getLevel(); drawArc(canvas, level, getOpenItem()); - for (PieItem inner : getOpenItem().getItems()) { + List<PieItem> items = getOpenItem().getItems(); + final int count = items.size(); + int pos = 0; + for (PieItem inner : items) { if (mFadeOut != null) { - drawItem(level, canvas, inner, alpha); + drawItem(level, pos, count, canvas, inner, alpha); } else { - drawItem(level, canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1); + drawItem(level, pos, count, canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1); } + pos++; } mLabel.draw(canvas); } @@ -543,19 +554,9 @@ public class PieRenderer extends OverlayRenderer private void drawArc(Canvas canvas, int level, PieItem item) { // arc if (mState == STATE_PIE) { - int min = Integer.MAX_VALUE; - int max = Integer.MIN_VALUE; - int count = 0; - for (PieItem child : item.getItems()) { - final int p = child.getPosition(); - count = child.getCount(); - if (p < min) min = p; - if (p > max) max = p; - } - float start = mCenterAngle + (count - 1) * SWEEP_ARC / 2f - min * SWEEP_ARC - + SWEEP_ARC / 2f; - float end = mCenterAngle + (count - 1) * SWEEP_ARC / 2f - max * SWEEP_ARC - - SWEEP_ARC / 2f; + final int count = item.getItems().size(); + float start = mCenterAngle + (count * SWEEP_ARC / 2f); + float end = mCenterAngle - (count * SWEEP_ARC / 2f); int cy = mArcCenterY - level * mRadiusInc; canvas.drawArc(new RectF(mPieCenterX - mArcRadius, cy - mArcRadius, mPieCenterX + mArcRadius, cy + mArcRadius), @@ -563,14 +564,14 @@ public class PieRenderer extends OverlayRenderer } } - private void drawItem(int level, Canvas canvas, PieItem item, float alpha) { + private void drawItem(int level, int pos, int count, Canvas canvas, PieItem item, float alpha) { if (mState == STATE_PIE) { if (item.getPath() != null) { int y = mArcCenterY - level * mRadiusInc; if (item.isSelected()) { Paint p = mSelectedPaint; int state = canvas.save(); - float angle = getArcCenter(item) - SWEEP_ARC / 2f; + float angle = getArcCenter(item, pos, count) - SWEEP_ARC / 2f; angle = getDegrees(angle); canvas.rotate(angle, mPieCenterX, y); if (mFadeOut != null) { @@ -679,8 +680,8 @@ public class PieRenderer extends OverlayRenderer return polarCoords.y < mArcRadius - mRadiusInc; } - private boolean inside(PointF polar, PieItem item) { - float start = getSliceCenter(item) - SWEEP_SLICE / 2f; + private boolean inside(PointF polar, PieItem item, int pos, int count) { + float start = getSliceCenter(item, pos, count) - SWEEP_SLICE / 2f; boolean res = (mArcRadius < polar.y) && (start < polar.x) && (start + SWEEP_SLICE > polar.x) @@ -801,10 +802,13 @@ public class PieRenderer extends OverlayRenderer private PieItem findItem(PointF polar) { // find the matching item: List<PieItem> items = getOpenItem().getItems(); + final int count = items.size(); + int pos = 0; for (PieItem item : items) { - if (inside(polar, item)) { + if (inside(polar, item, pos, count)) { return item; } + pos++; } return null; } |