From cca91908c2dc72e2c318f8084b52dc10171c1906 Mon Sep 17 00:00:00 2001 From: Jamie McDonald Date: Wed, 12 Mar 2014 16:47:24 +0100 Subject: [PATCH] Removed unused circle crop code. Some cleaning. --- .../android/crop/CropImageActivity.java | 2 +- .../android/crop/HighlightView.java | 233 +++++++----------- .../res/drawable-hdpi/indicator_autocrop.png | Bin 3266 -> 0 bytes 3 files changed, 88 insertions(+), 147 deletions(-) delete mode 100644 lib/src/main/res/drawable-hdpi/indicator_autocrop.png diff --git a/lib/src/main/java/com/soundcloud/android/crop/CropImageActivity.java b/lib/src/main/java/com/soundcloud/android/crop/CropImageActivity.java index 58b8956..dba9468 100644 --- a/lib/src/main/java/com/soundcloud/android/crop/CropImageActivity.java +++ b/lib/src/main/java/com/soundcloud/android/crop/CropImageActivity.java @@ -216,7 +216,7 @@ public class CropImageActivity extends MonitoredActivity { int y = (height - cropHeight) / 2; RectF cropRect = new RectF(x, y, x + cropWidth, y + cropHeight); - hv.setup(mImageView.getUnrotatedMatrix(), imageRect, cropRect, false, + hv.setup(mImageView.getUnrotatedMatrix(), imageRect, cropRect, mAspectX != 0 && mAspectY != 0); mImageView.add(hv); } diff --git a/lib/src/main/java/com/soundcloud/android/crop/HighlightView.java b/lib/src/main/java/com/soundcloud/android/crop/HighlightView.java index 7713287..6724083 100644 --- a/lib/src/main/java/com/soundcloud/android/crop/HighlightView.java +++ b/lib/src/main/java/com/soundcloud/android/crop/HighlightView.java @@ -24,13 +24,14 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.graphics.drawable.Drawable; -import android.util.FloatMath; import android.view.View; -// This class is used by CropImage to display a highlighted cropping rectangle -// overlayed with the image. There are two coordinate spaces in use. One is -// image, another is screen. computeLayout() uses mMatrix to map from image -// space to screen space. +/* + * This class is used by CropImage to display a highlighted cropping rectangle + * overlayed with the image. There are two coordinate spaces in use. One is + * image, another is screen. computeLayout() uses mMatrix to map from image + * space to screen space. + */ class HighlightView { @SuppressWarnings("unused") @@ -44,6 +45,24 @@ class HighlightView { public static final int GROW_BOTTOM_EDGE = (1 << 4); public static final int MOVE = (1 << 5); + enum ModifyMode { None, Move, Grow } + + private ModifyMode mMode = ModifyMode.None; + + Rect mDrawRect; // in screen space + private RectF mImageRect; // in image space + RectF mCropRect; // in image space + Matrix mMatrix; + + private boolean mMaintainAspectRatio; + private float mInitialAspectRatio; + + private Drawable mResizeDrawableWidth; + private Drawable mResizeDrawableHeight; + + private final Paint mFocusPaint = new Paint(); + private final Paint mNoFocusPaint = new Paint(); + private final Paint mOutlinePaint = new Paint(); public HighlightView(View ctx) { mContext = ctx; @@ -55,8 +74,6 @@ class HighlightView { resources.getDrawable(R.drawable.camera_crop_width); mResizeDrawableHeight = resources.getDrawable(R.drawable.camera_crop_height); - mResizeDrawableDiagonal = - resources.getDrawable(R.drawable.indicator_autocrop); } boolean mIsFocused; @@ -82,18 +99,10 @@ class HighlightView { } else { Rect viewDrawingRect = new Rect(); mContext.getDrawingRect(viewDrawingRect); - if (mCircle) { - float width = mDrawRect.width(); - float height = mDrawRect.height(); - path.addCircle(mDrawRect.left + (width / 2), - mDrawRect.top + (height / 2), - width / 2, - Path.Direction.CW); - mOutlinePaint.setColor(0xFFEF04D6); - } else { - path.addRect(new RectF(mDrawRect), Path.Direction.CW); - mOutlinePaint.setColor(0xFFFF8A00); - } + + path.addRect(new RectF(mDrawRect), Path.Direction.CW); + mOutlinePaint.setColor(0xFFFF8A00); + canvas.clipPath(path, Region.Op.DIFFERENCE); canvas.drawRect(viewDrawingRect, hasFocus() ? mFocusPaint : mNoFocusPaint); @@ -102,64 +111,48 @@ class HighlightView { canvas.drawPath(path, mOutlinePaint); if (mMode == ModifyMode.Grow) { - if (mCircle) { - int width = mResizeDrawableDiagonal.getIntrinsicWidth(); - int height = mResizeDrawableDiagonal.getIntrinsicHeight(); + int left = mDrawRect.left + 1; + int right = mDrawRect.right + 1; + int top = mDrawRect.top + 4; + int bottom = mDrawRect.bottom + 3; - int d = (int) Math.round(Math.cos(/*45deg*/Math.PI / 4D) - * (mDrawRect.width() / 2D)); - int x = mDrawRect.left - + (mDrawRect.width() / 2) + d - width / 2; - int y = mDrawRect.top - + (mDrawRect.height() / 2) - d - height / 2; - mResizeDrawableDiagonal.setBounds(x, y, - x + mResizeDrawableDiagonal.getIntrinsicWidth(), - y + mResizeDrawableDiagonal.getIntrinsicHeight()); - mResizeDrawableDiagonal.draw(canvas); - } else { - int left = mDrawRect.left + 1; - int right = mDrawRect.right + 1; - int top = mDrawRect.top + 4; - int bottom = mDrawRect.bottom + 3; + int widthWidth = + mResizeDrawableWidth.getIntrinsicWidth() / 2; + int widthHeight = + mResizeDrawableWidth.getIntrinsicHeight() / 2; + int heightHeight = + mResizeDrawableHeight.getIntrinsicHeight() / 2; + int heightWidth = + mResizeDrawableHeight.getIntrinsicWidth() / 2; - int widthWidth = - mResizeDrawableWidth.getIntrinsicWidth() / 2; - int widthHeight = - mResizeDrawableWidth.getIntrinsicHeight() / 2; - int heightHeight = - mResizeDrawableHeight.getIntrinsicHeight() / 2; - int heightWidth = - mResizeDrawableHeight.getIntrinsicWidth() / 2; + int xMiddle = mDrawRect.left + + ((mDrawRect.right - mDrawRect.left) / 2); + int yMiddle = mDrawRect.top + + ((mDrawRect.bottom - mDrawRect.top) / 2); - int xMiddle = mDrawRect.left - + ((mDrawRect.right - mDrawRect.left) / 2); - int yMiddle = mDrawRect.top - + ((mDrawRect.bottom - mDrawRect.top) / 2); + mResizeDrawableWidth.setBounds(left - widthWidth, + yMiddle - widthHeight, + left + widthWidth, + yMiddle + widthHeight); + mResizeDrawableWidth.draw(canvas); - mResizeDrawableWidth.setBounds(left - widthWidth, - yMiddle - widthHeight, - left + widthWidth, - yMiddle + widthHeight); - mResizeDrawableWidth.draw(canvas); + mResizeDrawableWidth.setBounds(right - widthWidth, + yMiddle - widthHeight, + right + widthWidth, + yMiddle + widthHeight); + mResizeDrawableWidth.draw(canvas); - mResizeDrawableWidth.setBounds(right - widthWidth, - yMiddle - widthHeight, - right + widthWidth, - yMiddle + widthHeight); - mResizeDrawableWidth.draw(canvas); + mResizeDrawableHeight.setBounds(xMiddle - heightWidth, + top - heightHeight, + xMiddle + heightWidth, + top + heightHeight); + mResizeDrawableHeight.draw(canvas); - mResizeDrawableHeight.setBounds(xMiddle - heightWidth, - top - heightHeight, - xMiddle + heightWidth, - top + heightHeight); - mResizeDrawableHeight.draw(canvas); - - mResizeDrawableHeight.setBounds(xMiddle - heightWidth, - bottom - heightHeight, - xMiddle + heightWidth, - bottom + heightHeight); - mResizeDrawableHeight.draw(canvas); - } + mResizeDrawableHeight.setBounds(xMiddle - heightWidth, + bottom - heightHeight, + xMiddle + heightWidth, + bottom + heightHeight); + mResizeDrawableHeight.draw(canvas); } } } @@ -177,58 +170,30 @@ class HighlightView { final float hysteresis = 20F; int retval = GROW_NONE; - if (mCircle) { - float distX = x - r.centerX(); - float distY = y - r.centerY(); - int distanceFromCenter = - (int) FloatMath.sqrt(distX * distX + distY * distY); - int radius = mDrawRect.width() / 2; - int delta = distanceFromCenter - radius; - if (Math.abs(delta) <= hysteresis) { - if (Math.abs(distY) > Math.abs(distX)) { - if (distY < 0) { - retval = GROW_TOP_EDGE; - } else { - retval = GROW_BOTTOM_EDGE; - } - } else { - if (distX < 0) { - retval = GROW_LEFT_EDGE; - } else { - retval = GROW_RIGHT_EDGE; - } - } - } else if (distanceFromCenter < radius) { - retval = MOVE; - } else { - retval = GROW_NONE; - } - } else { - // verticalCheck makes sure the position is between the top and - // the bottom edge (with some tolerance). Similar for horizCheck. - boolean verticalCheck = (y >= r.top - hysteresis) - && (y < r.bottom + hysteresis); - boolean horizCheck = (x >= r.left - hysteresis) - && (x < r.right + hysteresis); + // verticalCheck makes sure the position is between the top and + // the bottom edge (with some tolerance). Similar for horizCheck. + boolean verticalCheck = (y >= r.top - hysteresis) + && (y < r.bottom + hysteresis); + boolean horizCheck = (x >= r.left - hysteresis) + && (x < r.right + hysteresis); - // Check whether the position is near some edge(s). - if ((Math.abs(r.left - x) < hysteresis) && verticalCheck) { - retval |= GROW_LEFT_EDGE; - } - if ((Math.abs(r.right - x) < hysteresis) && verticalCheck) { - retval |= GROW_RIGHT_EDGE; - } - if ((Math.abs(r.top - y) < hysteresis) && horizCheck) { - retval |= GROW_TOP_EDGE; - } - if ((Math.abs(r.bottom - y) < hysteresis) && horizCheck) { - retval |= GROW_BOTTOM_EDGE; - } + // Check whether the position is near some edge(s). + if ((Math.abs(r.left - x) < hysteresis) && verticalCheck) { + retval |= GROW_LEFT_EDGE; + } + if ((Math.abs(r.right - x) < hysteresis) && verticalCheck) { + retval |= GROW_RIGHT_EDGE; + } + if ((Math.abs(r.top - y) < hysteresis) && horizCheck) { + retval |= GROW_TOP_EDGE; + } + if ((Math.abs(r.bottom - y) < hysteresis) && horizCheck) { + retval |= GROW_BOTTOM_EDGE; + } - // Not near any edge but inside the rectangle: move. - if (retval == GROW_NONE && r.contains((int) x, (int) y)) { - retval = MOVE; - } + // Not near any edge but inside the rectangle: move. + if (retval == GROW_NONE && r.contains((int) x, (int) y)) { + retval = MOVE; } return retval; } @@ -357,17 +322,13 @@ class HighlightView { mDrawRect = computeLayout(); } - public void setup(Matrix m, Rect imageRect, RectF cropRect, boolean circle, + public void setup(Matrix m, Rect imageRect, RectF cropRect, boolean maintainAspectRatio) { - if (circle) { - maintainAspectRatio = true; - } mMatrix = new Matrix(m); mCropRect = cropRect; mImageRect = new RectF(imageRect); mMaintainAspectRatio = maintainAspectRatio; - mCircle = circle; mInitialAspectRatio = mCropRect.width() / mCropRect.height(); mDrawRect = computeLayout(); @@ -382,24 +343,4 @@ class HighlightView { init(); } - enum ModifyMode { None, Move, Grow } - - private ModifyMode mMode = ModifyMode.None; - - Rect mDrawRect; // in screen space - private RectF mImageRect; // in image space - RectF mCropRect; // in image space - Matrix mMatrix; - - private boolean mMaintainAspectRatio; - private float mInitialAspectRatio; - private boolean mCircle; - - private Drawable mResizeDrawableWidth; - private Drawable mResizeDrawableHeight; - private Drawable mResizeDrawableDiagonal; - - private final Paint mFocusPaint = new Paint(); - private final Paint mNoFocusPaint = new Paint(); - private final Paint mOutlinePaint = new Paint(); } diff --git a/lib/src/main/res/drawable-hdpi/indicator_autocrop.png b/lib/src/main/res/drawable-hdpi/indicator_autocrop.png deleted file mode 100644 index 73fa59e1419a69bbab09e8565000ce3b5bc4e810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3266 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 z