diff options
author | nicolasroard <nicolasroard@google.com> | 2012-10-24 17:47:12 -0700 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2012-10-24 17:50:01 -0700 |
commit | e7647cf87c7303c4f9b7a2dd57d6c70563a63655 (patch) | |
tree | 9c8d95dfed33d666ec9827cc92b229aed75623ae /src | |
parent | 028c39fdda797ea6cd5a507a1164c656f3c73b97 (diff) | |
download | android_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')
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; + } +} |