diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-10 15:47:00 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-10 15:47:00 +0000 |
commit | 74d597c7ae0348a78397f7493e9ef8386e151dff (patch) | |
tree | 783b48c9f8cf22a6040a1c0ea2ee3e9371a776f3 /skia/ext/skia_utils_mac.mm | |
parent | 5544450654bfa0c36809e104014dd96215d05b4d (diff) | |
download | chromium_src-74d597c7ae0348a78397f7493e9ef8386e151dff.zip chromium_src-74d597c7ae0348a78397f7493e9ef8386e151dff.tar.gz chromium_src-74d597c7ae0348a78397f7493e9ef8386e151dff.tar.bz2 |
Revert 136304 - This patch makes ImageSkia more like SkBitmap. The goal is to make swapping from SkBitmap to ImageSkia easier.
Notable changes:
- ImageSkia can be cheaply copied
- Added extractSubset, will remove after SkBitmaps have been converted to ImageSkia
- Modified API to look more like SkBitmap
Review URL: https://chromiumcodereview.appspot.com/10245003
TBR=pkotwicz@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10383110
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136313 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/ext/skia_utils_mac.mm')
-rw-r--r-- | skia/ext/skia_utils_mac.mm | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/skia/ext/skia_utils_mac.mm b/skia/ext/skia_utils_mac.mm index 48070d1..f359089 100644 --- a/skia/ext/skia_utils_mac.mm +++ b/skia/ext/skia_utils_mac.mm @@ -248,20 +248,6 @@ SkBitmap NSImageRepToSkBitmap(NSImageRep* image, NSSize size, bool is_opaque) { return NSImageOrNSImageRepToSkBitmap(nil, image, size, is_opaque); } -NSBitmapImageRep* SkBitmapToNSBitmapImageRep(const SkBitmap& skiaBitmap) { - base::mac::ScopedCFTypeRef<CGColorSpaceRef> color_space( - CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)); - - // First convert SkBitmap to CGImageRef. - base::mac::ScopedCFTypeRef<CGImageRef> cgimage( - SkCreateCGImageRefWithColorspace(skiaBitmap, color_space)); - - // Now convert to NSBitmapImageRep. - scoped_nsobject<NSBitmapImageRep> bitmap( - [[NSBitmapImageRep alloc] initWithCGImage:cgimage]); - return [bitmap.release() autorelease]; -} - NSImage* SkBitmapToNSImageWithColorSpace(const SkBitmap& skiaBitmap, CGColorSpaceRef colorSpace) { if (skiaBitmap.isNull()) @@ -286,11 +272,43 @@ NSImage* SkBitmapToNSImage(const SkBitmap& skiaBitmap) { return SkBitmapToNSImageWithColorSpace(skiaBitmap, colorSpace.get()); } +NSImage* SkBitmapsToNSImage(const std::vector<const SkBitmap*>& bitmaps) { + if (bitmaps.empty()) + return nil; + + base::mac::ScopedCFTypeRef<CGColorSpaceRef> color_space( + CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)); + scoped_nsobject<NSImage> image([[NSImage alloc] init]); + NSSize min_size = NSZeroSize; + + for (std::vector<const SkBitmap*>::const_iterator it = bitmaps.begin(); + it != bitmaps.end(); ++it) { + const SkBitmap& skiaBitmap = **it; + // First convert SkBitmap to CGImageRef. + base::mac::ScopedCFTypeRef<CGImageRef> cgimage( + SkCreateCGImageRefWithColorspace(skiaBitmap, color_space)); + + // Now convert to NSImage. + scoped_nsobject<NSBitmapImageRep> bitmap( + [[NSBitmapImageRep alloc] initWithCGImage:cgimage]); + [image addRepresentation:bitmap]; + + if (min_size.width == 0 || min_size.width > skiaBitmap.width()) { + min_size.width = skiaBitmap.width(); + min_size.height = skiaBitmap.height(); + } + } + + [image setSize:min_size]; + return [image.release() autorelease]; +} + SkBitmap AppplicationIconAtSize(int size) { NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; return NSImageToSkBitmap(image, NSMakeSize(size, size), /* is_opaque=*/true); } + SkiaBitLocker::SkiaBitLocker(SkCanvas* canvas) : canvas_(canvas), cgContext_(0) { |