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()); |
+} |