OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #ifndef SkBitmapDevice_DEFINED | 9 #ifndef SkBitmapDevice_DEFINED |
10 #define SkBitmapDevice_DEFINED | 10 #define SkBitmapDevice_DEFINED |
(...skipping 17 matching lines...) Expand all Loading... |
28 * valid for the bitmap to have no pixels associated with it. In that case, | 28 * valid for the bitmap to have no pixels associated with it. In that case, |
29 * any drawing to this device will have no effect. | 29 * any drawing to this device will have no effect. |
30 */ | 30 */ |
31 SkBitmapDevice(const SkBitmap& bitmap, const SkDeviceProperties& devicePrope
rties); | 31 SkBitmapDevice(const SkBitmap& bitmap, const SkDeviceProperties& devicePrope
rties); |
32 | 32 |
33 static SkBitmapDevice* Create(const SkImageInfo&, | 33 static SkBitmapDevice* Create(const SkImageInfo&, |
34 const SkDeviceProperties* = NULL); | 34 const SkDeviceProperties* = NULL); |
35 | 35 |
36 virtual SkImageInfo imageInfo() const SK_OVERRIDE; | 36 virtual SkImageInfo imageInfo() const SK_OVERRIDE; |
37 | 37 |
38 /** | |
39 * Return the device's associated gpu render target, or NULL. | |
40 */ | |
41 virtual GrRenderTarget* accessRenderTarget() SK_OVERRIDE { return NULL; } | |
42 | |
43 protected: | 38 protected: |
44 /** | |
45 * Device may filter the text flags for drawing text here. If it wants to | |
46 * make a change to the specified values, it should write them into the | |
47 * textflags parameter (output) and return true. If the paint is fine as | |
48 * is, then ignore the textflags parameter and return false. | |
49 * | |
50 * The baseclass SkDevice filters based on its depth and blitters. | |
51 */ | |
52 virtual bool filterTextFlags(const SkPaint& paint, TextFlags*) SK_OVERRIDE; | 39 virtual bool filterTextFlags(const SkPaint& paint, TextFlags*) SK_OVERRIDE; |
53 | 40 |
54 /** Clears the entire device to the specified color (including alpha). | 41 /** Clears the entire device to the specified color (including alpha). |
55 * Ignores the clip. | 42 * Ignores the clip. |
56 */ | 43 */ |
57 virtual void clear(SkColor color) SK_OVERRIDE; | 44 virtual void clear(SkColor color) SK_OVERRIDE; |
58 | 45 |
59 /** These are called inside the per-device-layer loop for each draw call. | 46 /** These are called inside the per-device-layer loop for each draw call. |
60 When these are called, we have already applied any saveLayer operations, | 47 When these are called, we have already applied any saveLayer operations, |
61 and are handling any looping from the paint, and any effects from the | 48 and are handling any looping from the paint, and any effects from the |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 virtual bool onReadPixels(const SkImageInfo&, void*, size_t, int x, int y) S
K_OVERRIDE; | 129 virtual bool onReadPixels(const SkImageInfo&, void*, size_t, int x, int y) S
K_OVERRIDE; |
143 virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int
) SK_OVERRIDE; | 130 virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int
) SK_OVERRIDE; |
144 virtual void* onAccessPixels(SkImageInfo* info, size_t* rowBytes) SK_OVERRID
E; | 131 virtual void* onAccessPixels(SkImageInfo* info, size_t* rowBytes) SK_OVERRID
E; |
145 | 132 |
146 /** Called when this device is installed into a Canvas. Balanced by a call | 133 /** Called when this device is installed into a Canvas. Balanced by a call |
147 to unlockPixels() when the device is removed from a Canvas. | 134 to unlockPixels() when the device is removed from a Canvas. |
148 */ | 135 */ |
149 virtual void lockPixels() SK_OVERRIDE; | 136 virtual void lockPixels() SK_OVERRIDE; |
150 virtual void unlockPixels() SK_OVERRIDE; | 137 virtual void unlockPixels() SK_OVERRIDE; |
151 | 138 |
152 /** | |
153 * Returns true if the device allows processing of this imagefilter. If | |
154 * false is returned, then the filter is ignored. This may happen for | |
155 * some subclasses that do not support pixel manipulations after drawing | |
156 * has occurred (e.g. printing). The default implementation returns true. | |
157 */ | |
158 virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE; | |
159 | |
160 /** | |
161 * Override and return true for filters that the device can handle | |
162 * intrinsically. Doing so means that SkCanvas will pass-through this | |
163 * filter to drawSprite and drawDevice (and potentially filterImage). | |
164 * Returning false means the SkCanvas will have apply the filter itself, | |
165 * and just pass the resulting image to the device. | |
166 */ | |
167 virtual bool canHandleImageFilter(const SkImageFilter*) SK_OVERRIDE; | |
168 | |
169 /** | |
170 * Related (but not required) to canHandleImageFilter, this method returns | |
171 * true if the device could apply the filter to the src bitmap and return | |
172 * the result (and updates offset as needed). | |
173 * If the device does not recognize or support this filter, | |
174 * it just returns false and leaves result and offset unchanged. | |
175 */ | |
176 virtual bool filterImage(const SkImageFilter*, const SkBitmap&, const SkImag
eFilter::Context&, | |
177 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; | |
178 | |
179 private: | 139 private: |
180 friend class SkCanvas; | 140 friend class SkCanvas; |
181 friend struct DeviceCM; //for setMatrixClip | 141 friend struct DeviceCM; //for setMatrixClip |
182 friend class SkDraw; | 142 friend class SkDraw; |
183 friend class SkDrawIter; | 143 friend class SkDrawIter; |
184 friend class SkDeviceFilteredPaint; | 144 friend class SkDeviceFilteredPaint; |
185 friend class SkDeviceImageFilterProxy; | 145 friend class SkDeviceImageFilterProxy; |
186 | 146 |
187 friend class SkSurface_Raster; | 147 friend class SkSurface_Raster; |
188 | 148 |
189 // used to change the backend's pixels (and possibly config/rowbytes) | 149 // used to change the backend's pixels (and possibly config/rowbytes) |
190 // but cannot change the width/height, so there should be no change to | 150 // but cannot change the width/height, so there should be no change to |
191 // any clip information. | 151 // any clip information. |
192 virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRI
DE; | 152 virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRI
DE; |
193 | 153 |
194 virtual SkBaseDevice* onCreateDevice(const SkImageInfo&, Usage) SK_OVERRIDE; | 154 virtual SkBaseDevice* onCreateDevice(const SkImageInfo&, Usage) SK_OVERRIDE; |
195 | 155 |
196 /** Causes any deferred drawing to the device to be completed. | |
197 */ | |
198 virtual void flush() SK_OVERRIDE {} | |
199 | |
200 virtual SkSurface* newSurface(const SkImageInfo&) SK_OVERRIDE; | 156 virtual SkSurface* newSurface(const SkImageInfo&) SK_OVERRIDE; |
201 virtual const void* peekPixels(SkImageInfo*, size_t* rowBytes) SK_OVERRIDE; | 157 virtual const void* peekPixels(SkImageInfo*, size_t* rowBytes) SK_OVERRIDE; |
202 | 158 |
203 SkBitmap fBitmap; | 159 SkBitmap fBitmap; |
204 | 160 |
205 typedef SkBaseDevice INHERITED; | 161 typedef SkBaseDevice INHERITED; |
206 }; | 162 }; |
207 | 163 |
208 #endif // SkBitmapDevice_DEFINED | 164 #endif // SkBitmapDevice_DEFINED |
OLD | NEW |