diff options
Diffstat (limited to 'chrome/browser/ui/views/profiles/new_avatar_button.cc')
-rw-r--r-- | chrome/browser/ui/views/profiles/new_avatar_button.cc | 76 |
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 |