diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-22 00:00:43 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-22 00:00:43 +0000 |
commit | 3ed7c0dc57140d053957769c0bad1f7925dff2e7 (patch) | |
tree | ec7a2cedee0f0b1b4b99cf89570823ea3ae4652d | |
parent | 12564d651328ff711ad32a57c3a2093bfcc8a49a (diff) | |
download | chromium_src-3ed7c0dc57140d053957769c0bad1f7925dff2e7.zip chromium_src-3ed7c0dc57140d053957769c0bad1f7925dff2e7.tar.gz chromium_src-3ed7c0dc57140d053957769c0bad1f7925dff2e7.tar.bz2 |
Merge 53181 - Unblackify the upgrade ball.
BUG=http://crbug.com/49370
TEST=as in bug
Review URL: http://codereview.chromium.org/3047005
TBR=avi@chromium.org
Review URL: http://codereview.chromium.org/3012016
git-svn-id: svn://svn.chromium.org/chrome/branches/472/src@53278 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/cocoa/gradient_button_cell.h | 7 | ||||
-rw-r--r-- | chrome/browser/cocoa/gradient_button_cell.mm | 21 | ||||
-rw-r--r-- | chrome/browser/cocoa/toolbar_controller.mm | 36 |
3 files changed, 48 insertions, 16 deletions
diff --git a/chrome/browser/cocoa/gradient_button_cell.h b/chrome/browser/cocoa/gradient_button_cell.h index 44ce2c1..5e29878 100644 --- a/chrome/browser/cocoa/gradient_button_cell.h +++ b/chrome/browser/cocoa/gradient_button_cell.h @@ -41,6 +41,7 @@ typedef NSInteger ButtonType; CGFloat hoverAlpha_; // 0-1. Controls the alpha during mouse hover NSTimeInterval lastHoverUpdate_; scoped_nsobject<NSGradient> gradient_; + scoped_nsobject<NSImage> overlayImage_; } // Turn off theming. Temporary work-around. @@ -66,7 +67,11 @@ typedef NSInteger ButtonType; - (NSBezierPath*)clipPathForFrame:(NSRect)cellFrame inView:(NSView*)controlView; -@property(assign, nonatomic)CGFloat hoverAlpha; +@property(assign, nonatomic) CGFloat hoverAlpha; + +// An image that will be drawn after the normal content of the button cell, +// overlaying it. Never themed. +@property(retain, nonatomic) NSImage* overlayImage; @end @interface GradientButtonCell(TestingAPI) diff --git a/chrome/browser/cocoa/gradient_button_cell.mm b/chrome/browser/cocoa/gradient_button_cell.mm index 4c3eaea..5fb8c29 100644 --- a/chrome/browser/cocoa/gradient_button_cell.mm +++ b/chrome/browser/cocoa/gradient_button_cell.mm @@ -128,6 +128,15 @@ static const NSTimeInterval kAnimationHideDuration = 0.4; shouldTheme_ = shouldTheme; } +- (NSImage*)overlayImage { + return overlayImage_.get(); +} + +- (void)setOverlayImage:(NSImage*)image { + overlayImage_.reset([image retain]); + [[self controlView] setNeedsDisplay:YES]; +} + - (NSBackgroundStyle)interiorBackgroundStyle { // Never lower the interior, since that just leads to a weird shadow which can // often interact badly with the theme. @@ -427,8 +436,8 @@ static const NSTimeInterval kAnimationHideDuration = 0.4; NSRectFillUsingOperation(cellFrame, NSCompositeSourceAtop); } } - CGContextEndTransparencyLayer(context); + [NSGraphicsContext restoreGraphicsState]; } else { // NSCell draws these uncentered for some reason, probably because of the @@ -436,6 +445,16 @@ static const NSTimeInterval kAnimationHideDuration = 0.4; [super drawInteriorWithFrame:NSOffsetRect(cellFrame, 0, 1) inView:controlView]; } + + if (overlayImage_) { + NSRect imageRect = NSZeroRect; + imageRect.size = [overlayImage_ size]; + [overlayImage_ drawInRect:[self imageRectForBounds:cellFrame] + fromRect:imageRect + operation:NSCompositeSourceOver + fraction:[self isEnabled] ? 1.0 : 0.5 + neverFlipped:YES]; + } } - (NSBezierPath*)clipPathForFrame:(NSRect)cellFrame diff --git a/chrome/browser/cocoa/toolbar_controller.mm b/chrome/browser/cocoa/toolbar_controller.mm index bacb068..a77e2a2 100644 --- a/chrome/browser/cocoa/toolbar_controller.mm +++ b/chrome/browser/cocoa/toolbar_controller.mm @@ -250,13 +250,10 @@ class NotificationBridge : public NotificationObserver { [reloadButton_ setImage:nsimage_cache::ImageNamed(kReloadButtonReloadImageName)]; [homeButton_ setImage:nsimage_cache::ImageNamed(kHomeButtonImageName)]; + [wrenchButton_ setImage:nsimage_cache::ImageNamed(kWrenchButtonImageName)]; - if (Singleton<UpgradeDetector>::get()->notify_upgrade()) { + if (Singleton<UpgradeDetector>::get()->notify_upgrade()) [self badgeWrenchMenu]; - } else { - NSImage* wrenchImage = nsimage_cache::ImageNamed(kWrenchButtonImageName); - [wrenchButton_ setImage:wrenchImage]; - } [backButton_ setShowsBorderOnlyWhileMouseInside:YES]; [forwardButton_ setShowsBorderOnlyWhileMouseInside:YES]; @@ -548,20 +545,31 @@ class NotificationBridge : public NotificationObserver { } - (void)badgeWrenchMenu { - // The wrench menu gets an upgrade dot. Currently, it's ugly. - // http://crbug.com/49370 - NSImage* wrenchImage = nsimage_cache::ImageNamed(kWrenchButtonImageName); + // The wrench menu gets an upgrade dot. This gets ugly because we only have a + // PNG so we need to position it. TODO(avi): Get a PDF version, one ready for + // overlaying. http://crbug.com/49668 + // + // In the Windows version, the ball doesn't actually pulsate, and is always + // drawn with the inactive image. Why? (We follow suit, though not on the + // weird positioning they do that overlaps the button border.) ThemeProvider* theme_provider = profile_->GetThemeProvider(); - NSImage* badge = theme_provider->GetNSImageNamed(IDR_UPGRADE_DOT_ACTIVE, + NSImage* badge = theme_provider->GetNSImageNamed(IDR_UPGRADE_DOT_INACTIVE, true); - [wrenchImage lockFocus]; - [badge drawAtPoint:NSMakePoint(1, 1) + + NSImage* wrenchImage = nsimage_cache::ImageNamed(kWrenchButtonImageName); + NSSize wrenchImageSize = [wrenchImage size]; + + scoped_nsobject<NSImage> overlayImage( + [[NSImage alloc] initWithSize:wrenchImageSize]); + + [overlayImage lockFocus]; + [badge drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; - [wrenchImage unlockFocus]; - [wrenchButton_ setImage:wrenchImage]; - [wrenchButton_ setNeedsDisplay:YES]; + [overlayImage unlockFocus]; + + [[wrenchButton_ cell] setOverlayImage:overlayImage]; } - (void)prefChanged:(std::wstring*)prefName { |