Index: ui/gfx/icon_util.cc |
diff --git a/ui/gfx/icon_util.cc b/ui/gfx/icon_util.cc |
index b75b0c2fde5abd98641737cff1f40dfca0cdde2c..1497a2908391b73e700fd485032e18d19c48cdd9 100644 |
--- a/ui/gfx/icon_util.cc |
+++ b/ui/gfx/icon_util.cc |
@@ -161,14 +161,15 @@ const int IconUtil::kIconDimensions[] = { |
const size_t IconUtil::kNumIconDimensions = arraysize(kIconDimensions); |
const size_t IconUtil::kNumIconDimensionsUpToMediumSize = 9; |
-HICON IconUtil::CreateHICONFromSkBitmap(const SkBitmap& bitmap) { |
+base::win::ScopedHICON IconUtil::CreateHICONFromSkBitmap( |
+ const SkBitmap& bitmap) { |
// Only 32 bit ARGB bitmaps are supported. We also try to perform as many |
// validations as we can on the bitmap. |
SkAutoLockPixels bitmap_lock(bitmap); |
if ((bitmap.colorType() != kN32_SkColorType) || |
(bitmap.width() <= 0) || (bitmap.height() <= 0) || |
(bitmap.getPixels() == NULL)) |
- return NULL; |
+ return base::win::ScopedHICON(); |
// We start by creating a DIB which we'll use later on in order to create |
// the HICON. We use BITMAPV5HEADER since the bitmap we are about to convert |
@@ -186,7 +187,7 @@ HICON IconUtil::CreateHICONFromSkBitmap(const SkBitmap& bitmap) { |
DIB_RGB_COLORS, &bits, NULL, 0); |
} |
if (!dib || !bits) |
- return NULL; |
+ return base::win::ScopedHICON(); |
memcpy(bits, bitmap.getPixels(), bitmap.width() * bitmap.height() * 4); |
@@ -225,7 +226,7 @@ HICON IconUtil::CreateHICONFromSkBitmap(const SkBitmap& bitmap) { |
icon_info.yHotspot = 0; |
icon_info.hbmMask = mono_bitmap; |
icon_info.hbmColor = dib; |
- HICON icon = ::CreateIconIndirect(&icon_info); |
+ base::win::ScopedHICON icon(CreateIconIndirect(&icon_info)); |
::DeleteObject(dib); |
::DeleteObject(mono_bitmap); |
return icon; |
@@ -269,12 +270,11 @@ scoped_ptr<gfx::ImageFamily> IconUtil::CreateImageFamilyFromIconResource( |
continue; |
// For everything except the Vista+ 256x256 icons, use |LoadImage()|. |
- HICON icon_handle = static_cast<HICON>(LoadImage( |
+ base::win::ScopedHICON icon_handle(static_cast<HICON>(LoadImage( |
module, MAKEINTRESOURCE(resource_id), IMAGE_ICON, entry->bWidth, |
- entry->bHeight, LR_DEFAULTCOLOR | LR_DEFAULTSIZE)); |
+ entry->bHeight, LR_DEFAULTCOLOR | LR_DEFAULTSIZE))); |
scoped_ptr<SkBitmap> bitmap( |
- IconUtil::CreateSkBitmapFromHICON(icon_handle)); |
- DestroyIcon(icon_handle); |
+ IconUtil::CreateSkBitmapFromHICON(icon_handle.get())); |
result->Add(gfx::Image::CreateFrom1xBitmap(*bitmap)); |
} else { |
// 256x256 icons are stored with width and height set to 0. |
@@ -313,10 +313,10 @@ SkBitmap* IconUtil::CreateSkBitmapFromHICON(HICON icon) { |
return new SkBitmap(CreateSkBitmapFromHICONHelper(icon, icon_size)); |
} |
-HICON IconUtil::CreateCursorFromDIB(const gfx::Size& icon_size, |
- const gfx::Point& hotspot, |
- const void* dib_bits, |
- size_t dib_size) { |
+base::win::ScopedHICON IconUtil::CreateCursorFromDIB(const gfx::Size& icon_size, |
+ const gfx::Point& hotspot, |
+ const void* dib_bits, |
+ size_t dib_size) { |
BITMAPINFO icon_bitmap_info = {}; |
gfx::CreateBitmapHeader( |
icon_size.width(), |
@@ -334,7 +334,7 @@ HICON IconUtil::CreateCursorFromDIB(const gfx::Size& icon_size, |
0)); |
if (dib_size > 0) { |
SetDIBits(0, |
- bitmap_handle, |
+ bitmap_handle.get(), |
0, |
icon_size.height(), |
dib_bits, |
@@ -343,7 +343,7 @@ HICON IconUtil::CreateCursorFromDIB(const gfx::Size& icon_size, |
} |
HBITMAP old_bitmap = reinterpret_cast<HBITMAP>( |
- SelectObject(working_dc.Get(), bitmap_handle)); |
+ SelectObject(working_dc.Get(), bitmap_handle.get())); |
SetBkMode(working_dc.Get(), TRANSPARENT); |
SelectObject(working_dc.Get(), old_bitmap); |
@@ -357,10 +357,10 @@ HICON IconUtil::CreateCursorFromDIB(const gfx::Size& icon_size, |
ii.fIcon = FALSE; |
ii.xHotspot = hotspot.x(); |
ii.yHotspot = hotspot.y(); |
- ii.hbmMask = mask; |
- ii.hbmColor = bitmap_handle; |
+ ii.hbmMask = mask.get(); |
+ ii.hbmColor = bitmap_handle.get(); |
- return CreateIconIndirect(&ii); |
+ return base::win::ScopedHICON(CreateIconIndirect(&ii)); |
} |
SkBitmap IconUtil::CreateSkBitmapFromHICONHelper(HICON icon, |