summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-02-07 16:59:29 -0800
committernicolasroard <nicolasroard@google.com>2013-02-07 17:01:56 -0800
commit99256e380cb0369df7f407192f279d3e39d5d5d1 (patch)
tree516d9220dc5295b747b485ff100dc695aff58e84
parent96bba43f8ea135208d9c2a33ae309326a7abfd69 (diff)
downloadandroid_packages_apps_Snap-99256e380cb0369df7f407192f279d3e39d5d5d1.zip
android_packages_apps_Snap-99256e380cb0369df7f407192f279d3e39d5d5d1.tar.gz
android_packages_apps_Snap-99256e380cb0369df7f407192f279d3e39d5d5d1.tar.bz2
Fix Fx filters
Change-Id: Id501ec3a7b4880e697e2b90c056a57fb3ec456ea
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java29
-rw-r--r--src/com/android/gallery3d/filtershow/PanelController.java6
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterBasicRepresentation.java2
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterFxRepresentation.java96
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java1
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java23
-rw-r--r--src/com/android/gallery3d/filtershow/ui/FilterIconButton.java28
-rw-r--r--src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java1
8 files changed, 166 insertions, 20 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index db8055b..d3fb7d0 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -704,6 +704,19 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mSaveButton.setEnabled(enable);
}
+ public FilterIconButton setupFilterRepresentationButton(FilterRepresentation representation, LinearLayout panel, View button) {
+ LayoutInflater inflater =
+ (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton,
+ panel, false);
+ String text = representation.getName();
+ icon.setup(text, this, panel);
+ icon.setFilterRepresentation(representation);
+ mPanelController.addComponent(button, icon);
+ panel.addView(icon);
+ return icon;
+ }
+
public FilterIconButton setupFilterButton(ImageFilter filter, LinearLayout panel, View button) {
LayoutInflater inflater =
(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -729,7 +742,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
// TODO: use listview
// TODO: load the filters straight from the filesystem
- ImageFilterFx[] fxArray = new ImageFilterFx[18];
+ FilterFxRepresentation[] fxArray = new FilterFxRepresentation[18];
int p = 0;
int[] drawid = {
@@ -764,15 +777,17 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
for (int i = 0; i < drawid.length; i++) {
Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o);
- fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i]), fxNameid[i]);
+ FilterFxRepresentation fx = new FilterFxRepresentation(getString(fxNameid[i]), drawid[i], fxNameid[i]);
+ fx.setFxBitmap(b);
+ fxArray[p++] = fx;
}
- ImageFilterFx nullFilter = new ImageFilterFx(null, getString(R.string.none), R.string.none);
- mNullFxFilter = setupFilterButton(nullFilter, listFilters, mFxButton);
+ FilterFxRepresentation nullFx = new FilterFxRepresentation(getString(R.string.none), 0, R.string.none);
+ mNullFxFilter = setupFilterRepresentationButton(nullFx, listFilters, mFxButton);
mNullFxFilter.setSelected(true);
for (int i = 0; i < p; i++) {
- setupFilterButton(fxArray[i], listFilters, mFxButton);
+ setupFilterRepresentationButton(fxArray[i], listFilters, mFxButton);
}
// Default preset (original)
@@ -991,6 +1006,10 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
if (representation == null) {
copy.addFilter(filterRepresentation);
} else {
+ if (filterRepresentation instanceof FilterFxRepresentation) {
+ representation.useParametersFrom(filterRepresentation);
+ copy.setHistoryName(filterRepresentation.getName());
+ }
filterRepresentation = representation;
}
mMasterImage.setPreset(copy, true);
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java
index 3a24d00..0f14b9b 100644
--- a/src/com/android/gallery3d/filtershow/PanelController.java
+++ b/src/com/android/gallery3d/filtershow/PanelController.java
@@ -485,8 +485,10 @@ public class PanelController implements OnClickListener {
mCurrentImage = showImageView(filter.getEditingViewId());
}
mCurrentImage.setShowControls(filter.showEditingControls());
- String ename = mCurrentImage.getContext().getString(filter.getTextId());
- mUtilityPanel.setEffectName(ename);
+ if (filter.getTextId() != 0) {
+ String ename = mCurrentImage.getContext().getString(filter.getTextId());
+ mUtilityPanel.setEffectName(ename);
+ }
mUtilityPanel.setShowParameter(filter.showParameterValue());
mCurrentImage.select();
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterBasicRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterBasicRepresentation.java
index 9e9c57a..f6f308d 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterBasicRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterBasicRepresentation.java
@@ -60,7 +60,7 @@ public class FilterBasicRepresentation extends FilterRepresentation {
@Override
public boolean equals(FilterRepresentation representation) {
- if (super.equals(representation)) {
+ if (!super.equals(representation)) {
return false;
}
if (representation instanceof FilterBasicRepresentation) {
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterFxRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterFxRepresentation.java
new file mode 100644
index 0000000..b778c93
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/filters/FilterFxRepresentation.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2013 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.filters;
+
+import android.graphics.Bitmap;
+import com.android.gallery3d.app.Log;
+
+public class FilterFxRepresentation extends FilterRepresentation {
+ private Bitmap mFxBitmap = null;
+ private int mBitmapResource = 0;
+ private int mNameResource = 0;
+
+ public FilterFxRepresentation(String name, int bitmapResource, int nameResource) {
+ super(name);
+ mBitmapResource = bitmapResource;
+ mNameResource = nameResource;
+ setFilterClass(ImageFilterFx.class);
+ }
+
+ public String toString() {
+ return "FilterFx: " + getName();
+ }
+
+ @Override
+ public FilterRepresentation clone() throws CloneNotSupportedException {
+ FilterFxRepresentation representation = (FilterFxRepresentation) super.clone();
+ representation.setName(getName());
+ representation.setBitmapResource(getBitmapResource());
+ representation.setNameResource(getNameResource());
+ representation.setFxBitmap(getFxBitmap());
+ return representation;
+ }
+
+ public void useParametersFrom(FilterRepresentation a) {
+ if (a instanceof FilterFxRepresentation) {
+ FilterFxRepresentation representation = (FilterFxRepresentation) a;
+ setName(representation.getName());
+ setBitmapResource(representation.getBitmapResource());
+ setNameResource(representation.getNameResource());
+ setFxBitmap(representation.getFxBitmap());
+ }
+ }
+
+ @Override
+ public boolean equals(FilterRepresentation representation) {
+ if (!super.equals(representation)) {
+ return false;
+ }
+ if (representation instanceof FilterFxRepresentation) {
+ FilterFxRepresentation fx = (FilterFxRepresentation) representation;
+ if (fx.mNameResource == mNameResource
+ && fx.mBitmapResource == mBitmapResource) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Bitmap getFxBitmap() {
+ return mFxBitmap;
+ }
+
+ public void setFxBitmap(Bitmap fxBitmap) {
+ mFxBitmap = fxBitmap;
+ }
+
+ public int getNameResource() {
+ return mNameResource;
+ }
+
+ public void setNameResource(int nameResource) {
+ mNameResource = nameResource;
+ }
+
+ public int getBitmapResource() {
+ return mBitmapResource;
+ }
+
+ public void setBitmapResource(int bitmapResource) {
+ mBitmapResource = bitmapResource;
+ }
+}
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java
index afa6ad1..1415f14 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java
@@ -40,6 +40,7 @@ public class FilterRepresentation implements Cloneable {
FilterRepresentation representation = (FilterRepresentation) super.clone();
representation.setName(getName());
representation.setPriority(getPriority());
+ representation.setFilterClass(getFilterClass());
Log.v(LOGTAG, "cloning from <" + this + "> to <" + representation + ">");
return representation;
}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java
index f5dff5e..8a50ca9 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java
@@ -22,6 +22,11 @@ public class ImageFilterFx extends ImageFilter {
private static final String TAG = "ImageFilterFx";
Bitmap fxBitmap;
int mNameResource = 0;
+ private FilterFxRepresentation mParameters = null;
+
+ public ImageFilterFx() {
+
+ }
public ImageFilterFx(Bitmap fxBitmap, String name, int nameResource) {
setFilterType(TYPE_FX);
@@ -30,6 +35,15 @@ public class ImageFilterFx extends ImageFilter {
mNameResource = nameResource;
}
+ public void useRepresentation(FilterRepresentation representation) {
+ FilterFxRepresentation parameters = (FilterFxRepresentation) representation;
+ mParameters = parameters;
+ }
+
+ public FilterFxRepresentation getParameters() {
+ return mParameters;
+ }
+
@Override
public int getTextId() {
return mNameResource;
@@ -68,16 +82,17 @@ public class ImageFilterFx extends ImageFilter {
@Override
public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
- if (fxBitmap==null)
+ if (getParameters() == null || getParameters().getFxBitmap() ==null) {
return bitmap;
+ }
int w = bitmap.getWidth();
int h = bitmap.getHeight();
- int fxw = fxBitmap.getWidth();
- int fxh = fxBitmap.getHeight();
+ int fxw = getParameters().getFxBitmap().getWidth();
+ int fxh = getParameters().getFxBitmap().getHeight();
- nativeApplyFilter(bitmap, w, h, fxBitmap, fxw, fxh);
+ nativeApplyFilter(bitmap, w, h, getParameters().getFxBitmap(), fxw, fxh);
return bitmap;
}
}
diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
index 8dc5153..b78ab03 100644
--- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
+++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
@@ -25,7 +25,9 @@ import android.view.View;
import android.widget.LinearLayout;
import com.android.gallery3d.filtershow.FilterShowActivity;
+import com.android.gallery3d.filtershow.cache.FilteringPipeline;
import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.filters.FiltersManager;
import com.android.gallery3d.filtershow.filters.ImageFilter;
public class FilterIconButton extends IconButton implements View.OnClickListener {
@@ -48,26 +50,36 @@ public class FilterIconButton extends IconButton implements View.OnClickListener
super(context, attrs, defStyle);
}
- public void setup(String text, ImageFilter filter, FilterShowActivity controller,
- LinearLayout parent) {
- mImageFilter = filter;
+ public void setup(String text, FilterShowActivity controller, LinearLayout parent) {
mController = controller;
setText(text);
+ mParentContainer = parent;
+ super.setOnClickListener(this);
+ invalidate();
+ }
+ public void setup(String text, ImageFilter filter, FilterShowActivity controller,
+ LinearLayout parent) {
+ setup(text, controller, parent);
+ mImageFilter = filter;
if (mImageFilter.getOverlayBitmaps() != 0) {
mOverlayBitmap = BitmapFactory.decodeResource(getResources(),
mImageFilter.getOverlayBitmaps());
}
-
- mParentContainer = parent;
- super.setOnClickListener(this);
- invalidate();
}
@Override
protected Bitmap drawImage(Bitmap dst, Bitmap image, Rect destination) {
dst = super.drawImage(dst, image, destination);
- dst = mImageFilter.iconApply(dst, 1.0f, false);
+ if (mImageFilter == null && mFilterRepresentation != null) {
+ mImageFilter = FiltersManager.getManager().getFilterForRepresentation(mFilterRepresentation);
+ }
+ if (mFilterRepresentation != null && mImageFilter != null) {
+ mImageFilter.useRepresentation(mFilterRepresentation);
+ }
+ if (mImageFilter != null) {
+ dst = mImageFilter.iconApply(dst, 1.0f, false);
+ }
if (mOverlayBitmap != null) {
dst = super.drawImage(dst, mOverlayBitmap, destination);
}
diff --git a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
index 3b3326c..f7e0406 100644
--- a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
+++ b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
@@ -30,6 +30,7 @@ public class FiltersManager {
private FiltersManager() {
Vector<ImageFilter> filters = new Vector<ImageFilter>();
FiltersManager.addFilters(filters);
+ filters.add(new ImageFilterFx());
for (ImageFilter filter : filters) {
mFilters.put(filter.getClass(), filter);
}