diff options
Diffstat (limited to 'src')
3 files changed, 69 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/filtershow/crop/CropActivity.java b/src/com/android/gallery3d/filtershow/crop/CropActivity.java index 73064ea50..64d43a2f7 100644 --- a/src/com/android/gallery3d/filtershow/crop/CropActivity.java +++ b/src/com/android/gallery3d/filtershow/crop/CropActivity.java @@ -202,6 +202,8 @@ public class CropActivity extends Activity { if (aspectX > 0 && aspectY > 0) { mCropView.applyAspect(aspectX, aspectY); } + mCropView.setWallpaperSpotlight(mCropExtras.getSpotlightX(), + mCropExtras.getSpotlightY()); } enableSave(true); } else { diff --git a/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java b/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java index a3664d764..7c54cff76 100644 --- a/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java +++ b/src/com/android/gallery3d/filtershow/crop/CropDrawingUtils.java @@ -20,7 +20,9 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.RectF; +import android.graphics.Region; import android.graphics.drawable.Drawable; public abstract class CropDrawingUtils { @@ -92,6 +94,39 @@ public abstract class CropDrawingUtils { } } + public static void drawWallpaperSelectionFrame(Canvas canvas, RectF cropBounds, float spotX, + float spotY, Paint p, Paint shadowPaint) { + float sx = cropBounds.width() * spotX; + float sy = cropBounds.height() * spotY; + float cx = cropBounds.centerX(); + float cy = cropBounds.centerY(); + RectF r1 = new RectF(cx - sx / 2, cy - sy / 2, cx + sx / 2, cy + sy / 2); + float temp = sx; + sx = sy; + sy = temp; + RectF r2 = new RectF(cx - sx / 2, cy - sy / 2, cx + sx / 2, cy + sy / 2); + canvas.save(); + canvas.clipRect(cropBounds); + canvas.clipRect(r1, Region.Op.DIFFERENCE); + canvas.clipRect(r2, Region.Op.DIFFERENCE); + canvas.drawPaint(shadowPaint); + canvas.restore(); + Path path = new Path(); + path.moveTo(r1.left, r1.top); + path.lineTo(r1.left, r1.bottom); + path.moveTo(r1.right, r1.top); + path.lineTo(r1.right, r1.bottom); + path.moveTo(r2.left, r2.top); + path.lineTo(r2.right, r2.top); + path.moveTo(r2.right, r2.top); + path.lineTo(r2.right, r2.bottom); + path.moveTo(r2.left, r2.bottom); + path.lineTo(r2.right, r2.bottom); + path.moveTo(r2.left, r2.top); + path.lineTo(r2.left, r2.bottom); + canvas.drawPath(path, p); + } + public static void drawShadows(Canvas canvas, Paint p, RectF innerBounds, RectF outerBounds) { canvas.drawRect(outerBounds.left, outerBounds.top, innerBounds.right, innerBounds.top, p); canvas.drawRect(innerBounds.right, outerBounds.top, outerBounds.right, innerBounds.bottom, diff --git a/src/com/android/gallery3d/filtershow/crop/CropView.java b/src/com/android/gallery3d/filtershow/crop/CropView.java index dca752146..08c38836e 100644 --- a/src/com/android/gallery3d/filtershow/crop/CropView.java +++ b/src/com/android/gallery3d/filtershow/crop/CropView.java @@ -20,6 +20,8 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.DashPathEffect; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; @@ -32,7 +34,6 @@ import android.view.MotionEvent; import android.view.View; import com.android.gallery3d.R; -import com.android.gallery3d.filtershow.crop.CropDrawingUtils; public class CropView extends View { @@ -59,10 +60,15 @@ public class CropView extends View { private float mPrevX = 0; private float mPrevY = 0; + private float mSpotX = 0; + private float mSpotY = 0; + private boolean mDoSpot = false; private int mShadowMargin = 15; private int mMargin = 32; private int mOverlayShadowColor = 0xCF000000; + private int mOverlayWPShadowColor = 0x5F000000; + private int mWPMarkerColor = 0x7FFFFFFF; private int mMinSideSize = 90; private int mTouchTolerance = 40; @@ -83,6 +89,8 @@ public class CropView extends View { mMinSideSize = (int) rsc.getDimension(R.dimen.crop_min_side); mTouchTolerance = (int) rsc.getDimension(R.dimen.crop_touch_tolerance); mOverlayShadowColor = (int) rsc.getColor(R.color.crop_shadow_color); + mOverlayWPShadowColor = (int) rsc.getColor(R.color.crop_shadow_wp_color); + mWPMarkerColor = (int) rsc.getColor(R.color.crop_wp_markers); } public void initialize(Bitmap image, RectF newCropBounds, RectF newPhotoBounds, int rotation) { @@ -210,6 +218,18 @@ public class CropView extends View { invalidate(); } + public void setWallpaperSpotlight(float spotlightX, float spotlightY) { + mSpotX = spotlightX; + mSpotY = spotlightY; + if (mSpotX > 0 && mSpotY > 0) { + mDoSpot = true; + } + } + + public void unsetWallpaperSpotlight() { + mDoSpot = false; + } + @Override public void onDraw(Canvas canvas) { if (mBitmap == null) { @@ -280,7 +300,17 @@ public class CropView extends View { // Draw crop rect and markers CropDrawingUtils.drawCropRect(canvas, mScreenCropBounds); - CropDrawingUtils.drawRuleOfThird(canvas, mScreenCropBounds); + if (!mDoSpot) { + CropDrawingUtils.drawRuleOfThird(canvas, mScreenCropBounds); + } else { + Paint wpPaint = new Paint(); + wpPaint.setColor(mWPMarkerColor); + wpPaint.setStrokeWidth(3); + wpPaint.setStyle(Paint.Style.STROKE); + wpPaint.setPathEffect(new DashPathEffect(new float[] {20, 30}, 0)); + p.setColor(mOverlayWPShadowColor); + CropDrawingUtils.drawWallpaperSelectionFrame(canvas, mScreenCropBounds, mSpotX, mSpotY, wpPaint, p); + } CropDrawingUtils.drawIndicators(canvas, mCropIndicator, mIndicatorSize, mScreenCropBounds, mCropObj.isFixedAspect(), mCropObj.getSelectState()); } |
