OSDN Git Service

Fix flickering in geometry panel
authornicolasroard <nicolasroard@google.com>
Tue, 23 Oct 2012 19:18:54 +0000 (12:18 -0700)
committernicolasroard <nicolasroard@google.com>
Tue, 23 Oct 2012 19:18:54 +0000 (12:18 -0700)
bug:7344214
Change-Id: I34c980061c2d51e7b97ec95fc77e3331cffdf8d5

src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
src/com/android/gallery3d/filtershow/presets/ImagePreset.java

index 5e007b1..72c594c 100644 (file)
@@ -386,12 +386,7 @@ public class ImageShow extends View implements OnGestureListener,
         if (mImageLoader == null) {
             return;
         }
-        if (getImagePreset() != null) {
-            mImageLoader.resetImageForPreset(getImagePreset(), caller);
-        }
-        mImageGeometryOnlyPreset = null;
-        mImageFiltersOnlyPreset = null;
-        invalidate();
+        updateImagePresets(true);
     }
 
     public void updateImagePresets(boolean force) {
@@ -403,14 +398,22 @@ public class ImageShow extends View implements OnGestureListener,
             mImageLoader.resetImageForPreset(getImagePreset(), this);
         }
         if (force || mImageGeometryOnlyPreset == null) {
-            mImageGeometryOnlyPreset = new ImagePreset(preset);
-            mImageGeometryOnlyPreset.setDoApplyFilters(false);
-            mGeometryOnlyImage = null;
-        }
+            ImagePreset newPreset = new ImagePreset(preset);
+            newPreset.setDoApplyFilters(false);
+            if (mImageGeometryOnlyPreset == null
+                    || !newPreset.same(mImageGeometryOnlyPreset)) {
+                mImageGeometryOnlyPreset = newPreset;
+                mGeometryOnlyImage = null;
+            }
+         }
         if (force || mImageFiltersOnlyPreset == null) {
-            mImageFiltersOnlyPreset = new ImagePreset(preset);
-            mImageFiltersOnlyPreset.setDoApplyGeometry(false);
-            mFiltersOnlyImage = null;
+            ImagePreset newPreset = new ImagePreset(preset);
+            newPreset.setDoApplyGeometry(false);
+            if (mImageFiltersOnlyPreset == null
+                    || !newPreset.same(mImageFiltersOnlyPreset)) {
+                mImageFiltersOnlyPreset = newPreset;
+                mFiltersOnlyImage = null;
+            }
         }
     }
 
@@ -428,12 +431,18 @@ public class ImageShow extends View implements OnGestureListener,
 
             updateImagePresets(false);
             if (mImageGeometryOnlyPreset != null) {
-                mGeometryOnlyImage = mImageLoader.getImageForPreset(this, mImageGeometryOnlyPreset,
+                bitmap = mImageLoader.getImageForPreset(this, mImageGeometryOnlyPreset,
                         showHires());
+                if (bitmap != null) {
+                    mGeometryOnlyImage = bitmap;
+                }
             }
             if (mImageFiltersOnlyPreset != null) {
-                mFiltersOnlyImage = mImageLoader.getImageForPreset(this, mImageFiltersOnlyPreset,
+                bitmap = mImageLoader.getImageForPreset(this, mImageFiltersOnlyPreset,
                         showHires());
+                if (bitmap != null) {
+                    mFiltersOnlyImage = bitmap;
+                }
             }
         }
 
index 69875d9..87e1934 100644 (file)
@@ -169,7 +169,11 @@ public class ImagePreset {
             return false;
         }
 
-        if (!mGeoData.equals(preset.mGeoData)) {
+        if (mDoApplyGeometry != preset.mDoApplyGeometry) {
+            return false;
+        }
+
+        if (mDoApplyGeometry && !mGeoData.equals(preset.mGeoData)) {
             return false;
         }
 
@@ -181,13 +185,21 @@ public class ImagePreset {
             return false;
         }
 
-        for (int i = 0; i < preset.mFilters.size(); i++) {
-            ImageFilter a = preset.mFilters.elementAt(i);
-            ImageFilter b = mFilters.elementAt(i);
-            if (!a.same(b)) {
+        if (mDoApplyFilters != preset.mDoApplyFilters) {
+            if (mFilters.size() > 0 || preset.mFilters.size() > 0) {
                 return false;
             }
         }
+
+        if (mDoApplyFilters && preset.mDoApplyFilters) {
+            for (int i = 0; i < preset.mFilters.size(); i++) {
+                ImageFilter a = preset.mFilters.elementAt(i);
+                ImageFilter b = mFilters.elementAt(i);
+                if (!a.same(b)) {
+                    return false;
+                }
+            }
+        }
         return true;
     }