| Index: chrome/browser/cocoa/section_separator_view.mm
|
| ===================================================================
|
| --- chrome/browser/cocoa/section_separator_view.mm (revision 0)
|
| +++ chrome/browser/cocoa/section_separator_view.mm (revision 0)
|
| @@ -0,0 +1,106 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "chrome/browser/cocoa/section_separator_view.h"
|
| +
|
| +@interface SectionSeparatorView (PrivateMethods)
|
| +- (void)drawGradientRect:(NSRect)rect;
|
| +- (void)drawBaseLineRect:(NSRect)rect;
|
| +- (void)drawTopLineRect:(NSRect)rect;
|
| +@end
|
| +
|
| +@implementation SectionSeparatorView
|
| +
|
| +@synthesize showBaseLine = showBaseLine_;
|
| +@synthesize baselineSeparatorColor = baselineSeparatorColor_;
|
| +@synthesize showTopLine = showTopLine_;
|
| +@synthesize toplineSeparatorColor = toplineSeparatorColor_;
|
| +
|
| +- (id)initWithFrame:(NSRect)frame {
|
| + self = [super initWithFrame:frame];
|
| + if (self) {
|
| + [self setShowBaseLine:YES];
|
| + [self setBaselineSeparatorColor:[NSColor grayColor]];
|
| + [self setShowTopLine:YES];
|
| + [self setToplineSeparatorColor:[NSColor lightGrayColor]];
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (void)dealloc {
|
| + [baselineSeparatorColor_ release];
|
| + [toplineSeparatorColor_ release];
|
| + [super dealloc];
|
| +}
|
| +
|
| +- (void)drawRect:(NSRect)rect {
|
| + NSRect gradientBounds = [self bounds];
|
| + NSRect baselineRect = gradientBounds;
|
| + NSRect toplineRect = gradientBounds;
|
| + gradientBounds.size.height -= 1;
|
| + gradientBounds.origin.y += 1;
|
| + baselineRect.size.height = 1;
|
| + baselineRect.origin.y = 0;
|
| + toplineRect.size.height = 1;
|
| + toplineRect.origin.y = gradientBounds.size.height;
|
| + [self drawGradientRect:gradientBounds];
|
| + if ([self showBaseLine])
|
| + [self drawBaseLineRect:baselineRect];
|
| + if ([self showTopLine])
|
| + [self drawTopLineRect:toplineRect];
|
| +}
|
| +
|
| +@end
|
| +
|
| +@implementation SectionSeparatorView (PrivateMethods)
|
| +
|
| +// This method draws the gradient fill of the "separator" bar. The input
|
| +// |rect| designates the bounds that will be filled with the the gradient.
|
| +// The gradient has two stops, lighter gray blending to
|
| +// darker gray, descending from the top of the |rect| to the bottom.
|
| +- (void)drawGradientRect:(NSRect)rect {
|
| + // Compute start and end points where to draw the gradient.
|
| + CGPoint startPoint = CGPointMake(NSMinX(rect), NSMinY(rect));
|
| + CGPoint endPoint = CGPointMake(NSMinX(rect), NSMaxY(rect));
|
| +
|
| + // Setup the context and colorspace.
|
| + CGContextRef context =
|
| + (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
|
| + CGContextSaveGState(context);
|
| + CGColorSpaceRef colorspace =
|
| + CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
|
| +
|
| + // Create the gradient.
|
| + const size_t stopCount = 2;
|
| + CGFloat stops[stopCount] = { 0.0, 1.0 };
|
| + CGFloat components[8] = {
|
| + 0.75, 0.75, 0.75, 1.0, // start color
|
| + 0.95, 0.95, 0.95, 1.0 }; // end color
|
| +
|
| + CGGradientRef gradient = CGGradientCreateWithColorComponents(
|
| + colorspace, components, stops, stopCount);
|
| +
|
| + CGContextClipToRect(context, *(CGRect*)&rect);
|
| + CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
|
| +
|
| + CGGradientRelease(gradient);
|
| + CGColorSpaceRelease(colorspace);
|
| + CGContextRestoreGState(context);
|
| +}
|
| +
|
| +// Draws the base line of the separator bar using the |baselineSeparatorColor_|
|
| +// designated color.
|
| +- (void)drawBaseLineRect:(NSRect)rect {
|
| + [baselineSeparatorColor_ set];
|
| + NSFrameRect(rect);
|
| +}
|
| +
|
| +// Draws the top line of the separator bar using the |toplineSeparatorColor_|
|
| +// designated color.
|
| +- (void)drawTopLineRect:(NSRect)rect {
|
| + [toplineSeparatorColor_ set];
|
| + NSFrameRect(rect);
|
| +}
|
| +
|
| +@end
|
|
|