summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-09-12 10:35:17 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-09-12 10:35:17 -0700
commitbef578192b63f954b4f1044e59dc6d050e861017 (patch)
tree407255cf52544d549488a29c0f57efcd3cf63db8
parent3c2cdb00c22fb236d09a924311cc5e19cb0f39f1 (diff)
parentcdc5ceac62eca08eed47f55b1aeb7bd01ca13cff (diff)
downloadandroid_packages_apps_Gallery2-bef578192b63f954b4f1044e59dc6d050e861017.tar.gz
android_packages_apps_Gallery2-bef578192b63f954b4f1044e59dc6d050e861017.tar.bz2
android_packages_apps_Gallery2-bef578192b63f954b4f1044e59dc6d050e861017.zip
am cdc5ceac: am e10fd688: Fix constrained zoom
* commit 'cdc5ceac62eca08eed47f55b1aeb7bd01ca13cff': Fix constrained zoom
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 3234c2516..c981b777d 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -31,6 +31,7 @@ import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.NinePatchDrawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
@@ -596,7 +597,6 @@ public class ImageShow extends View implements OnGestureListener,
Point translation = MasterImage.getImage().getTranslation();
translation.x = (int) (originalTranslation.x + translateX);
translation.y = (int) (originalTranslation.y + translateY);
- constrainTranslation(translation, scaleFactor);
MasterImage.getImage().setTranslation(translation);
mTouchShowOriginal = false;
} else if (enableComparison() && !mOriginalDisabled
@@ -607,18 +607,25 @@ public class ImageShow extends View implements OnGestureListener,
}
}
- if (action == MotionEvent.ACTION_UP) {
+ if (action == MotionEvent.ACTION_UP
+ || action == MotionEvent.ACTION_CANCEL
+ || action == MotionEvent.ACTION_OUTSIDE) {
mInteractionMode = InteractionMode.NONE;
mTouchShowOriginal = false;
mTouchDown.x = 0;
mTouchDown.y = 0;
mTouch.x = 0;
mTouch.y = 0;
+ float scaleFactor = MasterImage.getImage().getScaleFactor();
+ Point translation = MasterImage.getImage().getTranslation();
+ constrainTranslation(translation, scaleFactor);
+ MasterImage.getImage().setTranslation(translation);
if (MasterImage.getImage().getScaleFactor() <= 1) {
MasterImage.getImage().setScaleFactor(1);
MasterImage.getImage().resetTranslation();
}
}
+
invalidate();
return true;
}
@@ -649,15 +656,25 @@ public class ImageShow extends View implements OnGestureListener,
}
private void constrainTranslation(Point translation, float scale) {
- float maxTranslationX = getWidth() / scale;
- float maxTranslationY = getHeight() / scale;
- if (Math.abs(translation.x) > maxTranslationX) {
- translation.x = (int) (Math.signum(translation.x) *
- maxTranslationX);
- if (Math.abs(translation.y) > maxTranslationY) {
- translation.y = (int) (Math.signum(translation.y) *
- maxTranslationY);
- }
+ Matrix originalToScreen = MasterImage.getImage().originalImageToScreen();
+ Matrix screenToOriginal = new Matrix();
+ originalToScreen.invert(screenToOriginal);
+ Rect originalBounds = MasterImage.getImage().getOriginalBounds();
+ RectF screenPos = new RectF(originalBounds);
+ originalToScreen.mapRect(screenPos);
+ if (screenPos.right < getWidth() - mShadowMargin) {
+ float tx = mImageBounds.right - translation.x * scale;
+ translation.x = (int) ((getWidth() - mShadowMargin - tx) / scale);
+ } else if (screenPos.left > mShadowMargin) {
+ float tx = mImageBounds.left - translation.x * scale;
+ translation.x = (int) ((mShadowMargin - tx) / scale);
+ }
+ if (screenPos.bottom < getHeight() - mShadowMargin) {
+ float ty = mImageBounds.bottom - translation.y * scale;
+ translation.y = (int) ((getHeight() - mShadowMargin - ty) / scale);
+ } else if (screenPos.top > mShadowMargin) {
+ float ty = mImageBounds.top - translation.y * scale;
+ translation.y = (int) ((mShadowMargin - ty) / scale);
}
}
@@ -733,9 +750,7 @@ public class ImageShow extends View implements OnGestureListener,
Point translation = MasterImage.getImage().getTranslation();
translation.x = (int) (mOriginalTranslation.x + translateX);
translation.y = (int) (mOriginalTranslation.y + translateY);
- constrainTranslation(translation, scaleFactor);
MasterImage.getImage().setTranslation(translation);
-
invalidate();
return true;
}