summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2012-10-24 17:47:12 -0700
committernicolasroard <nicolasroard@google.com>2012-10-24 17:50:01 -0700
commite7647cf87c7303c4f9b7a2dd57d6c70563a63655 (patch)
tree9c8d95dfed33d666ec9827cc92b229aed75623ae /src
parent028c39fdda797ea6cd5a507a1164c656f3c73b97 (diff)
downloadandroid_packages_apps_Snap-e7647cf87c7303c4f9b7a2dd57d6c70563a63655.tar.gz
android_packages_apps_Snap-e7647cf87c7303c4f9b7a2dd57d6c70563a63655.tar.bz2
android_packages_apps_Snap-e7647cf87c7303c4f9b7a2dd57d6c70563a63655.zip
Add rotation to tinyplanet view
bug:7389189 Change-Id: Ib072879190bcd96c552581bf9240876b10ca362d
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java8
-rw-r--r--src/com/android/gallery3d/filtershow/PanelController.java2
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java13
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java85
4 files changed, 106 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index a873bbe6b..0a6bb2dd3 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -77,6 +77,7 @@ import com.android.gallery3d.filtershow.imageshow.ImageShow;
import com.android.gallery3d.filtershow.imageshow.ImageSmallBorder;
import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter;
import com.android.gallery3d.filtershow.imageshow.ImageStraighten;
+import com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet;
import com.android.gallery3d.filtershow.imageshow.ImageWithIcon;
import com.android.gallery3d.filtershow.imageshow.ImageZoom;
import com.android.gallery3d.filtershow.presets.ImagePreset;
@@ -109,6 +110,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
private ImageCrop mImageCrop = null;
private ImageRotate mImageRotate = null;
private ImageFlip mImageFlip = null;
+ private ImageTinyPlanet mImageTinyPlanet = null;
private View mListFx = null;
private View mListBorders = null;
@@ -194,6 +196,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mImageCrop = (ImageCrop) findViewById(R.id.imageCrop);
mImageRotate = (ImageRotate) findViewById(R.id.imageRotate);
mImageFlip = (ImageFlip) findViewById(R.id.imageFlip);
+ mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet);
ImageCrop.setTouchTolerance((int) getPixelsFromDip(25));
mImageViews.add(mImageShow);
@@ -204,6 +207,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mImageViews.add(mImageCrop);
mImageViews.add(mImageRotate);
mImageViews.add(mImageFlip);
+ mImageViews.add(mImageTinyPlanet);
mListFx = findViewById(R.id.fxList);
mListBorders = findViewById(R.id.bordersList);
@@ -236,6 +240,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mImageRotate.setMaster(mImageShow);
mImageFlip.setImageLoader(mImageLoader);
mImageFlip.setMaster(mImageShow);
+ mImageTinyPlanet.setImageLoader(mImageLoader);
+ mImageTinyPlanet.setMaster(mImageShow);
mPanelController.setActivity(this);
@@ -247,6 +253,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mPanelController.addImageView(findViewById(R.id.imageRotate));
mPanelController.addImageView(findViewById(R.id.imageFlip));
mPanelController.addImageView(findViewById(R.id.imageZoom));
+ mPanelController.addImageView(findViewById(R.id.imageTinyPlanet));
mPanelController.addPanel(mFxButton, mListFx, 0);
mPanelController.addPanel(mBorderButton, mListBorders, 1);
@@ -359,6 +366,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mImageShow.setSeekBar(seekBar);
mImageZoom.setSeekBar(seekBar);
+ mImageTinyPlanet.setSeekBar(seekBar);
mPanelController.setRowPanel(findViewById(R.id.secondRowPanel));
mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList),
findViewById(R.id.applyEffect), findViewById(R.id.aspect),
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java
index 9448b5638..4ed2d0d3c 100644
--- a/src/com/android/gallery3d/filtershow/PanelController.java
+++ b/src/com/android/gallery3d/filtershow/PanelController.java
@@ -575,7 +575,7 @@ public class PanelController implements OnClickListener {
mUtilityPanel.hideCurvesButtons();
switch (view.getId()) {
case R.id.tinyplanetButton: {
- mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mCurrentImage = showImageView(R.id.imageTinyPlanet).setShowControls(true);
String ename = mCurrentImage.getContext().getString(R.string.tinyplanet);
mUtilityPanel.setEffectName(ename);
ensureFilter(ename);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
index 003d036e0..d5efe46f1 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
@@ -28,6 +28,8 @@ import com.android.gallery3d.filtershow.presets.ImagePreset;
* An image filter which creates a tiny planet projection.
*/
public class ImageFilterTinyPlanet extends ImageFilter {
+ private float mAngle = 0;
+
private static final String TAG = ImageFilterTinyPlanet.class.getSimpleName();
public static final String GOOGLE_PANO_NAMESPACE = "http://ns.google.com/photos/1.0/panorama/";
@@ -53,6 +55,15 @@ public class ImageFilterTinyPlanet extends ImageFilter {
mDefaultParameter = 20;
mPreviewParameter = 20;
mParameter = 20;
+ mAngle = 0;
+ }
+
+ public void setAngle(float angle) {
+ mAngle = angle;
+ }
+
+ public float getAngle() {
+ return mAngle;
}
native protected void nativeApplyFilter(
@@ -73,7 +84,7 @@ public class ImageFilterTinyPlanet extends ImageFilter {
Bitmap mBitmapOut = Bitmap.createBitmap(
outputSize, outputSize, Bitmap.Config.ARGB_8888);
nativeApplyFilter(bitmapIn, bitmapIn.getWidth(), bitmapIn.getHeight(), mBitmapOut,
- outputSize, mParameter / 100f, 0f);
+ outputSize, mParameter / 100f, mAngle);
return mBitmapOut;
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java b/src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java
new file mode 100644
index 000000000..31bfe432c
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.filtershow.imageshow;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet;
+
+public class ImageTinyPlanet extends ImageSlave {
+
+ private float mTouchCenterX = 0;
+ private float mTouchCenterY = 0;
+ private float mCurrentX = 0;
+ private float mCurrentY = 0;
+ private float mCenterX = 0;
+ private float mCenterY = 0;
+ private float mStartAngle = 0;
+
+ public ImageTinyPlanet(Context context) {
+ super(context);
+ }
+
+ public ImageTinyPlanet(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ protected static float angleFor(float dx, float dy) {
+ return (float) (Math.atan2(dx, dy) * 180 / Math.PI);
+ }
+
+ protected float getCurrentTouchAngle() {
+ if (mCurrentX == mTouchCenterX && mCurrentY == mTouchCenterY) {
+ return 0;
+ }
+ float dX1 = mTouchCenterX - mCenterX;
+ float dY1 = mTouchCenterY - mCenterY;
+ float dX2 = mCurrentX - mCenterX;
+ float dY2 = mCurrentY - mCenterY;
+
+ float angleA = angleFor(dX1, dY1);
+ float angleB = angleFor(dX2, dY2);
+ return (float) (((angleB - angleA) % 360) * Math.PI / 180);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ ImageFilterTinyPlanet filter = (ImageFilterTinyPlanet) getCurrentFilter();
+ float x = event.getX();
+ float y = event.getY();
+ mCurrentX = x;
+ mCurrentY = y;
+ mCenterX = getWidth() / 2;
+ mCenterY = getHeight() / 2;
+ switch (event.getActionMasked()) {
+ case (MotionEvent.ACTION_DOWN):
+ mTouchCenterX = x;
+ mTouchCenterY = y;
+ mStartAngle = filter.getAngle();
+ break;
+ case (MotionEvent.ACTION_UP):
+ case (MotionEvent.ACTION_MOVE):
+ filter.setAngle(mStartAngle + getCurrentTouchAngle());
+ break;
+ }
+ resetImageCaches(this);
+ invalidate();
+ return true;
+ }
+}