Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2517)

Unified Diff: chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm

Issue 2369663002: [Material][Mac] Update User Account Button (Closed)
Patch Set: Comment update Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm
index 032a3123e16a992770ad0845366e0ad5a34a5fe4..af84354719a78f3304d6657a3e054c7848745b6e 100644
--- a/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm
@@ -19,6 +19,7 @@
#include "chrome/browser/ui/cocoa/l10n_util.h"
#import "chrome/browser/ui/cocoa/profiles/avatar_button.h"
#include "chrome/grit/generated_resources.h"
+#import "chrome/browser/themes/theme_properties.h"
#include "chrome/grit/theme_resources.h"
#include "components/signin/core/common/profile_management_switches.h"
#include "skia/ext/skia_utils_mac.h"
@@ -35,48 +36,20 @@
namespace {
-const ui::NinePartImageIds kNormalBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_NATIVE_BUTTON_NORMAL);
-const ui::NinePartImageIds kHoverBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_NATIVE_BUTTON_HOVER);
-const ui::NinePartImageIds kPressedBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_NATIVE_BUTTON_PRESSED);
-const ui::NinePartImageIds kThemedBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_THEMED_MAC_BUTTON_NORMAL);
-
-NSImage* GetImageFromResourceID(int resourceId) {
- return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
- resourceId).ToNSImage();
-}
-
-const SkColor kMaterialButtonHoverColor = SkColorSetARGB(20, 0, 0, 0);
-const SkColor kMaterialButtonPressedColor = SkColorSetARGB(31, 0, 0, 0);
-const SkColor kMaterialAvatarIconColor = SkColorSetRGB(0x5a, 0x5a, 0x5a);
-
-CGFloat ButtonHeight() {
- const CGFloat kButtonHeight = 28;
- const CGFloat kMaterialButtonHeight = 24;
- return ui::MaterialDesignController::IsModeMaterial() ? kMaterialButtonHeight
- : kButtonHeight;
-}
-
-// NSButtons have a default padding of 5px. Non-MD buttons should have a
-// padding of 8px. Meanwhile, MD buttons should have a padding of 6px.
-CGFloat ButtonExtraPadding() {
- const CGFloat kDefaultPadding = 5;
- const CGFloat kButtonExtraPadding = 8 - kDefaultPadding;
- const CGFloat kMaterialButtonExtraPadding = 6 - kDefaultPadding;
+const SkColor kButtonHoverColor = SkColorSetARGB(20, 0, 0, 0);
+const SkColor kButtonPressedColor = SkColorSetARGB(31, 0, 0, 0);
+const SkColor kAvatarIconColor = SkColorSetRGB(0x5a, 0x5a, 0x5a);
- return ui::MaterialDesignController::IsModeMaterial()
- ? kMaterialButtonExtraPadding
- : kButtonExtraPadding;
-}
+// NSButtons have a default padding of 5px. The avatar buttons should have a
+// padding of 6px.
+const CGFloat kButtonHeight = 24;
+const CGFloat kButtonExtraPadding = 6 - 5;
-// Extra padding for the MD signed out avatar button.
-const CGFloat kMaterialSignedOutWidthPadding = 2;
+// Extra padding for the signed out avatar button.
+const CGFloat kSignedOutWidthPadding = 2;
-// Kern value for the MD avatar button title.
-const CGFloat kMaterialTitleKern = 0.25;
+// Kern value for the avatar button title.
+const CGFloat kTitleKern = 0.25;
} // namespace
@@ -106,19 +79,17 @@ const CGFloat kMaterialTitleKern = 0.25;
// An image and no error means we are drawing the generic button, which
// is square. Otherwise, we are displaying the profile's name and an
// optional authentication error icon.
- if ([self image] && !hasError_) {
- buttonSize.width = ButtonHeight();
- if (ui::MaterialDesignController::IsModeMaterial())
- buttonSize.width += kMaterialSignedOutWidthPadding;
- } else {
- buttonSize.width += 2 * ButtonExtraPadding();
- }
- buttonSize.height = ButtonHeight();
+ if ([self image] && !hasError_)
+ buttonSize.width = kButtonHeight + kSignedOutWidthPadding;
+ else
+ buttonSize.width += 2 * kButtonExtraPadding;
+
+ buttonSize.height = kButtonHeight;
return buttonSize;
}
- (void)drawInteriorWithFrame:(NSRect)frame inView:(NSView*)controlView {
- NSRect frameAfterPadding = NSInsetRect(frame, ButtonExtraPadding(), 0);
+ NSRect frameAfterPadding = NSInsetRect(frame, kButtonExtraPadding, 0);
[super drawInteriorWithFrame:frameAfterPadding inView:controlView];
}
@@ -138,31 +109,18 @@ const CGFloat kMaterialTitleKern = 0.25;
HoverState hoverState =
[base::mac::ObjCCastStrict<AvatarButton>(controlView) hoverState];
- if (ui::MaterialDesignController::IsModeMaterial()) {
- NSColor* backgroundColor = nil;
- if (hoverState == kHoverStateMouseDown) {
- backgroundColor = skia::SkColorToSRGBNSColor(kMaterialButtonPressedColor);
- } else if (hoverState == kHoverStateMouseOver) {
- backgroundColor = skia::SkColorToSRGBNSColor(kMaterialButtonHoverColor);
- }
-
- if (backgroundColor) {
- [backgroundColor set];
- NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:frame
- xRadius:2.0f
- yRadius:2.0f];
- [path fill];
- }
- } else {
- ui::NinePartImageIds imageIds = kNormalBorderImageIds;
- if (isThemedWindow_)
- imageIds = kThemedBorderImageIds;
-
- if (hoverState == kHoverStateMouseDown)
- imageIds = kPressedBorderImageIds;
- else if (hoverState == kHoverStateMouseOver)
- imageIds = kHoverBorderImageIds;
- ui::DrawNinePartImage(frame, imageIds, NSCompositeSourceOver, 1.0, true);
+ NSColor* backgroundColor = nil;
+ if (hoverState == kHoverStateMouseDown)
+ backgroundColor = skia::SkColorToSRGBNSColor(kButtonPressedColor);
+ else if (hoverState == kHoverStateMouseOver)
+ backgroundColor = skia::SkColorToSRGBNSColor(kButtonHoverColor);
+
+ if (backgroundColor) {
+ [backgroundColor set];
+ NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:frame
+ xRadius:2.0f
+ yRadius:2.0f];
+ [path fill];
}
}
@@ -219,8 +177,7 @@ const CGFloat kMaterialTitleKern = 0.25;
[avatarButton setBezelStyle:NSShadowlessSquareBezelStyle];
[avatarButton setButtonType:NSMomentaryChangeButton];
- if (switches::IsMaterialDesignUserMenu())
- [[avatarButton cell] setHighlightsBy:NSNoCellMask];
+ [[avatarButton cell] setHighlightsBy:NSNoCellMask];
[avatarButton setBordered:YES];
if (cocoa_l10n_util::ShouldDoExperimentalRTLLayout())
@@ -251,31 +208,22 @@ const CGFloat kMaterialTitleKern = 0.25;
}
- (void)themeDidChangeNotification:(NSNotification*)aNotification {
- // Redraw the button if the window has switched between themed and native.
ThemeService* themeService =
ThemeServiceFactory::GetForProfile(browser_->profile());
BOOL updatedIsThemedWindow = !themeService->UsingSystemTheme();
- if (isThemedWindow_ != updatedIsThemedWindow) {
- isThemedWindow_ = updatedIsThemedWindow;
- [[button_ cell] setIsThemedWindow:isThemedWindow_];
- [self updateAvatarButtonAndLayoutParent:YES];
- }
+ isThemedWindow_ = updatedIsThemedWindow;
+ [[button_ cell] setIsThemedWindow:isThemedWindow_];
+ [self updateAvatarButtonAndLayoutParent:YES];
}
- (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent {
- // The button text has a black foreground and a white drop shadow for regular
- // windows, and a light text with a dark drop shadow for guest windows
- // which are themed with a dark background. If we're using MD, then there
- // should be no drop shadows.
- BOOL isMaterial = ui::MaterialDesignController::IsModeMaterial();
-
+ // The button text has a black foreground. If the window is themed, then the
+ // text color should match the active tab's text color.
NSColor* foregroundColor;
- if (browser_->profile()->IsGuestSession() && isMaterial)
- foregroundColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.9];
- else if (!isThemedWindow_)
- foregroundColor = [NSColor blackColor];
- else
- foregroundColor = [NSColor blackColor];
+ const ui::ThemeProvider* theme =
+ &ThemeService::GetThemeProviderForProfile(browser_->profile());
+ foregroundColor = theme ? theme->GetNSColor(ThemeProperties::COLOR_TAB_TEXT)
+ : [NSColor blackColor];
shrike 2016/09/28 21:35:30 Seems like you still need to handle the case where
spqchan 2016/09/28 21:39:36 I don't think that's necessary since Guest Session
shrike 2016/09/28 23:58:50 The only thing is the text is drawn specially (in
ProfileAttributesStorage& storage =
g_browser_process->profile_manager()->GetProfileAttributesStorage();
@@ -296,38 +244,20 @@ const CGFloat kMaterialTitleKern = 0.25;
base::mac::ObjCCastStrict<AvatarButton>(button_);
if (useGenericButton) {
- if (isMaterial) {
- NSImage* avatarIcon = NSImageFromImageSkia(
- gfx::CreateVectorIcon(gfx::VectorIconId::USER_ACCOUNT_AVATAR, 18,
- kMaterialAvatarIconColor));
- [button setDefaultImage:avatarIcon];
- [button setHoverImage:nil];
- [button setPressedImage:nil];
- } else {
- [button setDefaultImage:GetImageFromResourceID(
- IDR_AVATAR_NATIVE_BUTTON_AVATAR)];
- [button setHoverImage:GetImageFromResourceID(
- IDR_AVATAR_NATIVE_BUTTON_AVATAR_HOVER)];
- [button setPressedImage:GetImageFromResourceID(
- IDR_AVATAR_NATIVE_BUTTON_AVATAR_PRESSED)];
- // This is a workaround for an issue in the HoverImageButton where the
- // button is initially sized incorrectly unless a default image is
- // provided.
- // See crbug.com/298501.
- [button setImage:GetImageFromResourceID(IDR_AVATAR_NATIVE_BUTTON_AVATAR)];
- }
+ NSImage* avatarIcon = NSImageFromImageSkia(gfx::CreateVectorIcon(
+ gfx::VectorIconId::USER_ACCOUNT_AVATAR, 18, kAvatarIconColor));
+ [button setDefaultImage:avatarIcon];
+ [button setHoverImage:nil];
+ [button setPressedImage:nil];
[button setImagePosition:NSImageOnly];
} else if (hasError_) {
- NSImage* errorIcon =
- isMaterial
- ? NSImageFromImageSkia(gfx::CreateVectorIcon(
- gfx::VectorIconId::SYNC_PROBLEM, 16, gfx::kGoogleRed700))
- : GetImageFromResourceID(IDR_ICON_PROFILES_AVATAR_BUTTON_ERROR);
+ NSImage* errorIcon = NSImageFromImageSkia(gfx::CreateVectorIcon(
+ gfx::VectorIconId::SYNC_PROBLEM, 16, gfx::kGoogleRed700));
[button setDefaultImage:errorIcon];
[button setHoverImage:nil];
[button setPressedImage:nil];
[button setImage:errorIcon];
- [button setImagePosition:isMaterial ? NSImageLeft : NSImageRight];
+ [button setImagePosition:NSImageLeft];
} else {
[button setDefaultImage:nil];
[button setHoverImage:nil];
@@ -339,39 +269,16 @@ const CGFloat kMaterialTitleKern = 0.25;
[[NSMutableParagraphStyle alloc] init]);
[paragraphStyle setAlignment:NSLeftTextAlignment];
- if (isMaterial) {
- base::scoped_nsobject<NSAttributedString> attributedTitle(
- [[NSAttributedString alloc]
- initWithString:buttonTitle
- attributes:@{
- NSForegroundColorAttributeName : foregroundColor,
- NSParagraphStyleAttributeName : paragraphStyle,
- NSKernAttributeName :
- [NSNumber numberWithFloat:kMaterialTitleKern]
- }]);
- [button_ setAttributedTitle:attributedTitle];
- } else {
- // Create the white drop shadow.
- base::scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]);
- [shadow setShadowOffset:NSMakeSize(0, -1)];
- [shadow setShadowBlurRadius:0];
- if (browser_->profile()->IsGuestSession())
- [shadow setShadowColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.4]];
- else if (!isThemedWindow_)
- [shadow setShadowColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.7]];
- else
- [shadow setShadowColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.4]];
-
- base::scoped_nsobject<NSAttributedString> attributedTitle(
- [[NSAttributedString alloc]
- initWithString:buttonTitle
- attributes:@{
- NSShadowAttributeName : shadow.get(),
- NSForegroundColorAttributeName : foregroundColor,
- NSParagraphStyleAttributeName : paragraphStyle
- }]);
- [button_ setAttributedTitle:attributedTitle];
- }
+ base::scoped_nsobject<NSAttributedString> attributedTitle(
+ [[NSAttributedString alloc]
+ initWithString:buttonTitle
+ attributes:@{
+ NSForegroundColorAttributeName : foregroundColor,
+ NSParagraphStyleAttributeName : paragraphStyle,
+ NSKernAttributeName : [NSNumber numberWithFloat:kTitleKern]
+ }]);
+ [button_ setAttributedTitle:attributedTitle];
+
[button_ sizeToFit];
if (layoutParent) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698