OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #import "chrome/browser/cocoa/section_separator_view.h" | |
6 | |
7 @interface SectionSeparatorView (PrivateMethods) | |
8 - (void)drawGradientRect:(NSRect)rect; | |
9 - (void)drawBaseLineRect:(NSRect)rect; | |
10 - (void)drawTopLineRect:(NSRect)rect; | |
11 @end | |
12 | |
13 @implementation SectionSeparatorView | |
14 | |
15 @synthesize showBaseLine = showBaseLine_; | |
16 @synthesize baselineSeparatorColor = baselineSeparatorColor_; | |
17 @synthesize showTopLine = showTopLine_; | |
18 @synthesize toplineSeparatorColor = toplineSeparatorColor_; | |
19 | |
20 - (id)initWithFrame:(NSRect)frame { | |
21 self = [super initWithFrame:frame]; | |
22 if (self) { | |
23 [self setShowBaseLine:YES]; | |
24 [self setBaselineSeparatorColor:[NSColor grayColor]]; | |
25 [self setShowTopLine:YES]; | |
26 [self setToplineSeparatorColor:[NSColor lightGrayColor]]; | |
27 } | |
28 return self; | |
29 } | |
30 | |
31 - (void)dealloc { | |
32 [baselineSeparatorColor_ release]; | |
33 [toplineSeparatorColor_ release]; | |
34 [super dealloc]; | |
35 } | |
36 | |
37 - (void)drawRect:(NSRect)rect { | |
38 NSRect gradientBounds = [self bounds]; | |
39 NSRect baselineRect = gradientBounds; | |
40 NSRect toplineRect = gradientBounds; | |
41 gradientBounds.size.height -= 1; | |
42 gradientBounds.origin.y += 1; | |
43 baselineRect.size.height = 1; | |
44 baselineRect.origin.y = 0; | |
45 toplineRect.size.height = 1; | |
46 toplineRect.origin.y = gradientBounds.size.height; | |
47 [self drawGradientRect:gradientBounds]; | |
48 if ([self showBaseLine]) | |
49 [self drawBaseLineRect:baselineRect]; | |
50 if ([self showTopLine]) | |
51 [self drawTopLineRect:toplineRect]; | |
52 } | |
53 | |
54 @end | |
55 | |
56 @implementation SectionSeparatorView (PrivateMethods) | |
57 | |
58 // This method draws the gradient fill of the "separator" bar. The input | |
59 // |rect| designates the bounds that will be filled with the the gradient. | |
60 // The gradient has two stops, lighter gray blending to | |
61 // darker gray, descending from the top of the |rect| to the bottom. | |
62 - (void)drawGradientRect:(NSRect)rect { | |
63 // Compute start and end points where to draw the gradient. | |
64 CGPoint startPoint = CGPointMake(NSMinX(rect), NSMinY(rect)); | |
65 CGPoint endPoint = CGPointMake(NSMinX(rect), NSMaxY(rect)); | |
66 | |
67 // Setup the context and colorspace. | |
68 CGContextRef context = | |
69 (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; | |
70 CGContextSaveGState(context); | |
71 CGColorSpaceRef colorspace = | |
72 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); | |
73 | |
74 // Create the gradient. | |
75 const size_t stopCount = 2; | |
76 CGFloat stops[stopCount] = { 0.0, 1.0 }; | |
77 CGFloat components[8] = { | |
78 0.75, 0.75, 0.75, 1.0, // start color | |
79 0.95, 0.95, 0.95, 1.0 }; // end color | |
80 | |
81 CGGradientRef gradient = CGGradientCreateWithColorComponents( | |
82 colorspace, components, stops, stopCount); | |
83 | |
84 CGContextClipToRect(context, *(CGRect*)&rect); | |
85 CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); | |
86 | |
87 CGGradientRelease(gradient); | |
88 CGColorSpaceRelease(colorspace); | |
89 CGContextRestoreGState(context); | |
90 } | |
91 | |
92 // Draws the base line of the separator bar using the |baselineSeparatorColor_| | |
93 // designated color. | |
94 - (void)drawBaseLineRect:(NSRect)rect { | |
95 [baselineSeparatorColor_ set]; | |
96 NSFrameRect(rect); | |
97 } | |
98 | |
99 // Draws the top line of the separator bar using the |toplineSeparatorColor_| | |
100 // designated color. | |
101 - (void)drawTopLineRect:(NSRect)rect { | |
102 [toplineSeparatorColor_ set]; | |
103 NSFrameRect(rect); | |
104 } | |
105 | |
106 @end | |
OLD | NEW |