| Index: trunk/src/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
|
| ===================================================================
|
| --- trunk/src/chrome/browser/ui/views/frame/taskbar_decorator_win.cc (revision 263283)
|
| +++ trunk/src/chrome/browser/ui/views/frame/taskbar_decorator_win.cc (working copy)
|
| @@ -43,15 +43,32 @@
|
|
|
| base::win::ScopedGDIObject<HICON> icon;
|
| if (bitmap.get()) {
|
| + const SkBitmap* source_bitmap = NULL;
|
| + SkBitmap squarer_bitmap;
|
| + if ((bitmap->width() == profiles::kAvatarIconWidth) &&
|
| + (bitmap->height() == profiles::kAvatarIconHeight)) {
|
| + // Shave a couple of columns so the bitmap is more square. So when
|
| + // resized to a square aspect ratio it looks pretty.
|
| + int x = 2;
|
| + bitmap->extractSubset(&squarer_bitmap, SkIRect::MakeXYWH(x, 0,
|
| + profiles::kAvatarIconWidth - x * 2, profiles::kAvatarIconHeight));
|
| + source_bitmap = &squarer_bitmap;
|
| + } else {
|
| + // The image's size has changed. Resize what we have.
|
| + source_bitmap = bitmap.get();
|
| + }
|
| +
|
| + // Maintain aspect ratio on resize. It is assumed that the image is wider
|
| + // than it is tall.
|
| const size_t kOverlayIconSize = 16;
|
| - const SkBitmap* source_bitmap = bitmap.get();
|
| -
|
| - // Maintain aspect ratio on resize. Image is assumed to be square.
|
| + size_t resized_height =
|
| + source_bitmap->height() * kOverlayIconSize / source_bitmap->width();
|
| + DCHECK_GE(kOverlayIconSize, resized_height);
|
| // Since the target size is so small, we use our best resizer.
|
| SkBitmap sk_icon = skia::ImageOperations::Resize(
|
| *source_bitmap,
|
| skia::ImageOperations::RESIZE_LANCZOS3,
|
| - kOverlayIconSize, kOverlayIconSize);
|
| + kOverlayIconSize, resized_height);
|
|
|
| // Paint the resized icon onto a 16x16 canvas otherwise Windows will badly
|
| // hammer it to 16x16.
|
| @@ -59,7 +76,7 @@
|
| offscreen_bitmap.allocN32Pixels(kOverlayIconSize, kOverlayIconSize);
|
| SkCanvas offscreen_canvas(offscreen_bitmap);
|
| offscreen_canvas.clear(SK_ColorTRANSPARENT);
|
| - offscreen_canvas.drawBitmap(sk_icon, 0, 0);
|
| + offscreen_canvas.drawBitmap(sk_icon, 0, kOverlayIconSize - resized_height);
|
|
|
| icon.Set(IconUtil::CreateHICONFromSkBitmap(offscreen_bitmap));
|
| if (!icon.Get())
|
|
|