diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-25 18:16:39 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-25 18:16:39 +0000 |
commit | 3194e1ed74d74c12ff6dc6b9c0b0b5236cb1634a (patch) | |
tree | b7e5e5277693298bcfaf1c3149e34a2789636314 /skia/ext | |
parent | 291d87ee329b9283c74125bbd933f19e629dcac1 (diff) | |
download | chromium_src-3194e1ed74d74c12ff6dc6b9c0b0b5236cb1634a.zip chromium_src-3194e1ed74d74c12ff6dc6b9c0b0b5236cb1634a.tar.gz chromium_src-3194e1ed74d74c12ff6dc6b9c0b0b5236cb1634a.tar.bz2 |
Add favicons to tabs on the Mac. Also moved SkBitmapToNSImage() to
skia/ext/skia_utils_mac.h and removed chrome/browser/cocoa/cocoa_utils.h.
Patch by rsesek.
BUG=13565
http://codereview.chromium.org/131018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19266 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/ext')
-rw-r--r-- | skia/ext/skia_utils_mac.h | 3 | ||||
-rw-r--r-- | skia/ext/skia_utils_mac.mm | 14 | ||||
-rw-r--r-- | skia/ext/skia_utils_mac_unittest.mm | 71 |
3 files changed, 88 insertions, 0 deletions
diff --git a/skia/ext/skia_utils_mac.h b/skia/ext/skia_utils_mac.h index 14cd17f..06cb151 100644 --- a/skia/ext/skia_utils_mac.h +++ b/skia/ext/skia_utils_mac.h @@ -57,6 +57,9 @@ SkBitmap CGImageToSkBitmap(CGImageRef image); #ifdef __OBJC__ // Draws an NSImage with a given size into a SkBitmap. SkBitmap NSImageToSkBitmap(NSImage* image, NSSize size, bool is_opaque); + +// Given an SkBitmap, return an autoreleased NSImage. +NSImage* SkBitmapToNSImage(const SkBitmap& icon); #endif } // namespace gfx diff --git a/skia/ext/skia_utils_mac.mm b/skia/ext/skia_utils_mac.mm index 463fd52..5da38df 100644 --- a/skia/ext/skia_utils_mac.mm +++ b/skia/ext/skia_utils_mac.mm @@ -10,6 +10,7 @@ #include "base/scoped_cftyperef.h" #include "base/scoped_ptr.h" #include "skia/ext/bitmap_platform_device_mac.h" +#include "third_party/skia/include/utils/mac/SkCGUtils.h" namespace gfx { @@ -165,4 +166,17 @@ SkBitmap NSImageToSkBitmap(NSImage* image, NSSize size, bool is_opaque) { return bitmap; } +NSImage* SkBitmapToNSImage(const SkBitmap& skiaBitmap) { + // First convert SkBitmap to CGImageRef. + CGImageRef cgimage = SkCreateCGImageRef(skiaBitmap); + + // Now convert to NSImage. + NSBitmapImageRep* bitmap = [[[NSBitmapImageRep alloc] + initWithCGImage:cgimage] autorelease]; + CFRelease(cgimage); + NSImage* image = [[[NSImage alloc] init] autorelease]; + [image addRepresentation:bitmap]; + return image; +} + } // namespace gfx diff --git a/skia/ext/skia_utils_mac_unittest.mm b/skia/ext/skia_utils_mac_unittest.mm new file mode 100644 index 0000000..c29a249 --- /dev/null +++ b/skia/ext/skia_utils_mac_unittest.mm @@ -0,0 +1,71 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "skia/ext/skia_utils_mac.mm" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +class SkiaUtilsMacTest : public testing::Test { + public: + // If not red, is blue. + // If not tfbit (twenty-four-bit), is 444. + void ShapeHelper(int width, int height, bool isred, bool tfbit); +}; + +void SkiaUtilsMacTest::ShapeHelper(int width, int height, + bool isred, bool tfbit) { + SkBitmap thing; + + if (tfbit) + thing.setConfig(SkBitmap::kARGB_8888_Config, width, height); + else + thing.setConfig(SkBitmap::kARGB_4444_Config, width, height); + thing.allocPixels(); + + if (isred) + thing.eraseRGB(0xff, 0, 0); + else + thing.eraseRGB(0, 0, 0xff); + + // Confirm size + NSImage* image = gfx::SkBitmapToNSImage(thing); + EXPECT_DOUBLE_EQ([image size].width, (double)width); + EXPECT_DOUBLE_EQ([image size].height, (double)height); + + // Get the color of a pixel and make sure it looks fine + [image lockFocus]; + + int x = width > 17 ? 17 : 0; + int y = height > 17 ? 17 : 0; + NSColor* color = NSReadPixel(NSMakePoint(x, y)); + CGFloat red = 0, green = 0, blue = 0, alpha = 0; + [image unlockFocus]; + [color getRed:&red green:&green blue:&blue alpha:&alpha]; + + // Be tolerant of floating point rounding, gamma, etc. + if (isred) { + EXPECT_GT(red, 0.8); + EXPECT_LT(blue, 0.2); + } else { + EXPECT_LT(red, 0.2); + EXPECT_GT(blue, 0.8); + } + EXPECT_LT(green, 0.2); + EXPECT_GT(alpha, 0.9); +} + +TEST_F(SkiaUtilsMacTest, BitmapToNSImage_RedSquare64x64) { + ShapeHelper(64, 64, true, true); +} + +TEST_F(SkiaUtilsMacTest, BitmapToNSImage_BlueRectangle199x19) { + ShapeHelper(199, 19, false, true); +} + +TEST_F(SkiaUtilsMacTest, BitmapToNSImage_BlueRectangle444) { + ShapeHelper(200, 200, false, false); +} + +} // namespace |