zoom to center of double tap

Change-Id: Idfc257f92dd1a97d9109b9f5325299b8e1432c37
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index b833cf8..ac78b75 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -600,6 +600,7 @@
                 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
@@ -644,11 +645,32 @@
         }
         if (scale != MasterImage.getImage().getScaleFactor()) {
             MasterImage.getImage().setScaleFactor(scale);
+            float translateX = (getWidth() / 2 - arg0.getX());
+            float translateY = (getHeight() / 2 - arg0.getY());
+            Point translation = MasterImage.getImage().getTranslation();
+            translation.x = (int) (mOriginalTranslation.x + translateX);
+            translation.y = (int) (mOriginalTranslation.y + translateY);
+            constrainTranslation(translation, scale);
+            MasterImage.getImage().setTranslation(translation);
             invalidate();
         }
         return true;
     }
 
+    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);
+            }
+
+        }
+    }
+
     @Override
     public boolean onDoubleTapEvent(MotionEvent arg0) {
         // TODO Auto-generated method stub
@@ -731,6 +753,7 @@
         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();
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index ab8567f..8f490ca 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -35,7 +35,7 @@
 
     private static final String LOGTAG = "MasterImage";
     private boolean DEBUG  = false;
-    private static final boolean DISABLEZOOM = true;
+    private static final boolean DISABLEZOOM = false;
     private static MasterImage sMasterImage = null;
     private static int sIconSeedSize = 128;
     private static float sHistoryPreviewSize = 128.0f;