private WeakReference<ProgressDialog> mSavingProgressDialog;
private static final int SEEK_BAR_MAX = 600;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
filter.setSelected(true);
mCurrentImageSmallFilter = filter;
- filter.setImageFilter(new ImageFilterFx(null,getString(R.string.ffx_original)));
+ filter.setImageFilter(new ImageFilterFx(null, getString(R.string.ffx_original)));
filter.setController(this);
filter.setImageLoader(mImageLoader);
@Override
public void onBackPressed() {
if (mPanelController.onBackPressed()) {
- finish();
+ saveImage();
}
}
}
public void saveImage() {
- showSavingProgress();
- mImageShow.saveImage(this, null);
+ if (mImageShow.hasModifications()) {
+ showSavingProgress();
+ mImageShow.saveImage(this, null);
+ } else {
+ finish();
+ }
}
static {
return filter;
}
+ public boolean isNil() {
+ if (mParameter == mDefaultParameter) {
+ return true;
+ }
+ return false;
+ }
+
public void setName(String name) {
mName = name;
}
}
@Override
+ public boolean isNil() {
+ if (mNinePatch == null) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
public boolean same(ImageFilter filter) {
boolean isBorderFilter = super.same(filter);
if (!isBorderFilter) {
}
@Override
+ public boolean isNil() {
+ for (int i = 0; i < 4; i++) {
+ if (mSplines[i] != null && !mSplines[i].isOriginal()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
public boolean same(ImageFilter filter) {
boolean isCurveFilter = super.same(filter);
if (!isCurveFilter) {
package com.android.gallery3d.filtershow.filters;
import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-
-import com.android.gallery3d.R;
-
-import java.util.Arrays;
public class ImageFilterFx extends ImageFilter {
private static final String TAG = "ImageFilterFx";
return filter;
}
+ @Override
+ public boolean isNil() {
+ if (fxBitmap != null) {
+ return false;
+ }
+ return true;
+ }
+
native protected void nativeApplyFilter(Bitmap bitmap, int w, int h,Bitmap fxBitmap, int fxw, int fxh);
+ @Override
public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
if (fxBitmap==null)
return bitmap;
}
@Override
+ public boolean isNil() {
+ return false;
+ }
+
+ @Override
public boolean same(ImageFilter filter) {
boolean isBorderFilter = super.same(filter);
if (!isBorderFilter) {
// Applied in order: rotate, crop, scale.
// Do not scale saved image (presumably?).
private static final ImageFilterGeometry mImageFilter = new ImageFilterGeometry();
+ private static final String LOGTAG = "GeometryMetadata";
private float mScaleFactor = 1.0f;
private float mRotation = 0;
private float mStraightenRotation = 0;
set(g);
}
+ public boolean hasModifications() {
+ if (mScaleFactor != 1.0f) {
+ return true;
+ }
+ if (mRotation != 0) {
+ return true;
+ }
+ if (mStraightenRotation != 0) {
+ return true;
+ }
+ if (!mCropBounds.equals(mPhotoBounds)) {
+ return true;
+ }
+ return false;
+ }
+
public Bitmap apply(Bitmap original, float scaleFactor, boolean highQuality) {
+ if (!hasModifications()) {
+ return original;
+ }
mImageFilter.setGeometryMetadata(this);
Bitmap m = mImageFilter.apply(original, scaleFactor, highQuality);
return m;
}
+ public boolean hasModifications() {
+ if (getImagePreset() == null) {
+ return false;
+ }
+ return getImagePreset().hasModifications();
+ }
+
public void resetParameter() {
onNewValue(getCurrentFilter().getDefaultParameter());
if (USE_SLIDER_GESTURE) {
getFilteredImage();
canvas.drawColor(mBackgroundColor);
// TODO: simplify & make faster...
- mPaint.setColor(mInnerBorderColor);
RectF border = new RectF(mMargin, 2*mMargin, getWidth() - mMargin - 1, getWidth());
if (mIsSelected) {
canvas.drawRect(0, mMargin, getWidth(), getWidth() + mMargin, mPaint);
}
- canvas.drawLine(0, 0, getWidth(), 0, mPaint);
+ mPaint.setColor(mInnerBorderColor);
mPaint.setStrokeWidth(mInnerBorderWidth);
Path path = new Path();
path.addRect(border, Path.Direction.CCW);
canvas.save();
canvas.clipRect(mMargin + 1, 2*mMargin, getWidth() - mMargin - 2, getWidth() - 1,
Region.Op.INTERSECT);
- canvas.translate(mMargin, mMargin + 1);
+ canvas.translate(mMargin + 1, 2*mMargin + 1);
canvas.scale(mImageScaleFactor, mImageScaleFactor);
Rect d = new Rect(0, 0, getWidth(), getWidth());
drawImage(canvas, mFilteredImage, d);
public ImagePreset(ImagePreset source, String historyName) {
this(source);
- if (historyName!=null) setHistoryName(historyName);
+ if (historyName != null) {
+ setHistoryName(historyName);
+ }
}
public ImagePreset(ImagePreset source) {
mGeoData.set(source.mGeoData);
}
+ public boolean hasModifications() {
+ if (mImageBorder != null && !mImageBorder.isNil()) {
+ return true;
+ }
+ if (mGeoData.hasModifications()) {
+ return true;
+ }
+ for (int i = 0; i < mFilters.size(); i++) {
+ ImageFilter filter = mFilters.elementAt(i);
+ if (!filter.isNil()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public void setGeometry(GeometryMetadata m) {
mGeoData.set(m);
}
public void add(ImageFilter filter) {
- if (filter.getFilterType() == ImageFilter.TYPE_BORDER){
+ if (filter.getFilterType() == ImageFilter.TYPE_BORDER) {
setHistoryName("Border");
setBorder(filter);
- } else if (filter.getFilterType() == ImageFilter.TYPE_FX){
-
+ } else if (filter.getFilterType() == ImageFilter.TYPE_FX) {
boolean found = false;
for (int i = 0; i < mFilters.size(); i++) {
byte type = mFilters.get(i).getFilterType();
if (found) {
- if (type != ImageFilter.TYPE_VIGNETTE){
+ if (type != ImageFilter.TYPE_VIGNETTE) {
mFilters.remove(i);
continue;
}
}
- if (type==ImageFilter.TYPE_FX){
+ if (type == ImageFilter.TYPE_FX) {
mFilters.remove(i);
mFilters.add(i, filter);
setHistoryName(filter.getName());
found = true;
}
-
}
if (!found) {
mFilters.add(filter);