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 |