Merge "Add stitching panorama image to secure album." into gb-ub-photos-arches
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index d308059..fbec411 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -60,6 +60,7 @@
 import com.android.gallery3d.filtershow.presets.ImagePreset;
 import com.android.gallery3d.filtershow.provider.SharedImageProvider;
 import com.android.gallery3d.filtershow.tools.SaveCopyTask;
+import com.android.gallery3d.filtershow.ui.ImageButtonTitle;
 import com.android.gallery3d.filtershow.ui.ImageCurves;
 
 import java.io.File;
@@ -96,6 +97,7 @@
     private static final int SELECT_PICTURE = 1;
     private static final String LOGTAG = "FilterShowActivity";
     protected static final boolean ANIMATE_PANELS = true;
+    private static int mImageBorderSize = 40;
 
     private boolean mShowingHistoryPanel = false;
     private boolean mShowingImageStatePanel = false;
@@ -117,6 +119,15 @@
 
         ImageFilterRS.setRenderScriptContext(this);
 
+        // TODO: get those values from XML.
+        ImageShow.setTextSize((int) getPixelsFromDip(12));
+        ImageShow.setTextPadding((int) getPixelsFromDip(10));
+        ImageButtonTitle.setTextSize((int) getPixelsFromDip(12));
+        ImageButtonTitle.setTextPadding((int) getPixelsFromDip(10));
+        ImageSmallFilter.setMargin((int) getPixelsFromDip(6));
+        ImageSmallFilter.setTextMargin((int) getPixelsFromDip(4));
+        mImageBorderSize = (int) getPixelsFromDip(20);
+
         setContentView(R.layout.filtershow_activity);
         ActionBar actionBar = getActionBar();
         actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
@@ -560,10 +571,10 @@
         borders[p++] = new ImageFilterBorder(npd1);
         Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_brush);
         borders[p++] = new ImageFilterBorder(npd2);
-        borders[p++] = new ImageFilterParametricBorder(Color.BLACK, 100, 0);
-        borders[p++] = new ImageFilterParametricBorder(Color.BLACK, 100, 100);
-        borders[p++] = new ImageFilterParametricBorder(Color.WHITE, 100, 0);
-        borders[p++] = new ImageFilterParametricBorder(Color.WHITE, 100, 100);
+        borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 0);
+        borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, mImageBorderSize);
+        borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 0);
+        borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, mImageBorderSize);
 
         ImageSmallFilter previousFilter = null;
         for (int i = 0; i < p; i++) {
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterGeometry.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterGeometry.java
index 9bdffee..3d48b7e 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterGeometry.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterGeometry.java
@@ -84,9 +84,9 @@
         // canvas to do a simple implementation...
         // TODO: and be more memory efficient! (do it in native?)
         Rect cropBounds = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
-        RectF c = mGeometry.getCropBounds();
-        if(c != null && c.width() > 0 && c.height() > 0)
-            c.roundOut(cropBounds);
+        RectF crop = mGeometry.getCropBounds(bitmap);
+        if(crop.width() > 0 && crop.height() > 0)
+            crop.roundOut(cropBounds);
         Bitmap temp = null;
         if (mGeometry.hasSwitchedWidthHeight()) {
             temp = Bitmap.createBitmap(cropBounds.height(), cropBounds.width(), mConfig);
@@ -94,7 +94,7 @@
             temp = Bitmap.createBitmap(cropBounds.width(), cropBounds.height(), mConfig);
         }
 
-        Matrix drawMatrix = buildMatrix(c);
+        Matrix drawMatrix = buildMatrix(crop);
         Canvas canvas = new Canvas(temp);
         canvas.drawBitmap(bitmap, drawMatrix, new Paint());
         return temp;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java b/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
index d412f58..352fa5b 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
@@ -74,10 +74,19 @@
         return mStraightenRotation;
     }
 
-    public RectF getCropBounds() {
+    public RectF getPreviewCropBounds() {
         return new RectF(mCropBounds);
     }
 
+    public RectF getCropBounds(Bitmap bitmap) {
+        float scale = 1.0f;
+        if (mPhotoBounds.width() > 0) {
+            scale = bitmap.getWidth() / mPhotoBounds.width();
+        }
+        return new RectF(mCropBounds.left * scale, mCropBounds.top * scale,
+                mCropBounds.right * scale, mCropBounds.bottom * scale);
+    }
+
     public FLIP getFlipType() {
         return mFlip;
     }
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
index d8d03dc..68df702 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
@@ -122,7 +122,7 @@
     }
 
     protected RectF getLocalCropBounds() {
-        return mLocalGeometry.getCropBounds();
+        return mLocalGeometry.getPreviewCropBounds();
     }
 
     protected RectF getLocalDisplayBounds() {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index f4a2184..3fd6d4f 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -88,6 +88,14 @@
     private SeekBar mSeekBar = null;
     private PanelController mController = null;
 
+    public static void setTextSize(int value) {
+        mTextSize = value;
+    }
+
+    public static void setTextPadding(int value) {
+        mTextPadding = value;
+    }
+
     private final Handler mHandler = new Handler();
 
     public void select() {
@@ -278,7 +286,7 @@
             canvas.drawRect(textRect, mPaint);
             mPaint.setARGB(255, 200, 200, 200);
             canvas.drawText(getImagePreset().name(), mTextPadding,
-                    10 + mTextPadding, mPaint);
+                    1.5f * mTextPadding, mPaint);
         }
 
         if (showControls()) {
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
index a358e0c..a5d99a0 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
@@ -27,12 +27,20 @@
     private ImageSmallFilter mPreviousImageSmallFilter = null;
 
     // TODO: move this to xml.
-    protected final int mMargin = 12;
-    protected final int mTextMargin = 8;
+    protected static int mMargin = 12;
+    protected static int mTextMargin = 8;
     protected final int mBackgroundColor = Color.argb(255, 30, 32, 40);
     protected final int mSelectedBackgroundColor = Color.WHITE;
     protected final int mTextColor = Color.WHITE;
 
+    public static void setMargin(int value) {
+        mMargin = value;
+    }
+
+    public static void setTextMargin(int value) {
+        mTextMargin = value;
+    }
+
     public ImageSmallFilter(Context context, AttributeSet attrs) {
         super(context, attrs);
         setOnClickListener(this);
diff --git a/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java b/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java
index 7f0b043..51ed7fb 100644
--- a/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java
+++ b/src/com/android/gallery3d/filtershow/ui/ImageButtonTitle.java
@@ -1,16 +1,15 @@
 
 package com.android.gallery3d.filtershow.ui;
 
-import com.android.gallery3d.R;
-
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.widget.ImageButton;
 
+import com.android.gallery3d.R;
+
 public class ImageButtonTitle extends ImageButton {
     private static final String LOGTAG = "ImageButtonTitle";
     private String mText = null;
@@ -18,6 +17,14 @@
     private static int mTextPadding = 20;
     private static Paint gPaint = new Paint();
 
+    public static void setTextSize(int value) {
+        mTextSize = value;
+    }
+
+    public static void setTextPadding(int value) {
+        mTextPadding = value;
+    }
+
     public ImageButtonTitle(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = getContext().obtainStyledAttributes(
@@ -26,6 +33,7 @@
         mText = a.getString(R.styleable.ImageButtonTitle_android_text);
     }
 
+    @Override
     public void onDraw(Canvas canvas) {
         super.onDraw(canvas);
         if (mText != null) {