| Index: chrome/browser/cocoa/gradient_button_cell.mm
|
| ===================================================================
|
| --- chrome/browser/cocoa/gradient_button_cell.mm (revision 24707)
|
| +++ chrome/browser/cocoa/gradient_button_cell.mm (working copy)
|
| @@ -2,10 +2,9 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#import "base/scoped_nsobject.h"
|
| #include "chrome/browser/cocoa/gradient_button_cell.h"
|
| #import "third_party/GTM/AppKit/GTMTheme.h"
|
| -#import "third_party/GTM/AppKit/GTMNSColor+Luminance.h"
|
| +#import "base/scoped_nsobject.h"
|
|
|
| @interface GradientButtonCell (Private)
|
| - (void)sharedInit;
|
| @@ -13,49 +12,9 @@
|
| inView:(NSView*)controlView;
|
| @end
|
|
|
| -static const NSTimeInterval kAnimationShowDuration = 0.2;
|
| -static const NSTimeInterval kAnimationHideDuration = 0.4;
|
|
|
| @implementation GradientButtonCell
|
| -@synthesize hoverAlpha = hoverAlpha_;
|
|
|
| -- (void)adjustHoverValue {
|
| - NSTimeInterval thisUpdate = [NSDate timeIntervalSinceReferenceDate];
|
| -
|
| - NSTimeInterval elapsed = thisUpdate - lastHoverUpdate_;
|
| -
|
| - CGFloat opacity = [self hoverAlpha];
|
| - if (isMouseInside_) {
|
| - opacity += elapsed / kAnimationShowDuration;
|
| - } else {
|
| - opacity -= elapsed / kAnimationHideDuration;
|
| - }
|
| -
|
| - if (!isMouseInside_ && opacity < 0) {
|
| - opacity = 0;
|
| - } else if (isMouseInside_ && opacity > 1) {
|
| - opacity = 1;
|
| - } else {
|
| - [self performSelector:_cmd withObject:nil afterDelay:0.02];
|
| - }
|
| - lastHoverUpdate_ = thisUpdate;
|
| - [self setHoverAlpha:opacity];
|
| -
|
| - [[self controlView] setNeedsDisplay:YES];
|
| -}
|
| -
|
| -- (void)setMouseInside:(BOOL)flag animate:(BOOL)animated {
|
| - isMouseInside_ = flag;
|
| - if (animated) {
|
| - lastHoverUpdate_ = [NSDate timeIntervalSinceReferenceDate];
|
| - [self adjustHoverValue];
|
| - } else {
|
| - [NSObject cancelPreviousPerformRequestsWithTarget:self];
|
| - [self setHoverAlpha:flag ? 1.0 : 0.0];
|
| - }
|
| - [[self controlView] setNeedsDisplay:YES];
|
| -}
|
| -
|
| // For nib instantiations
|
| - (id)initWithCoder:(NSCoder*)decoder {
|
| if ((self = [super initWithCoder:decoder])) {
|
| @@ -72,33 +31,12 @@
|
| return self;
|
| }
|
|
|
| -- (NSGradient *)gradientForHoverAlpha:(CGFloat)hoverAlpha
|
| - isThemed:(BOOL)themed {
|
| - CGFloat startAlpha = 0.6 + 0.3 * hoverAlpha;
|
| - CGFloat endAlpha = 0.333 * hoverAlpha;
|
| -
|
| - if (themed) {
|
| - startAlpha = 0.2 + 0.35 * hoverAlpha;
|
| - endAlpha = 0.333 * hoverAlpha;
|
| - }
|
| -
|
| - NSColor* startColor =
|
| - [NSColor colorWithCalibratedWhite:1.0
|
| - alpha:startAlpha];
|
| - NSColor* endColor =
|
| - [NSColor colorWithCalibratedWhite:1.0 - 0.15 * hoverAlpha
|
| - alpha:endAlpha];
|
| - NSGradient *gradient = [[NSGradient alloc] initWithColorsAndLocations:
|
| - startColor, hoverAlpha * 0.33,
|
| - endColor, 1.0, nil];
|
| -
|
| - return [gradient autorelease];
|
| -}
|
| -
|
| -
|
| - (void)sharedInit {
|
| shouldTheme_ = YES;
|
| - gradient_.reset([[self gradientForHoverAlpha:0.0 isThemed:NO] retain]);
|
| + NSColor* startColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.666];
|
| + NSColor* endColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.333];
|
| + gradient_.reset([[NSGradient alloc]
|
| + initWithColorsAndLocations:startColor, 0.33, endColor, 1.0, nil]);
|
| }
|
|
|
| - (void)setShouldTheme:(BOOL)shouldTheme {
|
| @@ -121,11 +59,13 @@
|
| }
|
|
|
| - (void)mouseEntered:(NSEvent *)theEvent {
|
| - [self setMouseInside:YES animate:YES];
|
| + isMouseInside_ = YES;
|
| + [[self controlView] setNeedsDisplay:YES];
|
| }
|
|
|
| - (void)mouseExited:(NSEvent *)theEvent {
|
| - [self setMouseInside:NO animate:YES];
|
| + isMouseInside_ = NO;
|
| + [[self controlView] setNeedsDisplay:YES];
|
| }
|
|
|
| - (BOOL)isMouseInside {
|
| @@ -162,11 +102,13 @@
|
| controlView:(NSView*)controlView
|
| outerPath:(NSBezierPath*)outerPath
|
| innerPath:(NSBezierPath*)innerPath
|
| - showClickedGradient:(BOOL)showClickedGradient
|
| showHighlightGradient:(BOOL)showHighlightGradient
|
| - hoverAlpha:(CGFloat)hoverAlpha
|
| + showClickedGradient:(BOOL)showClickedGradient
|
| active:(BOOL)active
|
| cellFrame:(NSRect)cellFrame {
|
| + [[NSColor colorWithCalibratedWhite:1.0 alpha:0.25] set];
|
| + [outerPath stroke];
|
| +
|
| NSImage* backgroundImage =
|
| [theme backgroundImageForStyle:GTMThemeStyleToolBarButton state:YES];
|
|
|
| @@ -187,56 +129,45 @@
|
| }
|
| }
|
|
|
| - BOOL isCustomTheme = backgroundImage != nil;
|
| -
|
| - if (!showClickedGradient && [self isEnabled]) {
|
| + if (!showClickedGradient && showHighlightGradient) {
|
| [NSGraphicsContext saveGraphicsState];
|
| [innerPath addClip];
|
|
|
| // Draw the inner glow.
|
| - if (hoverAlpha > 0) {
|
| - [innerPath setLineWidth:2];
|
| - [[NSColor colorWithCalibratedWhite:1.0 alpha:0.2 * hoverAlpha] setStroke];
|
| - [innerPath stroke];
|
| - }
|
| + [innerPath setLineWidth:2];
|
| + [[NSColor colorWithCalibratedWhite:1.0 alpha:0.9] setStroke];
|
| + [innerPath stroke];
|
|
|
| + [[NSColor colorWithCalibratedWhite:1.0 alpha:0.9] setStroke];
|
| + [[NSColor colorWithCalibratedWhite:1.0 alpha:0.2] setFill];
|
| +
|
| // Draw the top inner highlight.
|
| NSAffineTransform* highlightTransform = [NSAffineTransform transform];
|
| [highlightTransform translateXBy:1 yBy:1];
|
| scoped_nsobject<NSBezierPath> highlightPath([innerPath copy]);
|
| [highlightPath transformUsingAffineTransform:highlightTransform];
|
| - [[NSColor colorWithCalibratedWhite:1.0 alpha:0.2] setStroke];
|
| +
|
| [highlightPath stroke];
|
|
|
| - NSGradient *gradient = nil;
|
| - if (hoverAlpha == 0 && !isCustomTheme) {
|
| - gradient = gradient_;
|
| - } else {
|
| - gradient = [self gradientForHoverAlpha:hoverAlpha isThemed:isCustomTheme];
|
| - }
|
| - [gradient drawInBezierPath:innerPath angle:90.0];
|
| + [gradient_ drawInBezierPath:innerPath angle:90.0];
|
|
|
| [NSGraphicsContext restoreGraphicsState];
|
| }
|
|
|
| - // Draw the outer stroke
|
| NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton
|
| state:active];
|
| -
|
| - if (showClickedGradient) {
|
| - stroke = [NSColor colorWithCalibratedWhite:0.0 alpha:0.3];
|
| - }
|
| [stroke setStroke];
|
|
|
| [innerPath setLineWidth:1];
|
| [innerPath stroke];
|
| }
|
|
|
| +
|
| - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
|
| // Constants from Cole. Will kConstant them once the feedback loop
|
| // is complete.
|
| NSRect drawFrame = NSInsetRect(cellFrame, 1.5, 1.5);
|
| - NSRect innerFrame = NSInsetRect(cellFrame, 2, 1);
|
| + NSRect innerFrame = NSInsetRect(cellFrame, 2, 2);
|
| ButtonType type = [[(NSControl*)controlView cell] tag];
|
| switch (type) {
|
| case kMiddleButtonType:
|
| @@ -281,9 +212,8 @@
|
| controlView:controlView
|
| outerPath:outerPath
|
| innerPath:innerPath
|
| + showHighlightGradient:YES
|
| showClickedGradient:pressed
|
| - showHighlightGradient:[self isHighlighted]
|
| - hoverAlpha:[self hoverAlpha]
|
| active:active
|
| cellFrame:cellFrame];
|
| }
|
| @@ -313,14 +243,9 @@
|
| CGContextRef context =
|
| (CGContextRef)([[NSGraphicsContext currentContext] graphicsPort]);
|
|
|
| - NSColor* color = [theme iconColorForStyle:GTMThemeStyleToolBarButton
|
| - state:YES];
|
| -
|
| if (isTemplate) {
|
| scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]);
|
| - NSColor *shadowColor = [color gtm_legibleTextColor];
|
| - shadowColor = [shadowColor colorWithAlphaComponent:0.25];
|
| - [shadow setShadowColor:shadowColor];
|
| + [shadow setShadowColor:[NSColor whiteColor]];
|
| [shadow setShadowOffset:NSMakeSize(0, -1.0)];
|
| [shadow setShadowBlurRadius:1.0];
|
| [shadow set];
|
| @@ -331,13 +256,14 @@
|
| CGContextBeginTransparencyLayer(context, 0);
|
| NSRect imageRect = NSZeroRect;
|
| imageRect.size = [[self image] size];
|
| - NSRect drawRect = [self imageRectForBounds:cellFrame];
|
| [[self image] setFlipped:[controlView isFlipped]];
|
| - [[self image] drawInRect:drawRect
|
| + [[self image] drawInRect:[self imageRectForBounds:cellFrame]
|
| fromRect:imageRect
|
| operation:NSCompositeSourceOver
|
| fraction:[self isEnabled] ? 1.0 : 0.5];
|
| if (isTemplate) {
|
| + NSColor* color = [theme iconColorForStyle:GTMThemeStyleToolBarButton
|
| + state:YES];
|
| if (color) {
|
| [color set];
|
| NSRectFillUsingOperation(cellFrame, NSCompositeSourceAtop);
|
|
|