Index: chrome/browser/cocoa/gradient_button_cell.mm |
=================================================================== |
--- chrome/browser/cocoa/gradient_button_cell.mm (revision 21145) |
+++ chrome/browser/cocoa/gradient_button_cell.mm (working copy) |
@@ -73,6 +73,76 @@ |
} |
} |
+- (void)drawBorderAndFillForTheme:(GTMTheme*)theme |
+ controlView:(NSView*)controlView |
+ outerPath:(NSBezierPath*)outerPath |
+ innerPath:(NSBezierPath*)innerPath |
+ showHighlightGradient:(BOOL)showHighlightGradient |
+ 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]; |
+ |
+ if (backgroundImage) { |
+ NSColor* patternColor = [NSColor colorWithPatternImage:backgroundImage]; |
+ [patternColor set]; |
+ // Set the phase to match window. |
+ NSRect trueRect = [controlView convertRectToBase:cellFrame]; |
+ [[NSGraphicsContext currentContext] |
+ setPatternPhase:NSMakePoint(NSMinX(trueRect), NSMaxY(trueRect))]; |
+ [innerPath fill]; |
+ } else { |
+ if (showClickedGradient) { |
+ NSGradient* gradient = |
+ [theme gradientForStyle:GTMThemeStyleToolBarButtonPressed |
+ state:active]; |
+ [gradient drawInBezierPath:innerPath angle:90.0]; |
+ } |
+ } |
+ |
+ if (!showClickedGradient && showHighlightGradient) { |
+ [NSGraphicsContext saveGraphicsState]; |
+ [innerPath addClip]; |
+ |
+ // Draw the inner glow. |
+ [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]; |
+ |
+ [highlightPath stroke]; |
+ |
+ NSColor* startColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.666]; |
+ NSColor* endColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.333]; |
+ scoped_nsobject<NSBezierPath> gradient([[NSGradient alloc] |
+ initWithColorsAndLocations:startColor, 0.33, endColor, 1.0, nil]); |
+ |
+ [gradient drawInBezierPath:innerPath angle:90.0]; |
+ |
+ [NSGraphicsContext restoreGraphicsState]; |
+ } |
+ |
+ NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton |
+ state:active]; |
+ [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. |
@@ -113,65 +183,15 @@ |
if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || |
pressed || |
[self isMouseInside]) { |
- [[NSColor colorWithCalibratedWhite:1.0 alpha:0.25] set]; |
- [outerPath stroke]; |
- NSImage* backgroundImage = |
- [theme backgroundImageForStyle:GTMThemeStyleToolBarButton state:YES]; |
- |
- if (backgroundImage) { |
- NSColor* patternColor = [NSColor colorWithPatternImage:backgroundImage]; |
- [patternColor set]; |
- // Set the phase to match window. |
- NSRect trueRect = [controlView convertRectToBase:cellFrame]; |
- [[NSGraphicsContext currentContext] |
- setPatternPhase:NSMakePoint(NSMinX(trueRect), NSMaxY(trueRect))]; |
- [innerPath fill]; |
- } else { |
- if (pressed) { |
- NSGradient* gradient = |
- [theme gradientForStyle:GTMThemeStyleToolBarButtonPressed |
- state:active]; |
- [gradient drawInBezierPath:innerPath angle:90.0]; |
- } |
- } |
- |
- if (!pressed) { |
- [NSGraphicsContext saveGraphicsState]; |
- [innerPath addClip]; |
- |
- // Draw the inner glow. |
- [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]; |
- |
- [highlightPath stroke]; |
- |
- NSColor* startColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.666]; |
- NSColor* endColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.333]; |
- scoped_nsobject<NSBezierPath> gradient([[NSGradient alloc] |
- initWithColorsAndLocations:startColor, 0.33, endColor, 1.0, nil]); |
- |
- [gradient drawInBezierPath:innerPath angle:90.0]; |
- |
- [NSGraphicsContext restoreGraphicsState]; |
- } |
- |
- NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton |
- state:active]; |
- [stroke setStroke]; |
- |
- [innerPath setLineWidth:1]; |
- [innerPath stroke]; |
+ [self drawBorderAndFillForTheme:theme |
+ controlView:controlView |
+ outerPath:outerPath |
+ innerPath:innerPath |
+ showHighlightGradient:YES |
+ showClickedGradient:pressed |
+ active:active |
+ cellFrame:cellFrame]; |
} |
// If this is the left side of a segmented button, draw a slight shadow. |