1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.gallery3d.filtershow.cache;
18
19import android.graphics.Bitmap;
20import android.graphics.Rect;
21import com.android.gallery3d.app.Log;
22import com.android.gallery3d.filtershow.filters.FiltersManager;
23import com.android.gallery3d.filtershow.imageshow.MasterImage;
24import com.android.gallery3d.filtershow.presets.FilterEnvironment;
25import com.android.gallery3d.filtershow.presets.ImagePreset;
26
27public class RenderingRequest {
28    private static final String LOGTAG = "RenderingRequest";
29    private boolean mIsDirect = false;
30    private Bitmap mBitmap = null;
31    private ImagePreset mImagePreset = null;
32    private ImagePreset mOriginalImagePreset = null;
33    private RenderingRequestCaller mCaller = null;
34    private float mScaleFactor = 1.0f;
35    private Rect mBounds = null;
36    private Rect mDestination = null;
37    private int mType = FULL_RENDERING;
38    public static final int FULL_RENDERING = 0;
39    public static final int FILTERS_RENDERING = 1;
40    public static final int GEOMETRY_RENDERING = 2;
41    public static final int ICON_RENDERING = 3;
42    public static final int PARTIAL_RENDERING = 4;
43    public static final int HIGHRES_RENDERING = 5;
44    public static final int STYLE_ICON_RENDERING = 6;
45
46    private static final Bitmap.Config mConfig = Bitmap.Config.ARGB_8888;
47
48    public static void post(Bitmap source, ImagePreset preset, int type, RenderingRequestCaller caller) {
49        RenderingRequest.post(source, preset, type, caller, null, null);
50    }
51
52    public static void post(Bitmap source, ImagePreset preset, int type,
53                            RenderingRequestCaller caller, Rect bounds, Rect destination) {
54        if (((type != PARTIAL_RENDERING && type != HIGHRES_RENDERING) && source == null)
55                || preset == null || caller == null) {
56            Log.v(LOGTAG, "something null: source: " + source
57                    + " or preset: " + preset + " or caller: " + caller);
58            return;
59        }
60        RenderingRequest request = new RenderingRequest();
61        Bitmap bitmap = null;
62        if (type == FULL_RENDERING
63                || type == GEOMETRY_RENDERING
64                || type == ICON_RENDERING
65                || type == STYLE_ICON_RENDERING) {
66            CachingPipeline pipeline = new CachingPipeline(
67                    FiltersManager.getManager(), "Icon");
68            bitmap = pipeline.renderGeometryIcon(source, preset);
69        } else if (type != PARTIAL_RENDERING && type != HIGHRES_RENDERING) {
70            bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), mConfig);
71        }
72
73        request.setBitmap(bitmap);
74        ImagePreset passedPreset = new ImagePreset(preset);
75        passedPreset.setImageLoader(MasterImage.getImage().getImageLoader());
76        request.setOriginalImagePreset(preset);
77        request.setScaleFactor(MasterImage.getImage().getScaleFactor());
78
79        if (type == PARTIAL_RENDERING) {
80            request.setBounds(bounds);
81            request.setDestination(destination);
82            passedPreset.setPartialRendering(true, bounds);
83        }
84
85        request.setImagePreset(passedPreset);
86        request.setType(type);
87        request.setCaller(caller);
88        request.post();
89    }
90
91    public void post() {
92        FilteringPipeline.getPipeline().postRenderingRequest(this);
93    }
94
95    public void markAvailable() {
96        if (mBitmap == null || mImagePreset == null
97                || mCaller == null) {
98            return;
99        }
100        mCaller.available(this);
101    }
102
103    public boolean isDirect() {
104        return mIsDirect;
105    }
106
107    public void setDirect(boolean isDirect) {
108        mIsDirect = isDirect;
109    }
110
111    public Bitmap getBitmap() {
112        return mBitmap;
113    }
114
115    public void setBitmap(Bitmap bitmap) {
116        mBitmap = bitmap;
117    }
118
119    public ImagePreset getImagePreset() {
120        return mImagePreset;
121    }
122
123    public void setImagePreset(ImagePreset imagePreset) {
124        mImagePreset = imagePreset;
125    }
126
127    public int getType() {
128        return mType;
129    }
130
131    public void setType(int type) {
132        mType = type;
133    }
134
135    public void setCaller(RenderingRequestCaller caller) {
136        mCaller = caller;
137    }
138
139    public Rect getBounds() {
140        return mBounds;
141    }
142
143    public void setBounds(Rect bounds) {
144        mBounds = bounds;
145    }
146
147    public void setScaleFactor(float scaleFactor) {
148        mScaleFactor = scaleFactor;
149    }
150
151    public float getScaleFactor() {
152        return mScaleFactor;
153    }
154
155    public Rect getDestination() {
156        return mDestination;
157    }
158
159    public void setDestination(Rect destination) {
160        mDestination = destination;
161    }
162
163    public ImagePreset getOriginalImagePreset() {
164        return mOriginalImagePreset;
165    }
166
167    public void setOriginalImagePreset(ImagePreset originalImagePreset) {
168        mOriginalImagePreset = originalImagePreset;
169    }
170}
171