| Index: chrome/browser/ui/views/avatar_menu_button.cc
|
| ===================================================================
|
| --- chrome/browser/ui/views/avatar_menu_button.cc (revision 112173)
|
| +++ chrome/browser/ui/views/avatar_menu_button.cc (working copy)
|
| @@ -5,7 +5,6 @@
|
| #include "chrome/browser/ui/views/avatar_menu_button.h"
|
|
|
| #include "chrome/browser/profiles/profile_metrics.h"
|
| -#include "chrome/browser/profiles/profile_info_util.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/views/avatar_menu_bubble_view.h"
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| @@ -32,7 +31,7 @@
|
| // we bail out silently at any error condition.
|
| // See http://msdn.microsoft.com/en-us/library/dd391696(VS.85).aspx for
|
| // more information.
|
| -void DrawTaskBarDecoration(const Browser* browser, const gfx::Image* image) {
|
| +void DrawTaskBarDecoration(const Browser* browser, const SkBitmap* bitmap) {
|
| #if defined(OS_WIN) && !defined(USE_AURA)
|
| if (base::win::GetVersion() < base::win::VERSION_WIN7)
|
| return;
|
| @@ -49,17 +48,13 @@
|
| if (FAILED(result) || FAILED(taskbar->HrInit()))
|
| return;
|
| HICON icon = NULL;
|
| - if (image) {
|
| - const SkBitmap* bitmap = image->ToSkBitmap();
|
| + if (bitmap) {
|
| const SkBitmap* source_bitmap = NULL;
|
| SkBitmap squarer_bitmap;
|
| - if ((bitmap->width() == profiles::kAvatarIconWidth) &&
|
| - (bitmap->height() == profiles::kAvatarIconHeight)) {
|
| + if ((bitmap->width() == 38) && (bitmap->height() == 31)) {
|
| // 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));
|
| + bitmap->extractSubset(&squarer_bitmap, SkIRect::MakeXYWH(2, 0, 34, 31));
|
| source_bitmap = &squarer_bitmap;
|
| } else {
|
| // The bitmaps size has changed. Resize what we have.
|
| @@ -85,9 +80,7 @@
|
| : MenuButton(NULL, string16(), this, false),
|
| browser_(browser),
|
| has_menu_(has_menu),
|
| - set_taskbar_decoration_(false),
|
| - is_gaia_picture_(false),
|
| - old_height_(0) {
|
| + set_taskbar_decoration_(false) {
|
| // In RTL mode, the avatar icon should be looking the opposite direction.
|
| EnableCanvasFlippingForRTLUI(true);
|
| }
|
| @@ -101,17 +94,12 @@
|
| }
|
|
|
| void AvatarMenuButton::OnPaint(gfx::Canvas* canvas) {
|
| - if (!icon_.get())
|
| + const SkBitmap& icon = GetImageToPaint();
|
| + if (icon.isNull())
|
| return;
|
|
|
| - if (old_height_ != height() || button_icon_.isNull()) {
|
| - old_height_ = height();
|
| - button_icon_ = profiles::GetAvatarIconForTitleBar(
|
| - *icon_, is_gaia_picture_, width(), height());
|
| - }
|
| -
|
| // Scale the image to fit the width of the button.
|
| - int dst_width = std::min(button_icon_.width(), width());
|
| + int dst_width = std::min(icon.width(), width());
|
| // Truncate rather than rounding, so that for odd widths we put the extra
|
| // pixel on the left.
|
| int dst_x = (width() - dst_width) / 2;
|
| @@ -119,21 +107,22 @@
|
| // Scale the height and maintain aspect ratio. This means that the
|
| // icon may not fit in the view. That's ok, we just vertically center it.
|
| float scale =
|
| - static_cast<float>(dst_width) / static_cast<float>(button_icon_.width());
|
| + static_cast<float>(dst_width) / static_cast<float>(icon.width());
|
| // Round here so that we minimize the aspect ratio drift.
|
| - int dst_height = Round(button_icon_.height() * scale);
|
| + int dst_height = Round(icon.height() * scale);
|
| // Round rather than truncating, so that for odd heights we select an extra
|
| // pixel below the image center rather than above. This is because the
|
| // incognito image has shadows at the top that make the apparent center below
|
| // the real center.
|
| int dst_y = Round((height() - dst_height) / 2.0);
|
| - canvas->DrawBitmapInt(button_icon_, 0, 0, button_icon_.width(),
|
| - button_icon_.height(), dst_x, dst_y, dst_width, dst_height, false);
|
|
|
| + canvas->DrawBitmapInt(icon, 0, 0, icon.width(), icon.height(),
|
| + dst_x, dst_y, dst_width, dst_height, false);
|
| +
|
| if (set_taskbar_decoration_) {
|
| // Drawing the taskbar decoration uses lanczos resizing so we really
|
| // want to do it only once.
|
| - DrawTaskBarDecoration(browser_, icon_.get());
|
| + DrawTaskBarDecoration(browser_, &icon);
|
| set_taskbar_decoration_ = false;
|
| }
|
| }
|
| @@ -144,11 +133,9 @@
|
| return views::MenuButton::HitTest(point);
|
| }
|
|
|
| -void AvatarMenuButton::SetIcon(const gfx::Image& icon, bool is_gaia_picture) {
|
| - icon_.reset(new gfx::Image(icon));
|
| - button_icon_ = SkBitmap();
|
| - is_gaia_picture_ = is_gaia_picture;
|
| - // If the icon changes, we need to set the taskbar decoration again.
|
| +// If the icon changes, we need to set the taskbar decoration again.
|
| +void AvatarMenuButton::SetIcon(const SkBitmap& icon) {
|
| + views::MenuButton::SetIcon(icon);
|
| set_taskbar_decoration_ = true;
|
| }
|
|
|
|
|