OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #import <ApplicationServices/ApplicationServices.h> | 7 #import <ApplicationServices/ApplicationServices.h> |
8 #include <time.h> | 8 #include <time.h> |
9 | 9 |
10 #include "base/mac/mac_util.h" | 10 #include "base/mac/mac_util.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 BitmapPlatformDevice* BitmapPlatformDevice::Create(CGContextRef context, | 96 BitmapPlatformDevice* BitmapPlatformDevice::Create(CGContextRef context, |
97 int width, | 97 int width, |
98 int height, | 98 int height, |
99 bool is_opaque) { | 99 bool is_opaque) { |
100 if (RasterDeviceTooBigToAllocate(width, height)) | 100 if (RasterDeviceTooBigToAllocate(width, height)) |
101 return NULL; | 101 return NULL; |
102 | 102 |
103 SkBitmap bitmap; | 103 SkBitmap bitmap; |
104 // TODO: verify that the CG Context's pixels will have tight rowbytes or pass
in the correct | 104 // TODO: verify that the CG Context's pixels will have tight rowbytes or pass
in the correct |
105 // rowbytes for the case when context != NULL. | 105 // rowbytes for the case when context != NULL. |
106 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height, 0, | 106 bitmap.setInfo(SkImageInfo::MakeN32(width, height, is_opaque ? kOpaque_SkAlpha
Type : kPremul_SkAlphaType)); |
107 is_opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); | |
108 | 107 |
109 void* data; | 108 void* data; |
110 if (context) { | 109 if (context) { |
111 data = CGBitmapContextGetData(context); | 110 data = CGBitmapContextGetData(context); |
112 bitmap.setPixels(data); | 111 bitmap.setPixels(data); |
113 } else { | 112 } else { |
114 if (!bitmap.allocPixels()) | 113 if (!bitmap.allocPixels()) |
115 return NULL; | 114 return NULL; |
116 data = bitmap.getPixels(); | 115 data = bitmap.getPixels(); |
117 } | 116 } |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 | 264 |
266 PlatformBitmap::~PlatformBitmap() { | 265 PlatformBitmap::~PlatformBitmap() { |
267 if (surface_) | 266 if (surface_) |
268 CGContextRelease(surface_); | 267 CGContextRelease(surface_); |
269 } | 268 } |
270 | 269 |
271 bool PlatformBitmap::Allocate(int width, int height, bool is_opaque) { | 270 bool PlatformBitmap::Allocate(int width, int height, bool is_opaque) { |
272 if (RasterDeviceTooBigToAllocate(width, height)) | 271 if (RasterDeviceTooBigToAllocate(width, height)) |
273 return false; | 272 return false; |
274 | 273 |
275 bitmap_.setConfig(SkBitmap::kARGB_8888_Config, width, height, width * 4, | 274 if (!bitmap_.allocN32Pixels(width, height, is_opaque)) |
276 is_opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); | 275 return false; |
277 if (!bitmap_.allocPixels()) | |
278 return false; | |
279 | 276 |
280 if (!is_opaque) | 277 if (!is_opaque) |
281 bitmap_.eraseColor(0); | 278 bitmap_.eraseColor(0); |
282 | 279 |
283 surface_ = CGContextForData(bitmap_.getPixels(), bitmap_.width(), | 280 surface_ = CGContextForData(bitmap_.getPixels(), bitmap_.width(), |
284 bitmap_.height()); | 281 bitmap_.height()); |
285 return true; | 282 return true; |
286 } | 283 } |
287 | 284 |
288 } // namespace skia | 285 } // namespace skia |
OLD | NEW |