Chromium Code Reviews| Index: chrome/browser/ui/views/profiles/profile_chooser_view.cc |
| diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc |
| index 4cb0ca6cf201d885d0c5d6d9755ad8245dc36ddc..a2cab62517c2b9ec77653d17f87c60feafdaddf3 100644 |
| --- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc |
| +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc |
| @@ -23,6 +23,8 @@ |
| #include "chrome/browser/signin/signin_ui_util.h" |
| #include "chrome/browser/sync/profile_sync_service_factory.h" |
| #include "chrome/browser/sync/sync_ui_util.h" |
| +#include "chrome/browser/themes/theme_service.h" |
| +#include "chrome/browser/themes/theme_service_factory.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/browser_dialogs.h" |
| @@ -185,9 +187,15 @@ views::ImageButton* CreateBackButton(views::ButtonListener* listener) { |
| // A custom button that allows for setting a background color when hovered over. |
| class BackgroundColorHoverButton : public views::LabelButton { |
| public: |
| - BackgroundColorHoverButton(views::ButtonListener* listener, |
| + BackgroundColorHoverButton(ProfileChooserView* profile_chooser_view, |
| const base::string16& text) |
| - : views::LabelButton(listener, text) { |
| + : views::LabelButton(profile_chooser_view, text), |
| + profile_chooser_view_(profile_chooser_view), |
| + state_(views::Button::STATE_NORMAL), |
| + title_(nullptr), |
| + normal_title_color_(SK_ColorRED), |
| + subtitle_(nullptr), |
| + normal_subtitle_color_(SK_ColorRED) { |
| SetImageLabelSpacing(switches::IsMaterialDesignUserMenu() |
| ? (kMaterialMenuEdgeMargin - 2) |
| : views::kItemLabelSpacing); |
| @@ -202,25 +210,69 @@ class BackgroundColorHoverButton : public views::LabelButton { |
| } |
| } |
| - BackgroundColorHoverButton(views::ButtonListener* listener, |
| + BackgroundColorHoverButton(ProfileChooserView* profile_chooser_view, |
| const base::string16& text, |
| const gfx::ImageSkia& icon) |
| - : BackgroundColorHoverButton(listener, text) { |
| + : BackgroundColorHoverButton(profile_chooser_view, text) { |
| SetMinSize(gfx::Size( |
| icon.width(), kButtonHeight + views::kRelatedControlVerticalSpacing)); |
| SetImage(STATE_NORMAL, icon); |
| } |
| + void set_title(views::Label* label) { title_ = label; } |
|
sky
2017/02/06 22:56:41
Document what title and subtitle are for. At first
Tom (Use chromium acct)
2017/02/07 00:45:24
Done.
|
| + |
| + void set_subtitle(views::Label* label) { subtitle_ = label; } |
| + |
| ~BackgroundColorHoverButton() override {} |
| private: |
| - // views::LabelButton: |
| - void OnPaint(gfx::Canvas* canvas) override { |
| - if ((state() == STATE_PRESSED) || |
| - (state() == STATE_HOVERED)) { |
| - canvas->DrawColor(profiles::kHoverColor); |
| + ProfileChooserView* profile_chooser_view_; |
|
sky
2017/02/06 22:56:40
functions then members.
Tom (Use chromium acct)
2017/02/07 00:45:24
Done.
|
| + |
| + ButtonState state_; |
| + |
| + views::Label* title_; |
| + SkColor normal_title_color_; |
| + |
| + views::Label* subtitle_; |
| + SkColor normal_subtitle_color_; |
| + |
| + // views::CustomButton: |
| + void StateChanged() override { |
| + LabelButton::StateChanged(); |
| + |
| + views::Label* title = title_ ? title_ : label(); |
| + |
| + bool was_prelight = state_ == STATE_HOVERED || state_ == STATE_PRESSED; |
| + bool is_prelight = state() == STATE_HOVERED || state() == STATE_PRESSED; |
| + if (was_prelight && !is_prelight) { |
|
sky
2017/02/06 22:56:40
This code is fairly complex and warrants a descrip
Tom (Use chromium acct)
2017/02/07 00:45:24
Done.
|
| + set_background(nullptr); |
| + title->SetEnabledColor(normal_title_color_); |
| + if (subtitle_) |
| + subtitle_->SetDisabledColor(normal_subtitle_color_); |
| + } else if (!was_prelight && is_prelight) { |
| + SkColor bg_color = profiles::kHoverColor; |
| + normal_title_color_ = title->enabled_color(); |
|
sky
2017/02/06 22:56:40
Do you have to keep caching the colors? Can you as
Tom (Use chromium acct)
2017/02/07 00:45:24
Done.
|
| + if (subtitle_) |
| + normal_subtitle_color_ = subtitle_->disabled_color(); |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| + if (ThemeServiceFactory::GetForProfile( |
| + profile_chooser_view_->browser()->profile()) |
| + ->UsingSystemTheme()) { |
| + // When using the system (GTK) theme, use the selected menuitem colors. |
| + bg_color = GetNativeTheme()->GetSystemColor( |
| + ui::NativeTheme::kColorId_FocusedMenuItemBackgroundColor); |
| + title->SetEnabledColor(GetNativeTheme()->GetSystemColor( |
| + ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor)); |
| + if (subtitle_) { |
| + subtitle_->SetDisabledColor(GetNativeTheme()->GetSystemColor( |
| + ui::NativeTheme::kColorId_MenuItemSubtitleColor)); |
| + } |
| + } |
| +#endif |
| + set_background(views::Background::CreateSolidBackground(bg_color)); |
| } |
| - LabelButton::OnPaint(canvas); |
| + |
| + state_ = state(); |
|
sky
2017/02/06 22:56:41
You shouldn't have to cache the old state. StateCh
Tom (Use chromium acct)
2017/02/07 00:45:24
Done.
|
| } |
| DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton); |
| @@ -1671,8 +1723,9 @@ views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView( |
| views::kRelatedControlVerticalSpacing, 0)); |
| // Container for the profile photo and avatar/user name. |
| - current_profile_card_ = |
| + BackgroundColorHoverButton* current_profile_card = |
| new BackgroundColorHoverButton(this, base::string16()); |
| + current_profile_card_ = current_profile_card; |
| // Profile picture, left-aligned. |
| EditableProfilePhoto* current_profile_photo = new EditableProfilePhoto( |
| @@ -1681,6 +1734,7 @@ views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView( |
| // Profile name, left-aligned to the right of profile icon. |
| views::Label* current_profile_name = new views::Label( |
| profiles::GetAvatarNameForProfile(browser_->profile()->GetPath())); |
| + current_profile_card->set_title(current_profile_name); |
| current_profile_name->SetFontList( |
| ui::ResourceBundle::GetSharedInstance().GetFontListWithDelta( |
| 1, gfx::Font::FontStyle::NORMAL, gfx::Font::Weight::MEDIUM)); |
| @@ -1730,6 +1784,7 @@ views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView( |
| view->AddChildView(manage_accounts_button_); |
| } else { |
| views::Label* email_label = new views::Label(avatar_item.username); |
| + current_profile_card->set_subtitle(email_label); |
| email_label->SetElideBehavior(gfx::ELIDE_EMAIL); |
| email_label->SetEnabled(false); |
| email_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |