summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-09-12 10:26:57 -0700
committernicolasroard <nicolasroard@google.com>2013-09-12 10:26:57 -0700
commite10fd68874fa3cff0e5c3ca07f1e5b9d40be1299 (patch)
tree33ae37205281059ef994c22c6aeb6bf2c71beaeb /src
parent34e8432353acb0c45253cf4ef855512c7472019b (diff)
downloadandroid_packages_apps_Gallery2-e10fd68874fa3cff0e5c3ca07f1e5b9d40be1299.tar.gz
android_packages_apps_Gallery2-e10fd68874fa3cff0e5c3ca07f1e5b9d40be1299.tar.bz2
android_packages_apps_Gallery2-e10fd68874fa3cff0e5c3ca07f1e5b9d40be1299.zip
Fix constrained zoom
Change-Id: I3613ba23154897e9b7c1677ec9911453b5f73c0f
Diffstat (limited to 'src')
-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;
}