summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/filtershow/imageshow/MasterImage.java')
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/MasterImage.java104
1 files changed, 81 insertions, 23 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index 5e9ec7a7a..3172c79dc 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -19,23 +19,21 @@ package com.android.gallery3d.filtershow.imageshow;
import android.graphics.Bitmap;
import android.graphics.RectF;
-import com.android.gallery3d.app.Log;
import com.android.gallery3d.filtershow.FilterShowActivity;
import com.android.gallery3d.filtershow.HistoryAdapter;
import com.android.gallery3d.filtershow.ImageStateAdapter;
-import com.android.gallery3d.filtershow.cache.TripleBufferBitmap;
-import com.android.gallery3d.filtershow.cache.FilteringPipeline;
-import com.android.gallery3d.filtershow.cache.ImageLoader;
+import com.android.gallery3d.filtershow.cache.*;
+import com.android.gallery3d.filtershow.filters.FilterRepresentation;
import com.android.gallery3d.filtershow.filters.ImageFilter;
import com.android.gallery3d.filtershow.presets.ImagePreset;
import java.util.Vector;
-public class MasterImage {
+public class MasterImage implements RenderingRequestCaller {
private static final String LOGTAG = "MasterImage";
- private static MasterImage sMasterImage = new MasterImage();
+ private static MasterImage sMasterImage = null;
private ImageFilter mCurrentFilter = null;
private ImagePreset mPreset = null;
@@ -43,8 +41,9 @@ public class MasterImage {
private ImagePreset mFiltersOnlyPreset = null;
private TripleBufferBitmap mFilteredPreview = new TripleBufferBitmap();
- private TripleBufferBitmap mGeometryOnlyPreview = new TripleBufferBitmap();
- private TripleBufferBitmap mFiltersOnlyPreview = new TripleBufferBitmap();
+
+ private Bitmap mGeometryOnlyBitmap = null;
+ private Bitmap mFiltersOnlyBitmap = null;
private ImageLoader mLoader = null;
private HistoryAdapter mHistory = null;
@@ -53,14 +52,25 @@ public class MasterImage {
private FilterShowActivity mActivity = null;
private Vector<ImageShow> mObservers = new Vector<ImageShow>();
+ private FilterRepresentation mCurrentFilterRepresentation;
+ private Vector<GeometryListener> mGeometryListeners = new Vector<GeometryListener>();
+
+ private GeometryMetadata mPreviousGeometry = null;
- private MasterImage() { }
+ private MasterImage() {
+ }
public static MasterImage getImage() {
+ if (sMasterImage == null) {
+ sMasterImage = new MasterImage();
+ }
return sMasterImage;
}
public void addObserver(ImageShow observer) {
+ if (mObservers.contains(observer)) {
+ return;
+ }
mObservers.add(observer);
}
@@ -68,6 +78,10 @@ public class MasterImage {
mActivity = activity;
}
+ public ImageLoader getLoader() {
+ return mLoader;
+ }
+
public synchronized ImagePreset getPreset() {
return mPreset;
}
@@ -89,6 +103,11 @@ public class MasterImage {
mHistory.addHistoryItem(mPreset);
}
updatePresets(true);
+ GeometryMetadata geo = mPreset.mGeoData;
+ if (!geo.equals(mPreviousGeometry)) {
+ notifyGeometryChange();
+ }
+ mPreviousGeometry = new GeometryMetadata(geo);
}
private void setGeometry() {
@@ -113,6 +132,7 @@ public class MasterImage {
// We need a copy from the history
mHistory.setCurrentPreset(position);
}
+
public HistoryAdapter getHistory() {
return mHistory;
}
@@ -133,6 +153,10 @@ public class MasterImage {
mLoader = loader;
}
+ public ImageLoader getImageLoader() {
+ return mLoader;
+ }
+
public void setCurrentFilter(ImageFilter filter) {
mCurrentFilter = filter;
}
@@ -152,24 +176,16 @@ public class MasterImage {
return mFilteredPreview;
}
- public TripleBufferBitmap getGeometryOnlyBuffer() {
- return mGeometryOnlyPreview;
- }
-
- public TripleBufferBitmap getFiltersOnlyBuffer() {
- return mFiltersOnlyPreview;
- }
-
public Bitmap getFilteredImage() {
return mFilteredPreview.getConsumer();
}
public Bitmap getFiltersOnlyImage() {
- return mFiltersOnlyPreview.getConsumer();
+ return mFiltersOnlyBitmap;
}
public Bitmap getGeometryOnlyImage() {
- return mGeometryOnlyPreview.getConsumer();
+ return mGeometryOnlyBitmap;
}
public void notifyObservers() {
@@ -185,6 +201,8 @@ public class MasterImage {
if (mGeometryOnlyPreset == null
|| !newPreset.same(mGeometryOnlyPreset)) {
mGeometryOnlyPreset = newPreset;
+ RenderingRequest.post(mLoader.getOriginalBitmapLarge(),
+ mGeometryOnlyPreset, RenderingRequest.GEOMETRY_RENDERING, this);
}
}
if (force || mFiltersOnlyPreset == null) {
@@ -193,16 +211,56 @@ public class MasterImage {
if (mFiltersOnlyPreset == null
|| !newPreset.same(mFiltersOnlyPreset)) {
mFiltersOnlyPreset = newPreset;
+ RenderingRequest.post(mLoader.getOriginalBitmapLarge(),
+ mFiltersOnlyPreset, RenderingRequest.FILTERS_RENDERING, this);
}
}
+ invalidatePreview();
mActivity.enableSave(hasModifications());
- updateBuffers();
}
- public void updateBuffers() {
+ public FilterRepresentation getCurrentFilterRepresentation() {
+ return mCurrentFilterRepresentation;
+ }
+
+ public void setCurrentFilterRepresentation(FilterRepresentation currentFilterRepresentation) {
+ mCurrentFilterRepresentation = currentFilterRepresentation;
+ }
+
+ public void invalidateFiltersOnly() {
+ mFiltersOnlyPreset = null;
+ updatePresets(false);
+ }
+
+ public void invalidatePreview() {
+ mFilteredPreview.invalidate();
FilteringPipeline.getPipeline().updatePreviewBuffer();
- FilteringPipeline.getPipeline().updateGeometryOnlyPreviewBuffer();
- FilteringPipeline.getPipeline().updateFiltersOnlyPreviewBuffer();
}
+ @Override
+ public void available(RenderingRequest request) {
+ if (request.getBitmap() == null) {
+ return;
+ }
+ if (request.getType() == RenderingRequest.GEOMETRY_RENDERING) {
+ mGeometryOnlyBitmap = request.getBitmap();
+ }
+ if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
+ mFiltersOnlyBitmap = request.getBitmap();
+ }
+ }
+
+ public static void reset() {
+ sMasterImage = null;
+ }
+
+ public void addGeometryListener(GeometryListener listener) {
+ mGeometryListeners.add(listener);
+ }
+
+ public void notifyGeometryChange() {
+ for (GeometryListener listener : mGeometryListeners) {
+ listener.geometryChanged();
+ }
+ }
}