diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/ui/FilterIconButton.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/ui/FilterIconButton.java | 89 |
1 files changed, 66 insertions, 23 deletions
diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java index 089b24118..de2e1e5dc 100644 --- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java +++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java @@ -24,15 +24,26 @@ import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; -import com.android.gallery3d.filtershow.FilterShowActivity; -import com.android.gallery3d.filtershow.filters.ImageFilter; +import com.android.gallery3d.filtershow.PanelController; +import com.android.gallery3d.filtershow.cache.ImageLoader; +import com.android.gallery3d.filtershow.cache.RenderingRequest; +import com.android.gallery3d.filtershow.cache.RenderingRequestCaller; +import com.android.gallery3d.filtershow.filters.FilterRepresentation; +import com.android.gallery3d.filtershow.imageshow.GeometryListener; +import com.android.gallery3d.filtershow.imageshow.MasterImage; +import com.android.gallery3d.filtershow.presets.ImagePreset; -public class FilterIconButton extends IconButton implements View.OnClickListener { +public class FilterIconButton extends IconButton implements View.OnClickListener, + RenderingRequestCaller, GeometryListener { + private static final String LOGTAG = "FilterIconButton"; private Bitmap mOverlayBitmap = null; - private FilterShowActivity mController = null; - private ImageFilter mImageFilter = null; + private PanelController mController = null; + private FilterRepresentation mFilterRepresentation = null; private LinearLayout mParentContainer = null; private View.OnClickListener mListener = null; + private Bitmap mIconBitmap = null; + private ImagePreset mPreset = null; + private Rect mDestination = null; public FilterIconButton(Context context) { super(context); @@ -46,30 +57,32 @@ public class FilterIconButton extends IconButton implements View.OnClickListener super(context, attrs, defStyle); } - public void setup(String text, ImageFilter filter, FilterShowActivity controller, - LinearLayout parent) { - mImageFilter = filter; + public void setup(String text, PanelController controller, LinearLayout parent) { mController = controller; setText(text); - - if (mImageFilter.getOverlayBitmaps() != 0) { - mOverlayBitmap = BitmapFactory.decodeResource(getResources(), - mImageFilter.getOverlayBitmaps()); - } - mParentContainer = parent; super.setOnClickListener(this); + MasterImage.getImage().addGeometryListener(this); invalidate(); } @Override protected Bitmap drawImage(Bitmap dst, Bitmap image, Rect destination) { - dst = super.drawImage(dst, image, destination); - dst = mImageFilter.iconApply(dst, 1.0f, false); - if (mOverlayBitmap != null) { - dst = super.drawImage(dst, mOverlayBitmap, destination); + 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); + mDestination = destination; + RenderingRequest.post(dst.copy(Bitmap.Config.ARGB_8888, true), mPreset, RenderingRequest.ICON_RENDERING, this); + } + return dst; + } else { + return mIconBitmap; } - return dst; } @Override @@ -79,8 +92,8 @@ public class FilterIconButton extends IconButton implements View.OnClickListener @Override public void onClick(View v) { - if (mController != null && mImageFilter != null) { - mController.useFilter(mImageFilter); + if (mController != null) { + mController.useFilterRepresentation(mFilterRepresentation); mParentContainer.dispatchSetSelected(false); setSelected(true); } @@ -89,7 +102,37 @@ public class FilterIconButton extends IconButton implements View.OnClickListener } } - public ImageFilter getImageFilter() { - return mImageFilter; + public FilterRepresentation getFilterRepresentation() { + return mFilterRepresentation; + } + + public void setFilterRepresentation(FilterRepresentation filterRepresentation) { + mFilterRepresentation = filterRepresentation; + if (mFilterRepresentation != null && mFilterRepresentation.getOverlayId() != 0) { + mOverlayBitmap = BitmapFactory.decodeResource(getResources(), + mFilterRepresentation.getOverlayId()); + } + invalidate(); + } + + @Override + public void available(RenderingRequest request) { + if (request.getBitmap() == null) { + return; + } + mIconBitmap = request.getBitmap(); + if (mOverlayBitmap != null) { + mIconBitmap = super.drawImage(mIconBitmap, mOverlayBitmap, mDestination); + } + invalidate(); + stale_icon = true; + } + + @Override + public void geometryChanged() { + stale_icon = true; + mIconBitmap = null; + mPreset = null; + invalidate(); } } |