summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Hoford <hoford@google.com>2013-02-21 15:18:37 -0800
committerJohn Hoford <hoford@google.com>2013-02-21 15:19:49 -0800
commitc67da3cdf3cc655a384d9d591fee051fdafb4630 (patch)
treed94130e4cf16a89b1f89881eedf2fdb710b749ba
parent8ae11144fc1fc15062297d03fb86d6bfb443953a (diff)
downloadandroid_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
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java4
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java38
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java16
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java37
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);
}