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

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

Issue 229163004: [Mac] Move profile related UI from cocoa/browser to cocoa/profiles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: oops forgot a comment Created 6 years, 8 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
Index: chrome/browser/ui/cocoa/browser/avatar_button_controller.mm
diff --git a/chrome/browser/ui/cocoa/browser/avatar_button_controller.mm b/chrome/browser/ui/cocoa/browser/avatar_button_controller.mm
deleted file mode 100644
index 444356edf7157dac53b07d4dea09e7c3361ebab5..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/browser/avatar_button_controller.mm
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "chrome/browser/ui/cocoa/browser/avatar_button_controller.h"
-
-#include "base/mac/foundation_util.h"
-#include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/profiles/profiles_state.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_window.h"
-#import "chrome/browser/ui/cocoa/browser_window_controller.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-#import "ui/base/cocoa/appkit_utils.h"
-#import "ui/base/cocoa/hover_image_button.h"
-#include "ui/base/l10n/l10n_util_mac.h"
-#include "ui/base/nine_image_painter_factory.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/text_elider.h"
-
-namespace {
-
-const CGFloat kButtonPadding = 12;
-const CGFloat kButtonDefaultPadding = 5;
-const CGFloat kButtonHeight = 27;
-const CGFloat kButtonTitleImageSpacing = 10;
-const CGFloat kMaxButtonWidth = 120;
-
-const ui::NinePartImageIds kNormalBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_MAC_BUTTON_NORMAL);
-const ui::NinePartImageIds kHoverBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_MAC_BUTTON_HOVER);
-const ui::NinePartImageIds kPressedBorderImageIds =
- IMAGE_GRID(IDR_AVATAR_MAC_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();
-}
-
-} // namespace
-
-// Button cell with a custom border given by a set of nine-patch image grids.
-@interface CustomThemeButtonCell : NSButtonCell {
- @private
- BOOL isThemedWindow_;
-}
-- (void)setIsThemedWindow:(BOOL)isThemedWindow;
-@end
-
-@implementation CustomThemeButtonCell
-- (id)initWithThemedWindow:(BOOL)isThemedWindow {
- if ((self = [super init])) {
- isThemedWindow_ = isThemedWindow;
- }
- return self;
-}
-
-- (NSSize)cellSize {
- NSSize buttonSize = [super cellSize];
- buttonSize.width += 2 * kButtonPadding - 2 * kButtonDefaultPadding;
- buttonSize.height = kButtonHeight;
- return buttonSize;
-}
-
-- (NSRect)drawTitle:(NSAttributedString*)title
- withFrame:(NSRect)frame
- inView:(NSView*)controlView {
- frame.origin.x = kButtonPadding;
- // Ensure there's always a padding between the text and the image.
- frame.size.width -= kButtonTitleImageSpacing;
- return [super drawTitle:title withFrame:frame inView:controlView];
-}
-
-- (void)drawImage:(NSImage*)image
- withFrame:(NSRect)frame
- inView:(NSView*)controlView {
- // For the x-offset, we need to undo the default padding and apply the
- // new one. For the y-offset, increasing the button height means we need
- // to move the image a little down to align it nicely with the text; this
- // was chosen by visual inspection.
- frame = NSOffsetRect(frame, kButtonDefaultPadding - kButtonPadding, 2);
- [super drawImage:image withFrame:frame inView:controlView];
-}
-
-- (void)drawBezelWithFrame:(NSRect)frame
- inView:(NSView*)controlView {
- HoverState hoverState =
- [base::mac::ObjCCastStrict<HoverImageButton>(controlView) hoverState];
- 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);
-}
-
-- (void)setIsThemedWindow:(BOOL)isThemedWindow {
- isThemedWindow_ = isThemedWindow;
-}
-@end
-
-@interface AvatarButtonController (Private)
-- (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent;
-- (void)dealloc;
-- (void)themeDidChangeNotification:(NSNotification*)aNotification;
-@end
-
-@implementation AvatarButtonController
-
-- (id)initWithBrowser:(Browser*)browser {
- if ((self = [super initWithBrowser:browser])) {
- ThemeService* themeService =
- ThemeServiceFactory::GetForProfile(browser->profile());
- isThemedWindow_ = !themeService->UsingNativeTheme();
-
- HoverImageButton* hoverButton =
- [[HoverImageButton alloc] initWithFrame:NSZeroRect];
- [hoverButton setDefaultImage:GetImageFromResourceID(
- IDR_AVATAR_MAC_BUTTON_DROPARROW)];
- [hoverButton setHoverImage:GetImageFromResourceID(
- IDR_AVATAR_MAC_BUTTON_DROPARROW_HOVER)];
- [hoverButton setPressedImage:GetImageFromResourceID(
- IDR_AVATAR_MAC_BUTTON_DROPARROW_PRESSED)];
-
- button_.reset(hoverButton);
- base::scoped_nsobject<CustomThemeButtonCell> cell(
- [[CustomThemeButtonCell alloc] initWithThemedWindow:isThemedWindow_]);
- [button_ setCell:cell.get()];
- [self setView:button_];
-
- [button_ setBezelStyle:NSShadowlessSquareBezelStyle];
- [button_ setButtonType:NSMomentaryChangeButton];
- [button_ setBordered:YES];
- // This is a workaround for an issue in the HoverImageButton where the
- // button is initially sized incorrectly unless a default image is provided.
- [button_ setImage:GetImageFromResourceID(IDR_AVATAR_MAC_BUTTON_DROPARROW)];
- [button_ setImagePosition:NSImageRight];
- [button_ setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin];
- [button_ setTarget:self];
- [button_ setAction:@selector(buttonClicked:)];
-
- [self updateAvatarButtonAndLayoutParent:NO];
-
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
- [center addObserver:self
- selector:@selector(themeDidChangeNotification:)
- name:kBrowserThemeDidChangeNotification
- object:nil];
-
- }
- return self;
-}
-
-- (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [super dealloc];
-}
-
-- (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->UsingNativeTheme();
- if (isThemedWindow_ != updatedIsThemedWindow) {
- 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.
- // TODO(noms): Figure out something similar for themed windows, if possible.
- base::scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]);
- [shadow setShadowOffset:NSMakeSize(0, -1)];
- [shadow setShadowBlurRadius:0];
-
- NSColor* foregroundColor;
- if (browser_->profile()->IsGuestSession()) {
- foregroundColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.9];
- [shadow setShadowColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.4]];
- } else if (!isThemedWindow_) {
- foregroundColor = [NSColor blackColor];
- [shadow setShadowColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.7]];
- } else {
- foregroundColor = [NSColor blackColor];
- [shadow setShadowColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.4]];
- }
-
- base::scoped_nsobject<NSMutableParagraphStyle> paragraphStyle(
- [[NSMutableParagraphStyle alloc] init]);
- [paragraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
- [paragraphStyle setAlignment:NSLeftTextAlignment];
-
- NSString* buttonTitle = base::SysUTF16ToNSString(
- profiles::GetAvatarNameForProfile(browser_->profile()));
-
- base::scoped_nsobject<NSAttributedString> attributedTitle(
- [[NSAttributedString alloc]
- initWithString:buttonTitle
- attributes:@{ NSShadowAttributeName : shadow.get(),
- NSForegroundColorAttributeName : foregroundColor,
- NSParagraphStyleAttributeName : paragraphStyle }]);
- [button_ setAttributedTitle:attributedTitle];
- [button_ sizeToFit];
-
- // Truncate the title if needed.
- if (NSWidth([button_ bounds]) > kMaxButtonWidth)
- [button_ setFrameSize:NSMakeSize(kMaxButtonWidth, kButtonHeight)];
-
- if (layoutParent) {
- // Because the width of the button might have changed, the parent browser
- // frame needs to recalculate the button bounds and redraw it.
- [[BrowserWindowController
- browserWindowControllerForWindow:browser_->window()->GetNativeWindow()]
- layoutSubviews];
- }
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698