diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-10 17:41:13 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-10 17:41:13 +0000 |
commit | 89753fdf570d25d44fe9d5f01600fa5138ca1342 (patch) | |
tree | be9814b040e47a28f25578073baaf3aacf673f78 /skia | |
parent | 8bd4a46da03767be3a2fa16c9fc32ed2233e47f7 (diff) | |
download | chromium_src-89753fdf570d25d44fe9d5f01600fa5138ca1342.zip chromium_src-89753fdf570d25d44fe9d5f01600fa5138ca1342.tar.gz chromium_src-89753fdf570d25d44fe9d5f01600fa5138ca1342.tar.bz2 |
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
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=136304
Review URL: https://chromiumcodereview.appspot.com/10245003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136332 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r-- | skia/ext/skia_utils_mac.h | 10 | ||||
-rw-r--r-- | skia/ext/skia_utils_mac.mm | 46 | ||||
-rw-r--r-- | skia/ext/skia_utils_mac_unittest.mm | 40 |
3 files changed, 30 insertions, 66 deletions
diff --git a/skia/ext/skia_utils_mac.h b/skia/ext/skia_utils_mac.h index da290ea..f8ba28c 100644 --- a/skia/ext/skia_utils_mac.h +++ b/skia/ext/skia_utils_mac.h @@ -24,10 +24,12 @@ typedef struct _NSSize NSSize; #endif #ifdef __OBJC__ +@class NSBitmapImageRep; @class NSImage; @class NSImageRep; @class NSColor; #else +class NSBitmapImageRep; class NSImage; class NSImageRep; class NSColor; @@ -81,6 +83,10 @@ SK_API SkBitmap NSImageToSkBitmap(NSImage* image, NSSize size, bool is_opaque); SK_API SkBitmap NSImageRepToSkBitmap( NSImageRep* image, NSSize size, bool is_opaque); +// Given an SkBitmap, return an autoreleased NSBitmapImageRep in the generic +// color space. +SK_API NSBitmapImageRep* SkBitmapToNSBitmapImageRep(const SkBitmap& image); + // Given an SkBitmap and a color space, return an autoreleased NSImage. SK_API NSImage* SkBitmapToNSImageWithColorSpace(const SkBitmap& icon, CGColorSpaceRef colorSpace); @@ -90,10 +96,6 @@ SK_API NSImage* SkBitmapToNSImageWithColorSpace(const SkBitmap& icon, // TODO(thakis): Remove this -- http://crbug.com/69432 SK_API NSImage* SkBitmapToNSImage(const SkBitmap& icon); -// Given a vector of SkBitmaps, return an NSImage with each bitmap added -// as a representation. -SK_API NSImage* SkBitmapsToNSImage(const std::vector<const SkBitmap*>& bitmaps); - // Returns |[NSImage imageNamed:@"NSApplicationIcon"]| as SkBitmap. SK_API SkBitmap AppplicationIconAtSize(int size); diff --git a/skia/ext/skia_utils_mac.mm b/skia/ext/skia_utils_mac.mm index f359089..48070d1 100644 --- a/skia/ext/skia_utils_mac.mm +++ b/skia/ext/skia_utils_mac.mm @@ -248,6 +248,20 @@ 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()) @@ -272,43 +286,11 @@ 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) { diff --git a/skia/ext/skia_utils_mac_unittest.mm b/skia/ext/skia_utils_mac_unittest.mm index 24310b0..1353eb6 100644 --- a/skia/ext/skia_utils_mac_unittest.mm +++ b/skia/ext/skia_utils_mac_unittest.mm @@ -187,36 +187,16 @@ TEST_F(SkiaUtilsMacTest, FAILS_BitmapToNSImage_BlueRectangle444) { ShapeHelper(200, 200, false, false); } -TEST_F(SkiaUtilsMacTest, FAILS_MultipleBitmapsToNSImage) { - int redWidth = 10; - int redHeight = 15; - int blueWidth = 20; - int blueHeight = 30; - - SkBitmap redBitmap(CreateSkBitmap(redWidth, redHeight, true, true)); - SkBitmap blueBitmap(CreateSkBitmap(blueWidth, blueHeight, false, true)); - std::vector<const SkBitmap*> bitmaps; - bitmaps.push_back(&redBitmap); - bitmaps.push_back(&blueBitmap); - - NSImage* image = gfx::SkBitmapsToNSImage(bitmaps); - - // Image size should be the same as the smallest bitmap. - EXPECT_DOUBLE_EQ(redWidth, [image size].width); - EXPECT_DOUBLE_EQ(redHeight, [image size].height); - - EXPECT_EQ(2u, [[image representations] count]); - - for (NSBitmapImageRep* imageRep in [image representations]) { - bool isred = [imageRep size].width == redWidth; - if (isred) { - EXPECT_DOUBLE_EQ(redHeight, [imageRep size].height); - } else { - EXPECT_DOUBLE_EQ(blueWidth, [imageRep size].width); - EXPECT_DOUBLE_EQ(blueHeight, [imageRep size].height); - } - TestImageRep(imageRep, isred); - } +TEST_F(SkiaUtilsMacTest, FAILS_BitmapToNSBitmapImageRep_BlueRectangle20x30) { + int width = 20; + int height = 30; + + SkBitmap bitmap(CreateSkBitmap(width, height, false, true)); + NSBitmapImageRep* imageRep = gfx::SkBitmapToNSBitmapImageRep(bitmap); + + EXPECT_DOUBLE_EQ(width, [imageRep size].width); + EXPECT_DOUBLE_EQ(height, [imageRep size].height); + TestImageRep(imageRep, false); } TEST_F(SkiaUtilsMacTest, NSImageRepToSkBitmap) { |