From c4816efb49d3e90e37835d9359a6fa8447df97df Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Tue, 12 Feb 2013 10:26:29 -0800 Subject: Update thumbnails when the geometry changes Change-Id: I44d70839efb7e00edfb1e6c1f73296beab09783c --- .../filtershow/imageshow/GeometryListener.java | 21 +++++++++++++++++++++ .../gallery3d/filtershow/imageshow/MasterImage.java | 19 ++++++++++++++++++- .../gallery3d/filtershow/ui/FilterIconButton.java | 16 +++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/com/android/gallery3d/filtershow/imageshow/GeometryListener.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 index 000000000..549c2e7a5 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/imageshow/GeometryListener.java @@ -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(); +} diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java index 1e830b04b..3172c79dc 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java +++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java @@ -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 mObservers = new Vector(); private FilterRepresentation mCurrentFilterRepresentation; + private Vector mGeometryListeners = new Vector(); + + 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(); + } + } } diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java index 19807e6af..baf840f63 100644 --- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java +++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java @@ -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(); + } } -- cgit v1.2.3