diff options
author | John Hoford <hoford@google.com> | 2013-02-21 15:18:37 -0800 |
---|---|---|
committer | John Hoford <hoford@google.com> | 2013-02-21 15:19:49 -0800 |
commit | c67da3cdf3cc655a384d9d591fee051fdafb4630 (patch) | |
tree | d94130e4cf16a89b1f89881eedf2fdb710b749ba | |
parent | 8ae11144fc1fc15062297d03fb86d6bfb443953a (diff) | |
download | android_packages_apps_Snap-c67da3cdf3cc655a384d9d591fee051fdafb4630.tar.gz android_packages_apps_Snap-c67da3cdf3cc655a384d9d591fee051fdafb4630.tar.bz2 android_packages_apps_Snap-c67da3cdf3cc655a384d9d591fee051fdafb4630.zip |
fix draw and ellipse to handle pinch to zoom
Change-Id: I8af9b37dcd98425959742a4142756963363d1cec
4 files changed, 60 insertions, 35 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java index e41f0a622..8b8504bbc 100644 --- a/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java +++ b/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java @@ -150,6 +150,10 @@ public class FilterDrawRepresentation extends FilterRepresentation { mCurrent = null; } + public void clearCurrentSection() { + mCurrent = null; + } + public void clear() { mCurrent = null; mDrawing.clear(); diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java b/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java index c46baf566..479652ce3 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java @@ -27,11 +27,13 @@ public class ImageDraw extends ImageShow { public ImageDraw(Context context, AttributeSet attrs) { super(context, attrs); resetParameter(); + super.setOriginalDisabled(true); } public ImageDraw(Context context) { super(context); resetParameter(); + super.setOriginalDisabled(true); } public void setEditor(EditorDraw editorDraw) { @@ -82,27 +84,32 @@ public class ImageDraw extends ImageShow { float[] mTmpPoint = new float[2]; // so we do not malloc @Override public boolean onTouchEvent(MotionEvent event) { - super.onTouchEvent(event); - - if (event.getPointerCount() != 1) { - return true; + boolean ret = super.onTouchEvent(event); + if (event.getPointerCount() > 1) { + if (mFRep.getCurrentDrawing() != null) { + mFRep.clearCurrentSection(); + mEditorDraw.commitLocalRepresentation(); + } + return ret; } - - if (didFinishScalingOperation()) { - return true; + if (event.getAction() != MotionEvent.ACTION_DOWN) { + if (mFRep.getCurrentDrawing() == null) { + return ret; + } } ImageFilterDraw filter = (ImageFilterDraw) getCurrentFilter(); if (event.getAction() == MotionEvent.ACTION_DOWN) { + calcScreenMapping(); mTmpPoint[0] = event.getX(); mTmpPoint[1] = event.getY(); mToOrig.mapPoints(mTmpPoint); mFRep.startNewSection(mType, mCurrentColor, mCurrentSize, mTmpPoint[0], mTmpPoint[1]); - } if (event.getAction() == MotionEvent.ACTION_MOVE) { + int historySize = event.getHistorySize(); final int pointerCount = event.getPointerCount(); for (int h = 0; h < historySize; h++) { @@ -127,19 +134,10 @@ public class ImageDraw extends ImageShow { return true; } - Matrix mRotateToScreen; - Matrix mToScreen; - Matrix mToOrig = new Matrix(); + Matrix mRotateToScreen = new Matrix(); + Matrix mToOrig; private void calcScreenMapping() { - - GeometryMetadata geo = getImagePreset().mGeoData; - mToScreen = geo.getOriginalToScreen(false, - mImageLoader.getOriginalBounds().width(), - mImageLoader.getOriginalBounds().height(), getWidth(), getHeight()); - mRotateToScreen = geo.getOriginalToScreen(true, - mImageLoader.getOriginalBounds().width(), - mImageLoader.getOriginalBounds().height(), getWidth(), getHeight()); - mRotateToScreen.invert(mToOrig); + mToOrig = getScreenToImageMatrix(true); mToOrig.invert(mRotateToScreen); } diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java index 94c9ae1f5..b91ebd195 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java @@ -26,6 +26,7 @@ import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; import android.widget.LinearLayout; +import com.android.gallery3d.app.Log; import com.android.gallery3d.filtershow.FilterShowActivity; import com.android.gallery3d.filtershow.PanelController; import com.android.gallery3d.filtershow.cache.ImageLoader; @@ -55,7 +56,7 @@ public class ImageShow extends View implements OnGestureListener, private ScaleGestureDetector mScaleGestureDetector = null; protected Rect mImageBounds = new Rect(); - + private boolean mOriginalDisabled = false; private boolean mTouchShowOriginal = false; private long mTouchShowOriginalDate = 0; private final long mTouchShowOriginalDelayMin = 200; // 200ms @@ -503,6 +504,14 @@ public class ImageShow extends View implements OnGestureListener, return mScaleGestureDetector.isInProgress(); } + protected boolean isOriginalDisabled() { + return mOriginalDisabled; + } + + protected void setOriginalDisabled(boolean originalDisabled) { + mOriginalDisabled = originalDisabled; + } + @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); @@ -539,7 +548,7 @@ public class ImageShow extends View implements OnGestureListener, translation.x = (int) (originalTranslation.x + translateX); translation.y = (int) (originalTranslation.y + translateY); } - } else if (!mActivity.isShowingHistoryPanel() + } else if (!mOriginalDisabled && !mActivity.isShowingHistoryPanel() && (System.currentTimeMillis() - mTouchShowOriginalDate > mTouchShowOriginalDelayMin) && event.getPointerCount() == 1) { @@ -593,6 +602,9 @@ public class ImageShow extends View implements OnGestureListener, @Override public boolean onFling(MotionEvent startEvent, MotionEvent endEvent, float arg2, float arg3) { + if (mActivity == null) { + return false; + } if ((!mActivity.isShowingHistoryPanel() && startEvent.getX() > endEvent.getX()) || (mActivity.isShowingHistoryPanel() && endEvent.getX() > startEvent.getX())) { if (!mTouchShowOriginal diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java b/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java index 729ac7f41..a51d10276 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java @@ -20,6 +20,7 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Matrix; import android.util.AttributeSet; +import android.util.Log; import android.view.MotionEvent; import com.android.gallery3d.filtershow.editors.EditorVignette; @@ -48,16 +49,28 @@ public class ImageVignette extends ImageShow { @Override public boolean onTouchEvent(MotionEvent event) { int mask = event.getActionMasked(); - if (MotionEvent.ACTION_UP == mask) { - mActiveHandle = -1; - } - if (MotionEvent.ACTION_DOWN == mask && event.getPointerCount() == 1) { - mActiveHandle = mElipse.getCloseHandle(event.getX(), event.getY()); - } - if (mActiveHandle == -1 || event.getPointerCount() > 1) { - mActiveHandle = -1; - - return super.onTouchEvent(event); + if (mActiveHandle == -1) { + if (MotionEvent.ACTION_DOWN != mask) { + return super.onTouchEvent(event); + } + if (event.getPointerCount() == 1) { + mActiveHandle = mElipse.getCloseHandle(event.getX(), event.getY()); + } + if (mActiveHandle == -1) { + return super.onTouchEvent(event); + } + } else { + switch (mask) { + case MotionEvent.ACTION_UP: + mActiveHandle = -1; + break; + case MotionEvent.ACTION_DOWN: + if (event.getPointerCount() == 1) { + Log.v(LOGTAG, "################### ACTION_DOWN odd " + mActiveHandle + + " touches=1"); + } + break; + } } float x = event.getX(); float y = event.getY(); @@ -121,9 +134,7 @@ public class ImageVignette extends ImageShow { @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); - if (mElipse.isUndefined()) { - setRepresentation(mVignetteRep); - } + setRepresentation(mVignetteRep); mElipse.draw(canvas); } |