OSDN Git Service

Update thumbnails when the geometry changes
authornicolasroard <nicolasroard@google.com>
Tue, 12 Feb 2013 18:26:29 +0000 (10:26 -0800)
committernicolasroard <nicolasroard@google.com>
Tue, 12 Feb 2013 18:26:29 +0000 (10:26 -0800)
Change-Id: I44d70839efb7e00edfb1e6c1f73296beab09783c

src/com/android/gallery3d/filtershow/imageshow/GeometryListener.java [new file with mode: 0644]
src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
src/com/android/gallery3d/filtershow/ui/FilterIconButton.java

diff --git a/src/com/android/gallery3d/filtershow/imageshow/GeometryListener.java b/src/com/android/gallery3d/filtershow/imageshow/GeometryListener.java
new file mode 100644 (file)
index 0000000..549c2e7
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * 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.imageshow;
+
+public interface GeometryListener {
+    public void geometryChanged();
+}
index 1e830b0..3172c79 100644 (file)
@@ -19,7 +19,6 @@ 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;
@@ -54,6 +53,9 @@ public class MasterImage implements RenderingRequestCaller {
 
     private Vector<ImageShow> mObservers = new Vector<ImageShow>();
     private FilterRepresentation mCurrentFilterRepresentation;
+    private Vector<GeometryListener> mGeometryListeners = new Vector<GeometryListener>();
+
+    private GeometryMetadata mPreviousGeometry = null;
 
     private MasterImage() {
     }
@@ -101,6 +103,11 @@ public class MasterImage implements RenderingRequestCaller {
             mHistory.addHistoryItem(mPreset);
         }
         updatePresets(true);
+        GeometryMetadata geo = mPreset.mGeoData;
+        if (!geo.equals(mPreviousGeometry)) {
+            notifyGeometryChange();
+        }
+        mPreviousGeometry = new GeometryMetadata(geo);
     }
 
     private void setGeometry() {
@@ -246,4 +253,14 @@ public class MasterImage implements RenderingRequestCaller {
     public static void reset() {
         sMasterImage = null;
     }
+
+    public void addGeometryListener(GeometryListener listener) {
+        mGeometryListeners.add(listener);
+    }
+
+    public void notifyGeometryChange() {
+        for (GeometryListener listener : mGeometryListeners) {
+            listener.geometryChanged();
+        }
+    }
 }
index 19807e6..baf840f 100644 (file)
@@ -34,10 +34,13 @@ import com.android.gallery3d.filtershow.cache.RenderingRequestCaller;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.filters.FiltersManager;
 import com.android.gallery3d.filtershow.filters.ImageFilter;
+import com.android.gallery3d.filtershow.imageshow.GeometryListener;
+import com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
 import com.android.gallery3d.filtershow.imageshow.MasterImage;
 import com.android.gallery3d.filtershow.presets.ImagePreset;
 
-public class FilterIconButton extends IconButton implements View.OnClickListener, RenderingRequestCaller {
+public class FilterIconButton extends IconButton implements View.OnClickListener,
+        RenderingRequestCaller, GeometryListener {
     private static final String LOGTAG = "FilterIconButton";
     private Bitmap mOverlayBitmap = null;
     private PanelController mController = null;
@@ -65,6 +68,7 @@ public class FilterIconButton extends IconButton implements View.OnClickListener
         setText(text);
         mParentContainer = parent;
         super.setOnClickListener(this);
+        MasterImage.getImage().addGeometryListener(this);
         invalidate();
     }
 
@@ -73,6 +77,8 @@ public class FilterIconButton extends IconButton implements View.OnClickListener
         if (mIconBitmap == null && mPreset == null) {
             ImageLoader loader = MasterImage.getImage().getLoader();
             if (loader != null) {
+                ImagePreset geoPreset = new ImagePreset(MasterImage.getImage().getGeometryPreset());
+                image = geoPreset.applyGeometry(image);
                 dst = super.drawImage(dst, image, destination);
                 ImagePreset mPreset = new ImagePreset();
                 mPreset.addFilter(mFilterRepresentation);
@@ -127,4 +133,12 @@ public class FilterIconButton extends IconButton implements View.OnClickListener
         invalidate();
         stale_icon = true;
     }
+
+    @Override
+    public void geometryChanged() {
+        stale_icon = true;
+        mIconBitmap = null;
+        mPreset = null;
+        invalidate();
+    }
 }