summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/profiles/new_avatar_button.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/views/profiles/new_avatar_button.cc')
-rw-r--r--chrome/browser/ui/views/profiles/new_avatar_button.cc76
1 files changed, 48 insertions, 28 deletions
diff --git a/chrome/browser/ui/views/profiles/new_avatar_button.cc b/chrome/browser/ui/views/profiles/new_avatar_button.cc
index 2e3647c..ef9a22e 100644
--- a/chrome/browser/ui/views/profiles/new_avatar_button.cc
+++ b/chrome/browser/ui/views/profiles/new_avatar_button.cc
@@ -31,8 +31,8 @@ scoped_ptr<views::Border> CreateBorder(const int normal_image_set[],
border->SetPainter(false, views::Button::STATE_PRESSED,
views::Painter::CreateImageGridPainter(pushed_image_set));
- const int kLeftRightInset = 10;
- const int kTopInset = 0;
+ const int kLeftRightInset = 8;
+ const int kTopInset = 2;
const int kBottomInset = 4;
border->set_insets(gfx::Insets(kTopInset, kLeftRightInset,
kBottomInset, kLeftRightInset));
@@ -42,16 +42,12 @@ scoped_ptr<views::Border> CreateBorder(const int normal_image_set[],
} // namespace
-NewAvatarButton::NewAvatarButton(
- views::ButtonListener* listener,
- const base::string16& profile_name,
- AvatarButtonStyle button_style,
- Browser* browser)
- : MenuButton(listener,
- profiles::GetAvatarButtonTextForProfile(browser->profile()),
- NULL,
- true),
+NewAvatarButton::NewAvatarButton(views::ButtonListener* listener,
+ AvatarButtonStyle button_style,
+ Browser* browser)
+ : LabelButton(listener, base::string16()),
browser_(browser),
+ has_auth_error_(false),
suppress_mouse_released_action_(false) {
set_animate_on_state_change(false);
SetTextColor(views::Button::STATE_NORMAL, SK_ColorWHITE);
@@ -60,6 +56,7 @@ NewAvatarButton::NewAvatarButton(
SetTextShadows(gfx::ShadowValues(10,
gfx::ShadowValue(gfx::Point(), 1.0f, SK_ColorDKGRAY)));
SetTextSubpixelRenderingEnabled(false);
+ SetHorizontalAlignment(gfx::ALIGN_CENTER);
// The largest text height that fits in the button. If the font list height
// is larger than this, it will be shrunk to match it.
@@ -74,8 +71,8 @@ NewAvatarButton::NewAvatarButton(
const int kPushedImageSet[] = IMAGE_GRID(IDR_AVATAR_THEMED_BUTTON_PRESSED);
SetBorder(CreateBorder(kNormalImageSet, kHotImageSet, kPushedImageSet));
- set_menu_marker(
- rb->GetImageNamed(IDR_AVATAR_THEMED_BUTTON_DROPARROW).ToImageSkia());
+ generic_avatar_ =
+ *rb->GetImageNamed(IDR_AVATAR_THEMED_BUTTON_AVATAR).ToImageSkia();
#if defined(OS_WIN)
} else if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
const int kNormalImageSet[] = IMAGE_GRID(IDR_AVATAR_METRO_BUTTON_NORMAL);
@@ -83,8 +80,8 @@ NewAvatarButton::NewAvatarButton(
const int kPushedImageSet[] = IMAGE_GRID(IDR_AVATAR_METRO_BUTTON_PRESSED);
SetBorder(CreateBorder(kNormalImageSet, kHotImageSet, kPushedImageSet));
- set_menu_marker(
- rb->GetImageNamed(IDR_AVATAR_METRO_BUTTON_DROPARROW).ToImageSkia());
+ generic_avatar_ =
+ *rb->GetImageNamed(IDR_AVATAR_METRO_BUTTON_AVATAR).ToImageSkia();
#endif
} else {
const int kNormalImageSet[] = IMAGE_GRID(IDR_AVATAR_GLASS_BUTTON_NORMAL);
@@ -92,8 +89,8 @@ NewAvatarButton::NewAvatarButton(
const int kPushedImageSet[] = IMAGE_GRID(IDR_AVATAR_GLASS_BUTTON_PRESSED);
SetBorder(CreateBorder(kNormalImageSet, kHotImageSet, kPushedImageSet));
- set_menu_marker(
- rb->GetImageNamed(IDR_AVATAR_GLASS_BUTTON_DROPARROW).ToImageSkia());
+ generic_avatar_ =
+ *rb->GetImageNamed(IDR_AVATAR_GLASS_BUTTON_AVATAR).ToImageSkia();
}
g_browser_process->profile_manager()->GetProfileInfoCache().AddObserver(this);
@@ -104,9 +101,11 @@ NewAvatarButton::NewAvatarButton(
profiles::GetSigninErrorController(browser_->profile());
if (error) {
error->AddObserver(this);
+ // This calls UpdateAvatarButtonAndRelayoutParent().
OnErrorChanged();
+ } else {
+ UpdateAvatarButtonAndRelayoutParent();
}
-
SchedulePaint();
}
@@ -122,14 +121,14 @@ NewAvatarButton::~NewAvatarButton() {
bool NewAvatarButton::OnMousePressed(const ui::MouseEvent& event) {
// Prevent the bubble from being re-shown if it's already showing.
suppress_mouse_released_action_ = ProfileChooserView::IsShowing();
- return MenuButton::OnMousePressed(event);
+ return LabelButton::OnMousePressed(event);
}
void NewAvatarButton::OnMouseReleased(const ui::MouseEvent& event) {
if (suppress_mouse_released_action_)
suppress_mouse_released_action_ = false;
else
- MenuButton::OnMouseReleased(event);
+ LabelButton::OnMouseReleased(event);
}
void NewAvatarButton::OnProfileAdded(const base::FilePath& profile_path) {
@@ -159,24 +158,45 @@ void NewAvatarButton::OnProfileSupervisedUserIdChanged(
}
void NewAvatarButton::OnErrorChanged() {
- gfx::ImageSkia icon;
-
// If there is an error, show an warning icon.
const SigninErrorController* error =
profiles::GetSigninErrorController(browser_->profile());
- if (error && error->HasError()) {
- icon = *ui::ResourceBundle::GetSharedInstance().GetImageNamed(
- IDR_ICON_PROFILES_AVATAR_BUTTON_ERROR).ToImageSkia();
- }
+ has_auth_error_ = error && error->HasError();
- SetImage(views::Button::STATE_NORMAL, icon);
UpdateAvatarButtonAndRelayoutParent();
}
void NewAvatarButton::UpdateAvatarButtonAndRelayoutParent() {
+ const ProfileInfoCache& cache =
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+
+ // If we have a single local profile, then use the generic avatar
+ // button instead of the profile name. Never use the generic button if
+ // the active profile is Guest.
+ bool use_generic_button = (!browser_->profile()->IsGuestSession() &&
+ cache.GetNumberOfProfiles() == 1 &&
+ cache.GetUserNameOfProfileAtIndex(0).empty());
+
+ SetText(use_generic_button ? base::string16() :
+ profiles::GetAvatarButtonTextForProfile(browser_->profile()));
// We want the button to resize if the new text is shorter.
- SetText(profiles::GetAvatarButtonTextForProfile(browser_->profile()));
SetMinSize(gfx::Size());
+
+ if (use_generic_button) {
+ SetImage(views::Button::STATE_NORMAL, generic_avatar_);
+ } else if (has_auth_error_) {
+ SetImage(views::Button::STATE_NORMAL,
+ *ui::ResourceBundle::GetSharedInstance().GetImageNamed(
+ IDR_ICON_PROFILES_AVATAR_BUTTON_ERROR).ToImageSkia());
+ } else {
+ SetImage(views::Button::STATE_NORMAL, gfx::ImageSkia());
+ }
+
+ // If we are not using the generic button, then reset the spacing between
+ // the text and the possible authentication error icon.
+ const int kDefaultImageTextSpacing = 5;
+ SetImageLabelSpacing(use_generic_button ? 0 : kDefaultImageTextSpacing);
+
InvalidateLayout();
// Because the width of the button might have changed, the parent browser