Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: skia/ext/skia_utils_mac.mm

Issue 10245003: Makes ImageSkia more like SkBitmap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated comment Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « skia/ext/skia_utils_mac.h ('k') | skia/ext/skia_utils_mac_unittest.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/skia_utils_mac.h" 5 #include "skia/ext/skia_utils_mac.h"
6 6
7 #import <AppKit/AppKit.h> 7 #import <AppKit/AppKit.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 } 241 }
242 242
243 SkBitmap NSImageToSkBitmap(NSImage* image, NSSize size, bool is_opaque) { 243 SkBitmap NSImageToSkBitmap(NSImage* image, NSSize size, bool is_opaque) {
244 return NSImageOrNSImageRepToSkBitmap(image, nil, size, is_opaque); 244 return NSImageOrNSImageRepToSkBitmap(image, nil, size, is_opaque);
245 } 245 }
246 246
247 SkBitmap NSImageRepToSkBitmap(NSImageRep* image, NSSize size, bool is_opaque) { 247 SkBitmap NSImageRepToSkBitmap(NSImageRep* image, NSSize size, bool is_opaque) {
248 return NSImageOrNSImageRepToSkBitmap(nil, image, size, is_opaque); 248 return NSImageOrNSImageRepToSkBitmap(nil, image, size, is_opaque);
249 } 249 }
250 250
251 NSBitmapImageRep* SkBitmapToNSBitmapImageRep(const SkBitmap& skiaBitmap) {
252 base::mac::ScopedCFTypeRef<CGColorSpaceRef> color_space(
253 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));
254
255 // First convert SkBitmap to CGImageRef.
256 base::mac::ScopedCFTypeRef<CGImageRef> cgimage(
257 SkCreateCGImageRefWithColorspace(skiaBitmap, color_space));
258
259 // Now convert to NSBitmapImageRep.
260 scoped_nsobject<NSBitmapImageRep> bitmap(
261 [[NSBitmapImageRep alloc] initWithCGImage:cgimage]);
262 return [bitmap.release() autorelease];
263 }
264
251 NSImage* SkBitmapToNSImageWithColorSpace(const SkBitmap& skiaBitmap, 265 NSImage* SkBitmapToNSImageWithColorSpace(const SkBitmap& skiaBitmap,
252 CGColorSpaceRef colorSpace) { 266 CGColorSpaceRef colorSpace) {
253 if (skiaBitmap.isNull()) 267 if (skiaBitmap.isNull())
254 return nil; 268 return nil;
255 269
256 // First convert SkBitmap to CGImageRef. 270 // First convert SkBitmap to CGImageRef.
257 base::mac::ScopedCFTypeRef<CGImageRef> cgimage( 271 base::mac::ScopedCFTypeRef<CGImageRef> cgimage(
258 SkCreateCGImageRefWithColorspace(skiaBitmap, colorSpace)); 272 SkCreateCGImageRefWithColorspace(skiaBitmap, colorSpace));
259 273
260 // Now convert to NSImage. 274 // Now convert to NSImage.
261 scoped_nsobject<NSBitmapImageRep> bitmap( 275 scoped_nsobject<NSBitmapImageRep> bitmap(
262 [[NSBitmapImageRep alloc] initWithCGImage:cgimage]); 276 [[NSBitmapImageRep alloc] initWithCGImage:cgimage]);
263 scoped_nsobject<NSImage> image([[NSImage alloc] init]); 277 scoped_nsobject<NSImage> image([[NSImage alloc] init]);
264 [image addRepresentation:bitmap]; 278 [image addRepresentation:bitmap];
265 [image setSize:NSMakeSize(skiaBitmap.width(), skiaBitmap.height())]; 279 [image setSize:NSMakeSize(skiaBitmap.width(), skiaBitmap.height())];
266 return [image.release() autorelease]; 280 return [image.release() autorelease];
267 } 281 }
268 282
269 NSImage* SkBitmapToNSImage(const SkBitmap& skiaBitmap) { 283 NSImage* SkBitmapToNSImage(const SkBitmap& skiaBitmap) {
270 base::mac::ScopedCFTypeRef<CGColorSpaceRef> colorSpace( 284 base::mac::ScopedCFTypeRef<CGColorSpaceRef> colorSpace(
271 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)); 285 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));
272 return SkBitmapToNSImageWithColorSpace(skiaBitmap, colorSpace.get()); 286 return SkBitmapToNSImageWithColorSpace(skiaBitmap, colorSpace.get());
273 } 287 }
274 288
275 NSImage* SkBitmapsToNSImage(const std::vector<const SkBitmap*>& bitmaps) {
276 if (bitmaps.empty())
277 return nil;
278
279 base::mac::ScopedCFTypeRef<CGColorSpaceRef> color_space(
280 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB));
281 scoped_nsobject<NSImage> image([[NSImage alloc] init]);
282 NSSize min_size = NSZeroSize;
283
284 for (std::vector<const SkBitmap*>::const_iterator it = bitmaps.begin();
285 it != bitmaps.end(); ++it) {
286 const SkBitmap& skiaBitmap = **it;
287 // First convert SkBitmap to CGImageRef.
288 base::mac::ScopedCFTypeRef<CGImageRef> cgimage(
289 SkCreateCGImageRefWithColorspace(skiaBitmap, color_space));
290
291 // Now convert to NSImage.
292 scoped_nsobject<NSBitmapImageRep> bitmap(
293 [[NSBitmapImageRep alloc] initWithCGImage:cgimage]);
294 [image addRepresentation:bitmap];
295
296 if (min_size.width == 0 || min_size.width > skiaBitmap.width()) {
297 min_size.width = skiaBitmap.width();
298 min_size.height = skiaBitmap.height();
299 }
300 }
301
302 [image setSize:min_size];
303 return [image.release() autorelease];
304 }
305
306 SkBitmap AppplicationIconAtSize(int size) { 289 SkBitmap AppplicationIconAtSize(int size) {
307 NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; 290 NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"];
308 return NSImageToSkBitmap(image, NSMakeSize(size, size), /* is_opaque=*/true); 291 return NSImageToSkBitmap(image, NSMakeSize(size, size), /* is_opaque=*/true);
309 } 292 }
310 293
311
312 SkiaBitLocker::SkiaBitLocker(SkCanvas* canvas) 294 SkiaBitLocker::SkiaBitLocker(SkCanvas* canvas)
313 : canvas_(canvas), 295 : canvas_(canvas),
314 cgContext_(0) { 296 cgContext_(0) {
315 } 297 }
316 298
317 SkiaBitLocker::~SkiaBitLocker() { 299 SkiaBitLocker::~SkiaBitLocker() {
318 releaseIfNeeded(); 300 releaseIfNeeded();
319 } 301 }
320 302
321 // This must be called to balance calls to cgContext 303 // This must be called to balance calls to cgContext
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 // Apply content matrix. 371 // Apply content matrix.
390 SkMatrix skMatrix = canvas_->getTotalMatrix(); 372 SkMatrix skMatrix = canvas_->getTotalMatrix();
391 skMatrix.postTranslate(-SkIntToScalar(pt.fX), -SkIntToScalar(pt.fY)); 373 skMatrix.postTranslate(-SkIntToScalar(pt.fX), -SkIntToScalar(pt.fY));
392 CGAffineTransform affine = SkMatrixToCGAffineTransform(skMatrix); 374 CGAffineTransform affine = SkMatrixToCGAffineTransform(skMatrix);
393 CGContextConcatCTM(cgContext_, affine); 375 CGContextConcatCTM(cgContext_, affine);
394 376
395 return cgContext_; 377 return cgContext_;
396 } 378 }
397 379
398 } // namespace gfx 380 } // namespace gfx
OLDNEW
« no previous file with comments | « skia/ext/skia_utils_mac.h ('k') | skia/ext/skia_utils_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698