Logo Search packages:      
Sourcecode: chromium-browser version File versions  Download package

section_separator_view.mm

// 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 = { 0.0, 1.0 };
  CGFloat components = {
      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

Generated by  Doxygen 1.6.0   Back to index