OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "skia/ext/bitmap_platform_device_mac.h" | 5 #include "skia/ext/bitmap_platform_device_mac.h" |
6 | 6 |
7 #include <time.h> | 7 #include <time.h> |
8 | 8 |
9 #include "base/ref_counted.h" | 9 #include "base/ref_counted.h" |
10 #include "skia/ext/skia_utils_mac.h" | 10 #include "skia/ext/skia_utils_mac.h" |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 #ifndef NDEBUG | 202 #ifndef NDEBUG |
203 if (is_opaque) { | 203 if (is_opaque) { |
204 // To aid in finding bugs, we set the background color to something | 204 // To aid in finding bugs, we set the background color to something |
205 // obviously wrong so it will be noticable when it is not cleared | 205 // obviously wrong so it will be noticable when it is not cleared |
206 bitmap.eraseARGB(255, 0, 255, 128); // bright bluish green | 206 bitmap.eraseARGB(255, 0, 255, 128); // bright bluish green |
207 } | 207 } |
208 #endif | 208 #endif |
209 | 209 |
210 if (!context) | 210 if (!context) |
211 context = CGContextForData(data, width, height); | 211 context = CGContextForData(data, width, height); |
| 212 else |
| 213 CGContextRetain(context); |
212 | 214 |
213 // The device object will take ownership of the graphics context. | 215 BitmapPlatformDevice* rv = new BitmapPlatformDevice( |
214 return new BitmapPlatformDevice( | |
215 new BitmapPlatformDeviceData(context), bitmap); | 216 new BitmapPlatformDeviceData(context), bitmap); |
| 217 |
| 218 // The device object took ownership of the graphics context with its own |
| 219 // CGContextRetain call. |
| 220 CGContextRelease(context); |
| 221 |
| 222 return rv; |
216 } | 223 } |
217 | 224 |
218 BitmapPlatformDevice* BitmapPlatformDevice::CreateWithData(uint8_t* data, | 225 BitmapPlatformDevice* BitmapPlatformDevice::CreateWithData(uint8_t* data, |
219 int width, | 226 int width, |
220 int height, | 227 int height, |
221 bool is_opaque) { | 228 bool is_opaque) { |
222 CGContextRef context = NULL; | 229 CGContextRef context = NULL; |
223 if (data) | 230 if (data) |
224 context = CGContextForData(data, width, height); | 231 context = CGContextForData(data, width, height); |
225 | 232 |
226 return Create(context, width, height, is_opaque); | 233 BitmapPlatformDevice* rv = Create(context, width, height, is_opaque); |
| 234 |
| 235 // The device object took ownership of the graphics context with its own |
| 236 // CGContextRetain call. |
| 237 if (context) |
| 238 CGContextRelease(context); |
| 239 |
| 240 return rv; |
227 } | 241 } |
228 | 242 |
229 // The device will own the bitmap, which corresponds to also owning the pixel | 243 // The device will own the bitmap, which corresponds to also owning the pixel |
230 // data. Therefore, we do not transfer ownership to the SkDevice's bitmap. | 244 // data. Therefore, we do not transfer ownership to the SkDevice's bitmap. |
231 BitmapPlatformDevice::BitmapPlatformDevice( | 245 BitmapPlatformDevice::BitmapPlatformDevice( |
232 BitmapPlatformDeviceData* data, const SkBitmap& bitmap) | 246 BitmapPlatformDeviceData* data, const SkBitmap& bitmap) |
233 : PlatformDevice(bitmap), | 247 : PlatformDevice(bitmap), |
234 data_(data) { | 248 data_(data) { |
235 } | 249 } |
236 | 250 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 for (int i = 0; i < height; i++) { | 339 for (int i = 0; i < height; i++) { |
326 size_t offset = (i + bitmap_start_y) * row_words + bitmap_start_x; | 340 size_t offset = (i + bitmap_start_y) * row_words + bitmap_start_x; |
327 for (int j = 0; j < width; j++) { | 341 for (int j = 0; j < width; j++) { |
328 adjustor(data + offset + j); | 342 adjustor(data + offset + j); |
329 } | 343 } |
330 } | 344 } |
331 } | 345 } |
332 } | 346 } |
333 | 347 |
334 } // namespace skia | 348 } // namespace skia |
OLD | NEW |