| Index: chrome/browser/ui/cocoa/browser/avatar_button.mm
|
| diff --git a/chrome/browser/ui/cocoa/browser/avatar_button.mm b/chrome/browser/ui/cocoa/browser/avatar_button.mm
|
| deleted file mode 100644
|
| index e2ab217e561c1860c40d8dc050876e2dc67bfcf4..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/cocoa/browser/avatar_button.mm
|
| +++ /dev/null
|
| @@ -1,174 +0,0 @@
|
| -// Copyright (c) 2011 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.h"
|
| -
|
| -#include "base/sys_string_conversions.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/profiles/profile_info_cache.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#import "chrome/browser/ui/cocoa/browser/avatar_menu_bubble_controller.h"
|
| -#import "chrome/browser/ui/cocoa/browser_window_controller.h"
|
| -#import "chrome/browser/ui/cocoa/image_utils.h"
|
| -#import "chrome/browser/ui/cocoa/menu_controller.h"
|
| -#include "chrome/common/chrome_notification_types.h"
|
| -#include "content/common/notification_service.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/gfx/image/image.h"
|
| -#include "ui/gfx/mac/nsimage_cache.h"
|
| -#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
|
| -
|
| -@interface AvatarButton (Private)
|
| -- (IBAction)buttonClicked:(id)sender;
|
| -- (NSImage*)compositeImageWithShadow:(NSImage*)image;
|
| -- (void)updateAvatar;
|
| -@end
|
| -
|
| -namespace AvatarButtonInternal {
|
| -
|
| -class Observer : public NotificationObserver {
|
| - public:
|
| - Observer(AvatarButton* button) : button_(button) {
|
| - registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
|
| - NotificationService::AllSources());
|
| - }
|
| -
|
| - // NotificationObserver:
|
| - void Observe(int type,
|
| - const NotificationSource& source,
|
| - const NotificationDetails& details) OVERRIDE {
|
| - switch (type) {
|
| - case chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED:
|
| - [button_ updateAvatar];
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - }
|
| -
|
| - private:
|
| - NotificationRegistrar registrar_;
|
| -
|
| - AvatarButton* button_; // Weak; owns this.
|
| -};
|
| -
|
| -} // namespace AvatarButtonInternal
|
| -
|
| -namespace {
|
| -
|
| -const CGFloat kMenuYOffsetAdjust = 5.0;
|
| -
|
| -} // namespace
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -@implementation AvatarButton
|
| -
|
| -- (id)initWithBrowser:(Browser*)browser {
|
| - if ((self = [super init])) {
|
| - browser_ = browser;
|
| -
|
| - // This view's single child view is a button with the same size and width as
|
| - // the parent. Set it to automatically resize to the size of this view and
|
| - // to scale the image.
|
| - button_.reset([[NSButton alloc] initWithFrame:[self bounds]]);
|
| - [button_ setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
|
| - [button_ setButtonType:NSMomentaryLightButton];
|
| - [button_ setImagePosition:NSImageOnly];
|
| - [[button_ cell] setImageScaling:NSImageScaleProportionallyDown];
|
| - [[button_ cell] setImagePosition:NSImageBelow];
|
| - // AppKit sets a title for some reason when using |-setImagePosition:|.
|
| - [button_ setTitle:nil];
|
| - [[button_ cell] setImageDimsWhenDisabled:NO];
|
| - [[button_ cell] setHighlightsBy:NSContentsCellMask];
|
| - [[button_ cell] setShowsStateBy:NSContentsCellMask];
|
| - [button_ setBordered:NO];
|
| - [button_ setTarget:self];
|
| - [button_ setAction:@selector(buttonClicked:)];
|
| - [self addSubview:button_];
|
| - [self setOpenMenuOnClick:YES];
|
| -
|
| - if (browser_->profile()->IsOffTheRecord()) {
|
| - [self setImage:gfx::GetCachedImageWithName(@"otr_icon.pdf")];
|
| - } else {
|
| - observer_.reset(new AvatarButtonInternal::Observer(self));
|
| - [self updateAvatar];
|
| - }
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)setOpenMenuOnClick:(BOOL)flag {
|
| - [button_ setEnabled:flag];
|
| -}
|
| -
|
| -- (void)setImage:(NSImage*)image {
|
| - [button_ setImage:[self compositeImageWithShadow:image]];
|
| -}
|
| -
|
| -// Private /////////////////////////////////////////////////////////////////////
|
| -
|
| -- (IBAction)buttonClicked:(id)sender {
|
| - DCHECK_EQ(button_.get(), sender);
|
| -
|
| - NSPoint point = NSMakePoint(NSMidX([self bounds]),
|
| - NSMinY([self bounds]) + kMenuYOffsetAdjust);
|
| - point = [self convertPoint:point toView:nil];
|
| - point = [[self window] convertBaseToScreen:point];
|
| -
|
| - // |menu| will automatically release itself on close.
|
| - AvatarMenuBubbleController* menu =
|
| - [[AvatarMenuBubbleController alloc] initWithBrowser:browser_
|
| - anchoredAt:point];
|
| - [menu showWindow:self];
|
| -}
|
| -
|
| -// This will take in an original image and redraw it with a shadow.
|
| -- (NSImage*)compositeImageWithShadow:(NSImage*)image {
|
| - gfx::ScopedNSGraphicsContextSaveGState scopedGState;
|
| -
|
| - scoped_nsobject<NSImage> destination(
|
| - [[NSImage alloc] initWithSize:[image size]]);
|
| -
|
| - NSRect destRect = NSZeroRect;
|
| - destRect.size = [destination size];
|
| -
|
| - [destination lockFocus];
|
| -
|
| - scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]);
|
| - [shadow.get() setShadowColor:[NSColor colorWithCalibratedWhite:0.0
|
| - alpha:0.75]];
|
| - [shadow.get() setShadowOffset:NSMakeSize(0, 0)];
|
| - [shadow.get() setShadowBlurRadius:3.0];
|
| - [shadow.get() set];
|
| -
|
| - [image drawInRect:destRect
|
| - fromRect:NSZeroRect
|
| - operation:NSCompositeSourceOver
|
| - fraction:1.0
|
| - neverFlipped:YES];
|
| -
|
| - [destination unlockFocus];
|
| -
|
| - return [destination.release() autorelease];
|
| -}
|
| -
|
| -// Updates the avatar information from the profile cache.
|
| -- (void)updateAvatar {
|
| - ProfileInfoCache& cache =
|
| - g_browser_process->profile_manager()->GetProfileInfoCache();
|
| - size_t index =
|
| - cache.GetIndexOfProfileWithPath(browser_->profile()->GetPath());
|
| - if (index != std::string::npos) {
|
| - [self setImage:cache.GetAvatarIconOfProfileAtIndex(index).ToNSImage()];
|
| - const string16& name = cache.GetNameOfProfileAtIndex(index);
|
| - [button_ setToolTip:base::SysUTF16ToNSString(name)];
|
| - }
|
| -}
|
| -
|
| -@end
|
|
|