| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h" | 5 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "ui/views/view_targeter.h" | 26 #include "ui/views/view_targeter.h" |
| 27 #include "ui/views/widget/widget.h" | 27 #include "ui/views/widget/widget.h" |
| 28 | 28 |
| 29 static inline int Round(double x) { | 29 static inline int Round(double x) { |
| 30 return static_cast<int>(x + 0.5); | 30 return static_cast<int>(x + 0.5); |
| 31 } | 31 } |
| 32 | 32 |
| 33 // static | 33 // static |
| 34 const char AvatarMenuButton::kViewClassName[] = "AvatarMenuButton"; | 34 const char AvatarMenuButton::kViewClassName[] = "AvatarMenuButton"; |
| 35 | 35 |
| 36 AvatarMenuButton::AvatarMenuButton(Browser* browser, bool disabled) | 36 AvatarMenuButton::AvatarMenuButton(BrowserView* browser_view) |
| 37 : MenuButton(NULL, base::string16(), this, false), | 37 : MenuButton(NULL, base::string16(), this, false), |
| 38 browser_(browser), | 38 browser_view_(browser_view), |
| 39 disabled_(disabled), | 39 enabled_(browser_view_->IsRegularOrGuestSession()), |
| 40 is_rectangle_(false), | 40 is_rectangle_(false), |
| 41 old_height_(0), | 41 old_height_(0), |
| 42 button_on_right_(false) { | 42 button_on_right_(false) { |
| 43 // In RTL mode, the avatar icon should be looking the opposite direction. | 43 // In RTL mode, the avatar icon should be looking the opposite direction. |
| 44 EnableCanvasFlippingForRTLUI(true); | 44 EnableCanvasFlippingForRTLUI(true); |
| 45 | 45 |
| 46 SetEventTargeter( | 46 SetEventTargeter( |
| 47 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); | 47 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); |
| 48 } | 48 } |
| 49 | 49 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 void AvatarMenuButton::SetAvatarIcon(const gfx::Image& icon, | 88 void AvatarMenuButton::SetAvatarIcon(const gfx::Image& icon, |
| 89 bool is_rectangle) { | 89 bool is_rectangle) { |
| 90 icon_.reset(new gfx::Image(icon)); | 90 icon_.reset(new gfx::Image(icon)); |
| 91 button_icon_ = gfx::ImageSkia(); | 91 button_icon_ = gfx::ImageSkia(); |
| 92 is_rectangle_ = is_rectangle; | 92 is_rectangle_ = is_rectangle; |
| 93 SchedulePaint(); | 93 SchedulePaint(); |
| 94 } | 94 } |
| 95 | 95 |
| 96 // static | 96 // static |
| 97 bool AvatarMenuButton::GetAvatarImages(Profile* profile, | 97 bool AvatarMenuButton::GetAvatarImages(BrowserView* browser_view, |
| 98 bool should_show_avatar_menu, | 98 bool should_show_avatar_menu, |
| 99 gfx::Image* avatar, | 99 gfx::Image* avatar, |
| 100 gfx::Image* taskbar_badge_avatar, | 100 gfx::Image* taskbar_badge_avatar, |
| 101 bool* is_rectangle) { | 101 bool* is_rectangle) { |
| 102 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 102 const Profile* profile = browser_view->browser()->profile(); |
| 103 if (profile->GetProfileType() == Profile::GUEST_PROFILE) { | 103 if (profile->GetProfileType() == Profile::GUEST_PROFILE) { |
| 104 *avatar = rb. | 104 *avatar = ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
| 105 GetImageNamed(profiles::GetPlaceholderAvatarIconResourceID()); | 105 profiles::GetPlaceholderAvatarIconResourceID()); |
| 106 } else if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) { | 106 } else if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) { |
| 107 *avatar = rb.GetImageNamed(IDR_OTR_ICON); | 107 *avatar = gfx::Image(browser_view->GetOTRAvatarIcon()); |
| 108 // TODO(nkostylev): Allow this on ChromeOS once the ChromeOS test | 108 // TODO(nkostylev): Allow this on ChromeOS once the ChromeOS test |
| 109 // environment handles profile directories correctly. | 109 // environment handles profile directories correctly. |
| 110 #if !defined(OS_CHROMEOS) | 110 #if !defined(OS_CHROMEOS) |
| 111 bool is_badge_rectangle = false; | 111 bool is_badge_rectangle = false; |
| 112 // The taskbar badge should be the profile avatar, not the OTR avatar. | 112 // The taskbar badge should be the profile avatar, not the OTR avatar. |
| 113 AvatarMenu::GetImageForMenuButton(profile->GetPath(), | 113 AvatarMenu::GetImageForMenuButton(profile->GetPath(), |
| 114 taskbar_badge_avatar, | 114 taskbar_badge_avatar, |
| 115 &is_badge_rectangle); | 115 &is_badge_rectangle); |
| 116 #endif | 116 #endif |
| 117 } else if (should_show_avatar_menu) { | 117 } else if (should_show_avatar_menu) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 136 &is_badge_rectangle); | 136 &is_badge_rectangle); |
| 137 #endif | 137 #endif |
| 138 } | 138 } |
| 139 return true; | 139 return true; |
| 140 } | 140 } |
| 141 | 141 |
| 142 // views::ViewTargeterDelegate: | 142 // views::ViewTargeterDelegate: |
| 143 bool AvatarMenuButton::DoesIntersectRect(const views::View* target, | 143 bool AvatarMenuButton::DoesIntersectRect(const views::View* target, |
| 144 const gfx::Rect& rect) const { | 144 const gfx::Rect& rect) const { |
| 145 CHECK_EQ(target, this); | 145 CHECK_EQ(target, this); |
| 146 return !disabled_ && | 146 return enabled_ && |
| 147 views::ViewTargeterDelegate::DoesIntersectRect(target, rect); | 147 views::ViewTargeterDelegate::DoesIntersectRect(target, rect); |
| 148 } | 148 } |
| 149 | 149 |
| 150 // views::MenuButtonListener implementation | 150 // views::MenuButtonListener implementation |
| 151 void AvatarMenuButton::OnMenuButtonClicked(views::View* source, | 151 void AvatarMenuButton::OnMenuButtonClicked(views::View* source, |
| 152 const gfx::Point& point) { | 152 const gfx::Point& point) { |
| 153 if (!disabled_) | 153 if (enabled_) |
| 154 chrome::ShowAvatarMenu(browser_); | 154 chrome::ShowAvatarMenu(browser_view_->browser()); |
| 155 } | 155 } |
| OLD | NEW |