| Index: chrome/browser/ui/cocoa/image_button_cell.mm
|
| diff --git a/chrome/browser/ui/cocoa/image_button_cell.mm b/chrome/browser/ui/cocoa/image_button_cell.mm
|
| index 3223db8b3b85b97bf7aac80600ab01ccac39a69b..038fda3200fd1d8cacbdbf8eb8869a2bc9df1217 100644
|
| --- a/chrome/browser/ui/cocoa/image_button_cell.mm
|
| +++ b/chrome/browser/ui/cocoa/image_button_cell.mm
|
| @@ -58,20 +58,34 @@ const CGFloat kImageNoFocusAlpha = 0.65;
|
| [self setShowsBorderOnlyWhileMouseInside:YES];
|
| }
|
|
|
| +- (NSImage*)imageForState:(image_button_cell::ButtonState)state
|
| + view:(NSView*)controlView{
|
| + if (image_[state].type == image_button_cell::kImageId)
|
| + return [self imageForID:image_[state].imageId controlView:controlView];
|
| + return image_[state].image;
|
| +}
|
| +
|
| - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
|
| + image_button_cell::ButtonState state = [self currentButtonState];
|
| BOOL windowHasFocus = [[controlView window] isMainWindow] ||
|
| [[controlView window] isKeyWindow];
|
| CGFloat alpha = windowHasFocus ? 1.0 : kImageNoFocusAlpha;
|
| - NSImage* image = image_[[self currentButtonState]];
|
| + NSImage* image = [self imageForState:state view:controlView];
|
|
|
| if (!windowHasFocus) {
|
| + NSImage* defaultImage = [self
|
| + imageForState:image_button_cell::kDefaultStateBackground
|
| + view:controlView];
|
| + NSImage* hoverImage = [self
|
| + imageForState:image_button_cell::kHoverStateBackground
|
| + view:controlView];
|
| if ([self currentButtonState] == image_button_cell::kDefaultState &&
|
| - image_[image_button_cell::kDefaultStateBackground]) {
|
| - image = image_[image_button_cell::kDefaultStateBackground];
|
| + defaultImage) {
|
| + image = defaultImage;
|
| alpha = 1.0;
|
| } else if ([self currentButtonState] == image_button_cell::kHoverState &&
|
| - image_[image_button_cell::kHoverStateBackground]) {
|
| - image = image_[image_button_cell::kHoverStateBackground];
|
| + hoverImage) {
|
| + image = hoverImage;
|
| alpha = 1.0;
|
| }
|
| }
|
| @@ -110,9 +124,13 @@ const CGFloat kImageNoFocusAlpha = 0.65;
|
|
|
| - (void)setImageID:(NSInteger)imageID
|
| forButtonState:(image_button_cell::ButtonState)state {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - NSImage* image = imageID ? rb.GetNativeImageNamed(imageID).ToNSImage() : nil;
|
| - [self setImage:image forButtonState:state];
|
| + DCHECK_GE(state, 0);
|
| + DCHECK_LT(state, image_button_cell::kButtonStateCount);
|
| +
|
| + image_[state].type = image_button_cell::kImageId;
|
| + image_[state].image.reset();
|
| + image_[state].imageId = imageID;
|
| + [[self controlView] setNeedsDisplay:YES];
|
| }
|
|
|
| // Sets the image for the given button state using an image.
|
| @@ -120,7 +138,10 @@ const CGFloat kImageNoFocusAlpha = 0.65;
|
| forButtonState:(image_button_cell::ButtonState)state {
|
| DCHECK_GE(state, 0);
|
| DCHECK_LT(state, image_button_cell::kButtonStateCount);
|
| - image_[state].reset([image retain]);
|
| +
|
| + image_[state].type = image_button_cell::kImage;
|
| + image_[state].image.reset([image retain]);
|
| + image_[state].imageId = 0;
|
| [[self controlView] setNeedsDisplay:YES];
|
| }
|
|
|
| @@ -132,14 +153,18 @@ const CGFloat kImageNoFocusAlpha = 0.65;
|
| }
|
|
|
| - (image_button_cell::ButtonState)currentButtonState {
|
| - if (![self isEnabled] && image_[image_button_cell::kDisabledState])
|
| + bool (^has)(image_button_cell::ButtonState) =
|
| + ^(image_button_cell::ButtonState state) {
|
| + return (image_[state].type == image_button_cell::kImage) ?
|
| + image_[state].image != nil : image_[state].imageId != 0;
|
| + };
|
| + if (![self isEnabled] && has(image_button_cell::kDisabledState))
|
| return image_button_cell::kDisabledState;
|
| - else if ([self isHighlighted] && image_[image_button_cell::kPressedState])
|
| + if ([self isHighlighted] && has(image_button_cell::kPressedState))
|
| return image_button_cell::kPressedState;
|
| - else if ([self isMouseInside] && image_[image_button_cell::kHoverState])
|
| + if ([self isMouseInside] && has(image_button_cell::kHoverState))
|
| return image_button_cell::kHoverState;
|
| - else
|
| - return image_button_cell::kDefaultState;
|
| + return image_button_cell::kDefaultState;
|
| }
|
|
|
| - (NSImage*)imageForID:(NSInteger)imageID
|
|
|