| 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);
 | 
| 
 |