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..5457908483efabc93baa352b31639fa42b754860 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].imageId) |
+ 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,12 @@ 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].image.reset(); |
+ image_[state].imageId = imageID; |
+ [[self controlView] setNeedsDisplay:YES]; |
} |
// Sets the image for the given button state using an image. |
@@ -120,7 +137,9 @@ 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].image.reset([image retain]); |
+ image_[state].imageId = 0; |
[[self controlView] setNeedsDisplay:YES]; |
} |
@@ -132,14 +151,17 @@ 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].image || image_[state].imageId; |
+ }; |
+ 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 |