summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-22 00:00:43 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-22 00:00:43 +0000
commit3ed7c0dc57140d053957769c0bad1f7925dff2e7 (patch)
treeec7a2cedee0f0b1b4b99cf89570823ea3ae4652d
parent12564d651328ff711ad32a57c3a2093bfcc8a49a (diff)
downloadchromium_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.h7
-rw-r--r--chrome/browser/cocoa/gradient_button_cell.mm21
-rw-r--r--chrome/browser/cocoa/toolbar_controller.mm36
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 {