Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: chrome/browser/cocoa/gradient_button_cell.mm

Issue 159060: Use a real download item.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: first round of review comments addressed Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/cocoa/gradient_button_cell.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/cocoa/gradient_button_cell.h" 5 #include "chrome/browser/cocoa/gradient_button_cell.h"
6 #import "third_party/GTM/AppKit/GTMTheme.h" 6 #import "third_party/GTM/AppKit/GTMTheme.h"
7 #import "base/scoped_nsobject.h" 7 #import "base/scoped_nsobject.h"
8 8
9 @implementation GradientButtonCell 9 @implementation GradientButtonCell
10 10
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 [[self controlView] addTrackingArea:trackingArea_]; 66 [[self controlView] addTrackingArea:trackingArea_];
67 } else { 67 } else {
68 if (trackingArea_) { 68 if (trackingArea_) {
69 [[self controlView] removeTrackingArea:trackingArea_]; 69 [[self controlView] removeTrackingArea:trackingArea_];
70 trackingArea_.reset(nil); 70 trackingArea_.reset(nil);
71 isMouseInside_ = NO; 71 isMouseInside_ = NO;
72 } 72 }
73 } 73 }
74 } 74 }
75 75
76 - (void)drawBorderAndFillForTheme:(GTMTheme*)theme
77 controlView:(NSView*)controlView
78 outerPath:(NSBezierPath*)outerPath
79 innerPath:(NSBezierPath*)innerPath
80 showHighlightGradient:(BOOL)showHighlightGradient
81 showClickedGradient:(BOOL)showClickedGradient
82 active:(BOOL)active
83 cellFrame:(NSRect)cellFrame {
84 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.25] set];
85 [outerPath stroke];
86
87 NSImage* backgroundImage =
88 [theme backgroundImageForStyle:GTMThemeStyleToolBarButton state:YES];
89
90 if (backgroundImage) {
91 NSColor* patternColor = [NSColor colorWithPatternImage:backgroundImage];
92 [patternColor set];
93 // Set the phase to match window.
94 NSRect trueRect = [controlView convertRectToBase:cellFrame];
95 [[NSGraphicsContext currentContext]
96 setPatternPhase:NSMakePoint(NSMinX(trueRect), NSMaxY(trueRect))];
97 [innerPath fill];
98 } else {
99 if (showClickedGradient) {
100 NSGradient* gradient =
101 [theme gradientForStyle:GTMThemeStyleToolBarButtonPressed
102 state:active];
103 [gradient drawInBezierPath:innerPath angle:90.0];
104 }
105 }
106
107 if (!showClickedGradient && showHighlightGradient) {
108 [NSGraphicsContext saveGraphicsState];
109 [innerPath addClip];
110
111 // Draw the inner glow.
112 [innerPath setLineWidth:2];
113 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.9] setStroke];
114 [innerPath stroke];
115
116 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.9] setStroke];
117 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.2] setFill];
118
119 // Draw the top inner highlight.
120 NSAffineTransform* highlightTransform = [NSAffineTransform transform];
121 [highlightTransform translateXBy:1 yBy:1];
122 scoped_nsobject<NSBezierPath> highlightPath([innerPath copy]);
123 [highlightPath transformUsingAffineTransform:highlightTransform];
124
125 [highlightPath stroke];
126
127 NSColor* startColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.666];
128 NSColor* endColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.333];
129 scoped_nsobject<NSBezierPath> gradient([[NSGradient alloc]
130 initWithColorsAndLocations:startColor, 0.33, endColor, 1.0, nil]);
131
132 [gradient drawInBezierPath:innerPath angle:90.0];
133
134 [NSGraphicsContext restoreGraphicsState];
135 }
136
137 NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton
138 state:active];
139 [stroke setStroke];
140
141 [innerPath setLineWidth:1];
142 [innerPath stroke];
143 }
144
145
76 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { 146 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
77 // Constants from Cole. Will kConstant them once the feedback loop 147 // Constants from Cole. Will kConstant them once the feedback loop
78 // is complete. 148 // is complete.
79 NSRect drawFrame = NSInsetRect(cellFrame, 1.5, 1.5); 149 NSRect drawFrame = NSInsetRect(cellFrame, 1.5, 1.5);
80 NSRect innerFrame = NSInsetRect(cellFrame, 2, 2); 150 NSRect innerFrame = NSInsetRect(cellFrame, 2, 2);
81 ButtonType type = [[(NSControl*)controlView cell] tag]; 151 ButtonType type = [[(NSControl*)controlView cell] tag];
82 switch (type) { 152 switch (type) {
83 case kRightButtonType: 153 case kRightButtonType:
84 drawFrame.origin.x -= 20; 154 drawFrame.origin.x -= 20;
85 innerFrame.origin.x -= 2; 155 innerFrame.origin.x -= 2;
(...skipping 20 matching lines...) Expand all
106 NSBezierPath* outerPath = 176 NSBezierPath* outerPath =
107 [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(drawFrame, -1, -1) 177 [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(drawFrame, -1, -1)
108 xRadius:radius + 1 178 xRadius:radius + 1
109 yRadius:radius + 1]; 179 yRadius:radius + 1];
110 180
111 // Stroke the borders and appropriate fill gradient. If we're borderless, 181 // Stroke the borders and appropriate fill gradient. If we're borderless,
112 // the only time we want to draw the inner gradient is if we're highlighted. 182 // the only time we want to draw the inner gradient is if we're highlighted.
113 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || 183 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) ||
114 pressed || 184 pressed ||
115 [self isMouseInside]) { 185 [self isMouseInside]) {
116 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.25] set];
117 [outerPath stroke];
118 186
119 NSImage* backgroundImage = 187 [self drawBorderAndFillForTheme:theme
120 [theme backgroundImageForStyle:GTMThemeStyleToolBarButton state:YES]; 188 controlView:controlView
121 189 outerPath:outerPath
122 if (backgroundImage) { 190 innerPath:innerPath
123 NSColor* patternColor = [NSColor colorWithPatternImage:backgroundImage]; 191 showHighlightGradient:YES
124 [patternColor set]; 192 showClickedGradient:pressed
125 // Set the phase to match window. 193 active:active
126 NSRect trueRect = [controlView convertRectToBase:cellFrame]; 194 cellFrame:cellFrame];
127 [[NSGraphicsContext currentContext]
128 setPatternPhase:NSMakePoint(NSMinX(trueRect), NSMaxY(trueRect))];
129 [innerPath fill];
130 } else {
131 if (pressed) {
132 NSGradient* gradient =
133 [theme gradientForStyle:GTMThemeStyleToolBarButtonPressed
134 state:active];
135 [gradient drawInBezierPath:innerPath angle:90.0];
136 }
137 }
138
139 if (!pressed) {
140 [NSGraphicsContext saveGraphicsState];
141 [innerPath addClip];
142
143 // Draw the inner glow.
144 [innerPath setLineWidth:2];
145 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.9] setStroke];
146 [innerPath stroke];
147
148 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.9] setStroke];
149 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.2] setFill];
150
151 // Draw the top inner highlight.
152 NSAffineTransform* highlightTransform = [NSAffineTransform transform];
153 [highlightTransform translateXBy:1 yBy:1];
154 scoped_nsobject<NSBezierPath> highlightPath([innerPath copy]);
155 [highlightPath transformUsingAffineTransform:highlightTransform];
156
157 [highlightPath stroke];
158
159 NSColor* startColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.666];
160 NSColor* endColor = [NSColor colorWithCalibratedWhite:1.0 alpha:0.333];
161 scoped_nsobject<NSBezierPath> gradient([[NSGradient alloc]
162 initWithColorsAndLocations:startColor, 0.33, endColor, 1.0, nil]);
163
164 [gradient drawInBezierPath:innerPath angle:90.0];
165
166 [NSGraphicsContext restoreGraphicsState];
167 }
168
169 NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton
170 state:active];
171 [stroke setStroke];
172
173 [innerPath setLineWidth:1];
174 [innerPath stroke];
175 } 195 }
176 196
177 // If this is the left side of a segmented button, draw a slight shadow. 197 // If this is the left side of a segmented button, draw a slight shadow.
178 if (type == kLeftButtonWithShadowType) { 198 if (type == kLeftButtonWithShadowType) {
179 NSRect borderRect, contentRect; 199 NSRect borderRect, contentRect;
180 NSDivideRect(cellFrame, &borderRect, &contentRect, 1.0, NSMaxXEdge); 200 NSDivideRect(cellFrame, &borderRect, &contentRect, 1.0, NSMaxXEdge);
181 NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton 201 NSColor* stroke = [theme strokeColorForStyle:GTMThemeStyleToolBarButton
182 state:active]; 202 state:active];
183 [[stroke colorWithAlphaComponent:0.2] set]; 203 [[stroke colorWithAlphaComponent:0.2] set];
184 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2), 204 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 [NSGraphicsContext restoreGraphicsState]; 246 [NSGraphicsContext restoreGraphicsState];
227 } else { 247 } else {
228 // NSCell draws these uncentered for some reason, probably because of the 248 // NSCell draws these uncentered for some reason, probably because of the
229 // of control in the xib 249 // of control in the xib
230 [super drawInteriorWithFrame:NSOffsetRect(cellFrame, 0, 1) 250 [super drawInteriorWithFrame:NSOffsetRect(cellFrame, 0, 1)
231 inView:controlView]; 251 inView:controlView];
232 } 252 }
233 } 253 }
234 254
235 @end 255 @end
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/gradient_button_cell.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698