Chromium Code Reviews| Index: chrome/browser/ui/views/profiles/themed_avatar_button.cc |
| diff --git a/chrome/browser/ui/views/profiles/themed_avatar_button.cc b/chrome/browser/ui/views/profiles/themed_avatar_button.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ef2094875454cc56a1918d62c0290b0c57e416c3 |
| --- /dev/null |
| +++ b/chrome/browser/ui/views/profiles/themed_avatar_button.cc |
| @@ -0,0 +1,81 @@ |
| +// Copyright 2017 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 "chrome/browser/ui/views/profiles/themed_avatar_button.h" |
| + |
| +#include "chrome/grit/theme_resources.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| +#include "ui/views/controls/button/label_button_border.h" |
| + |
| +#if defined(OS_WIN) |
| +#include "base/win/windows_version.h" |
| +#endif |
| + |
| +const int kButtonHeight = 20; |
| + |
| +ThemedAvatarButton::ThemedAvatarButton(views::MenuButtonListener* listener, |
| + AvatarButtonStyle button_style, |
| + Profile* profile) |
| + : AvatarButton(listener, profile) { |
| + if (button_style == AvatarButtonStyle::THEMED) { |
| + const int kNormalImageSet[] = IMAGE_GRID(IDR_AVATAR_THEMED_BUTTON_NORMAL); |
| + const int kHoverImageSet[] = IMAGE_GRID(IDR_AVATAR_THEMED_BUTTON_HOVER); |
| + const int kPressedImageSet[] = IMAGE_GRID(IDR_AVATAR_THEMED_BUTTON_PRESSED); |
| + SetButtonAvatar(IDR_AVATAR_THEMED_BUTTON_AVATAR); |
| + SetBorder(CreateBorder(kNormalImageSet, kHoverImageSet, kPressedImageSet)); |
| +#if defined(OS_WIN) |
| + } else if (base::win::GetVersion() < base::win::VERSION_WIN8) { |
| + const int kNormalImageSet[] = IMAGE_GRID(IDR_AVATAR_GLASS_BUTTON_NORMAL); |
| + const int kHoverImageSet[] = IMAGE_GRID(IDR_AVATAR_GLASS_BUTTON_HOVER); |
| + const int kPressedImageSet[] = IMAGE_GRID(IDR_AVATAR_GLASS_BUTTON_PRESSED); |
| + SetButtonAvatar(IDR_AVATAR_GLASS_BUTTON_AVATAR); |
| + SetBorder(CreateBorder(kNormalImageSet, kHoverImageSet, kPressedImageSet)); |
| +#endif |
| + } else { |
| + const int kNormalImageSet[] = IMAGE_GRID(IDR_AVATAR_NATIVE_BUTTON_NORMAL); |
| + const int kHoverImageSet[] = IMAGE_GRID(IDR_AVATAR_NATIVE_BUTTON_HOVER); |
| + const int kPressedImageSet[] = IMAGE_GRID(IDR_AVATAR_NATIVE_BUTTON_PRESSED); |
| + SetButtonAvatar(IDR_AVATAR_NATIVE_BUTTON_AVATAR); |
| + SetBorder(CreateBorder(kNormalImageSet, kHoverImageSet, kPressedImageSet)); |
| + } |
| + |
| + Update(); |
| + SchedulePaint(); |
| +} |
| + |
| +ThemedAvatarButton::~ThemedAvatarButton() {} |
| + |
| +gfx::Size ThemedAvatarButton::GetPreferredSize() const { |
| + gfx::Size size = views::MenuButton::GetPreferredSize(); |
| + size.set_height(kButtonHeight); |
| + return size; |
| +} |
| + |
| +std::unique_ptr<views::Border> ThemedAvatarButton::CreateBorder( |
|
Evan Stade
2017/05/02 15:49:20
can this go back to being a file-local static?
emx
2017/05/03 17:10:59
Done.
|
| + const int normal_image_set[], |
| + const int hot_image_set[], |
| + const int pushed_image_set[]) const { |
| + std::unique_ptr<views::LabelButtonAssetBorder> border( |
| + new views::LabelButtonAssetBorder(views::Button::STYLE_TEXTBUTTON)); |
| + |
| + border->SetPainter(false, views::Button::STATE_NORMAL, |
| + views::Painter::CreateImageGridPainter(normal_image_set)); |
| + border->SetPainter(false, views::Button::STATE_HOVERED, |
| + views::Painter::CreateImageGridPainter(hot_image_set)); |
| + border->SetPainter(false, views::Button::STATE_PRESSED, |
| + views::Painter::CreateImageGridPainter(pushed_image_set)); |
| + |
| + const int kLeftRightInset = 8; |
| + const int kTopInset = 2; |
| + const int kBottomInset = 4; |
| + border->set_insets( |
| + gfx::Insets(kTopInset, kLeftRightInset, kBottomInset, kLeftRightInset)); |
| + |
| + return std::move(border); |
| +} |
| + |
| +void ThemedAvatarButton::SetButtonAvatar(int avatar_idr) { |
| + ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| + set_generic_avatar(*rb->GetImageNamed(avatar_idr).ToImageSkia()); |
| +} |