}
mResizedOriginalBitmap = Bitmap.createScaledBitmap(mOriginalBitmap, w, h, true);
*/
+
GeometryMetadata geometry = preset.getGeometry();
if (mPreviousGeometry != null && geometry.equals(mPreviousGeometry)) {
return false;
}
+
RenderScript RS = ImageFilterRS.getRenderScriptContext();
if (mFiltersOnlyOriginalAllocation != null) {
mFiltersOnlyOriginalAllocation.destroy();
mResizedOriginalBitmap = preset.applyGeometry(mOriginalBitmap);
mOriginalAllocation = Allocation.createFromBitmap(RS, mResizedOriginalBitmap,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
+
mPreviousGeometry = new GeometryMetadata(geometry);
+
return true;
}
}
Bitmap bitmap = request.getBitmap();
ImagePreset preset = request.getImagePreset();
- updateOriginalAllocation(preset);
+ setPresetParameters(preset);
+ if (request.getType() != RenderingRequest.ICON_RENDERING) {
+ updateOriginalAllocation(preset);
+ }
+ if (DEBUG) {
+ Log.v(LOGTAG, "after update, req bitmap (" + bitmap.getWidth() + "x" + bitmap.getHeight()
+ +" ? resizeOriginal (" + mResizedOriginalBitmap.getWidth() + "x"
+ + mResizedOriginalBitmap.getHeight());
+ }
if (request.getType() == RenderingRequest.FULL_RENDERING
|| request.getType() == RenderingRequest.GEOMETRY_RENDERING) {
mOriginalAllocation.copyTo(bitmap);
- } else {
+ } else if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
mFiltersOnlyOriginalAllocation.copyTo(bitmap);
}
if (request.getType() == RenderingRequest.FULL_RENDERING
- || request.getType() == RenderingRequest.FILTERS_RENDERING) {
+ || request.getType() == RenderingRequest.FILTERS_RENDERING
+ || request.getType() == RenderingRequest.ICON_RENDERING) {
Bitmap bmp = preset.apply(bitmap);
request.setBitmap(bmp);
}
}
mOriginalAllocation.copyTo(bitmap);
+ setPresetParameters(preset);
bitmap = preset.apply(bitmap);
time = System.currentTimeMillis() - time;
public static int FULL_RENDERING = 0;
public static int FILTERS_RENDERING = 1;
public static int GEOMETRY_RENDERING = 2;
+ public static int ICON_RENDERING = 3;
private static final Bitmap.Config mConfig = Bitmap.Config.ARGB_8888;
public static void post(Bitmap source, ImagePreset preset, int type,
}
RenderingRequest request = new RenderingRequest();
Bitmap bitmap = null;
- if (type == FULL_RENDERING || type == GEOMETRY_RENDERING) {
+ if (type == FULL_RENDERING || type == GEOMETRY_RENDERING || type == ICON_RENDERING) {
bitmap = preset.applyGeometry(source);
} else {
bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), mConfig);
paint.setTextSize(mOriginalTextSize);
paint.getTextBounds(mOriginalText, 0, mOriginalText.length(), bounds);
paint.setColor(Color.BLACK);
- canvas.drawText(mOriginalText, mImageBounds.left + mOriginalTextMargin + 1,
- mImageBounds.top + bounds.height() + mOriginalTextMargin + 1, paint);
+ paint.setStyle(Paint.Style.STROKE);
+ paint.setStrokeWidth(3);
+ canvas.drawText(mOriginalText, mImageBounds.left + mOriginalTextMargin,
+ mImageBounds.top + bounds.height() + mOriginalTextMargin, paint);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setStrokeWidth(1);
paint.setColor(Color.WHITE);
canvas.drawText(mOriginalText, mImageBounds.left + mOriginalTextMargin,
mImageBounds.top + bounds.height() + mOriginalTextMargin, paint);
mActivity = activity;
}
+ public ImageLoader getLoader() {
+ return mLoader;
+ }
+
public synchronized ImagePreset getPreset() {
return mPreset;
}
import android.view.View;
import android.widget.LinearLayout;
+import com.android.gallery3d.app.Log;
import com.android.gallery3d.filtershow.FilterShowActivity;
import com.android.gallery3d.filtershow.PanelController;
import com.android.gallery3d.filtershow.cache.FilteringPipeline;
+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.filters.FiltersManager;
import com.android.gallery3d.filtershow.filters.ImageFilter;
+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 {
+ private static final String LOGTAG = "FilterIconButton";
private Bitmap mOverlayBitmap = null;
private PanelController mController = null;
- private ImageFilter mImageFilter = 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);
@Override
protected Bitmap drawImage(Bitmap dst, Bitmap image, Rect destination) {
- dst = super.drawImage(dst, image, destination);
- if (mImageFilter == null && mFilterRepresentation != null) {
- mImageFilter = FiltersManager.getManager().getFilterForRepresentation(mFilterRepresentation);
+ if (mIconBitmap == null && mPreset == null) {
+ ImageLoader loader = MasterImage.getImage().getLoader();
+ if (loader != null) {
+ 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;
}
- if (mFilterRepresentation != null && mImageFilter != null) {
- mImageFilter.useRepresentation(mFilterRepresentation);
- }
- if (mImageFilter != null) {
- dst = mImageFilter.iconApply(dst, 1.0f, false);
- }
- if (mOverlayBitmap != null) {
- dst = super.drawImage(dst, mOverlayBitmap, destination);
- }
- return dst;
}
@Override
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;
}
}
protected Bitmap mImageMirror = null;
protected Bitmap mIcon = null;
- private boolean stale_icon = true;
+ protected boolean stale_icon = true;
public IconButton(Context context) {
this(context, null);