Index: chrome/browser/ui/views/avatar_label.cc |
diff --git a/chrome/browser/ui/views/avatar_label.cc b/chrome/browser/ui/views/avatar_label.cc |
index 8a6465dbed8ca2fd98fdf1ce4cd7fe12117e7082..11a7056be368f783fa056a205d32a6221fcc1b3d 100644 |
--- a/chrome/browser/ui/views/avatar_label.cc |
+++ b/chrome/browser/ui/views/avatar_label.cc |
@@ -4,8 +4,8 @@ |
#include "chrome/browser/ui/views/avatar_label.h" |
+#include "base/memory/scoped_ptr.h" |
#include "chrome/browser/themes/theme_properties.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" |
#include "grit/generated_resources.h" |
@@ -13,8 +13,49 @@ |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/base/theme_provider.h" |
-#include "ui/gfx/point.h" |
-#include "ui/gfx/rect.h" |
+#include "ui/gfx/canvas.h" |
+#include "ui/gfx/color_utils.h" |
+#include "ui/views/painter.h" |
+ |
+namespace { |
+ |
+// A special text button border for the managed user avatar label. |
+class AvatarLabelBorder: public views::TextButtonBorder { |
+ public: |
+ explicit AvatarLabelBorder(ui::ThemeProvider* theme_provider); |
+ |
+ virtual void Paint(const views::View& view, gfx::Canvas* canvas) OVERRIDE; |
+ |
+ private: |
+ scoped_ptr<views::Painter> hot_painter_; |
+ scoped_ptr<views::Painter> painter_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AvatarLabelBorder); |
+}; |
+ |
+AvatarLabelBorder::AvatarLabelBorder(ui::ThemeProvider* theme_provider) { |
+ const int kHorizontalInset = 10; |
+ const int kVerticalInset = 2; |
+ SetInsets(gfx::Insets( |
+ kVerticalInset, kHorizontalInset, kVerticalInset, kHorizontalInset)); |
+ SkColor color = theme_provider->GetColor( |
+ ThemeProperties::COLOR_MANAGED_USER_LABEL_BACKGROUND); |
+ SkColor color2 = color_utils::BlendTowardOppositeLuminance(color, 0x20); |
+ painter_.reset(views::Painter::CreateVerticalGradient(color, color2)); |
+ hot_painter_.reset(views::Painter::CreateVerticalGradient(color2, color)); |
+} |
+ |
+void AvatarLabelBorder::Paint(const views::View& view, gfx::Canvas* canvas) { |
+ const views::TextButton* button = |
+ static_cast<const views::TextButton*>(&view); |
+ if (button->state() == views::TextButton::STATE_HOVERED || |
+ button->state() == views::TextButton::STATE_PRESSED) |
+ hot_painter_->Paint(canvas, view.size()); |
+ else |
+ painter_->Paint(canvas, view.size()); |
+} |
+ |
+} // namespace |
AvatarLabel::AvatarLabel(BrowserView* browser_view, |
ui::ThemeProvider* theme_provider) |
@@ -25,13 +66,7 @@ AvatarLabel::AvatarLabel(BrowserView* browser_view, |
SetFont(ui::ResourceBundle::GetSharedInstance().GetFont( |
ui::ResourceBundle::SmallFont)); |
ClearMaxTextSize(); |
- views::TextButtonNativeThemeBorder* border = |
- new views::TextButtonNativeThemeBorder(this); |
- const int kHorizontalInset = 10; |
- const int kVerticalInset = 2; |
- border->SetInsets(gfx::Insets( |
- kVerticalInset, kHorizontalInset, kVerticalInset, kHorizontalInset)); |
- set_border(border); |
+ set_border(new AvatarLabelBorder(theme_provider)); |
UpdateLabelStyle(); |
} |
@@ -45,15 +80,12 @@ bool AvatarLabel::OnMousePressed(const ui::MouseEvent& event) { |
return true; |
} |
-void AvatarLabel::GetExtraParams(ui::NativeTheme::ExtraParams* params) const { |
- TextButton::GetExtraParams(params); |
- params->button.background_color = theme_provider_->GetColor( |
- ThemeProperties::COLOR_MANAGED_USER_LABEL_BACKGROUND); |
-} |
- |
void AvatarLabel::UpdateLabelStyle() { |
SkColor color_label = |
theme_provider_->GetColor(ThemeProperties::COLOR_MANAGED_USER_LABEL); |
SetEnabledColor(color_label); |
+ SetHighlightColor(color_label); |
+ SetHoverColor(color_label); |
+ SetDisabledColor(color_label); |
SchedulePaint(); |
} |