1// Copyright (c) 2011 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#include "chrome/browser/ui/cocoa/background_gradient_view.h" 6 7#import "chrome/browser/themes/theme_service.h" 8#import "chrome/browser/ui/cocoa/nsview_additions.h" 9#import "chrome/browser/ui/cocoa/themed_window.h" 10#include "grit/theme_resources.h" 11 12#define kToolbarTopOffset 12 13#define kToolbarMaxHeight 100 14 15@implementation BackgroundGradientView 16@synthesize showsDivider = showsDivider_; 17 18- (id)initWithFrame:(NSRect)frameRect { 19 self = [super initWithFrame:frameRect]; 20 if (self != nil) { 21 showsDivider_ = YES; 22 } 23 return self; 24} 25 26- (void)awakeFromNib { 27 showsDivider_ = YES; 28} 29 30- (void)setShowsDivider:(BOOL)show { 31 showsDivider_ = show; 32 [self setNeedsDisplay:YES]; 33} 34 35- (void)drawBackground { 36 BOOL isKey = [[self window] isKeyWindow]; 37 ui::ThemeProvider* themeProvider = [[self window] themeProvider]; 38 if (themeProvider) { 39 NSColor* backgroundImageColor = 40 themeProvider->GetNSImageColorNamed(IDR_THEME_TOOLBAR, false); 41 if (backgroundImageColor) { 42 [backgroundImageColor set]; 43 NSRectFill([self bounds]); 44 } else { 45 CGFloat winHeight = NSHeight([[self window] frame]); 46 NSGradient* gradient = themeProvider->GetNSGradient( 47 isKey ? ThemeService::GRADIENT_TOOLBAR : 48 ThemeService::GRADIENT_TOOLBAR_INACTIVE); 49 NSPoint startPoint = 50 [self convertPoint:NSMakePoint(0, winHeight - kToolbarTopOffset) 51 fromView:nil]; 52 NSPoint endPoint = 53 NSMakePoint(0, winHeight - kToolbarTopOffset - kToolbarMaxHeight); 54 endPoint = [self convertPoint:endPoint fromView:nil]; 55 56 [gradient drawFromPoint:startPoint 57 toPoint:endPoint 58 options:(NSGradientDrawsBeforeStartingLocation | 59 NSGradientDrawsAfterEndingLocation)]; 60 } 61 62 if (showsDivider_) { 63 // Draw bottom stroke 64 [[self strokeColor] set]; 65 NSRect borderRect, contentRect; 66 NSDivideRect([self bounds], &borderRect, &contentRect, 67 [self cr_lineWidth], NSMinYEdge); 68 NSRectFillUsingOperation(borderRect, NSCompositeSourceOver); 69 } 70 } 71} 72 73- (NSColor*)strokeColor { 74 BOOL isKey = [[self window] isKeyWindow]; 75 ui::ThemeProvider* themeProvider = [[self window] themeProvider]; 76 if (!themeProvider) 77 return [NSColor blackColor]; 78 return themeProvider->GetNSColor( 79 isKey ? ThemeService::COLOR_TOOLBAR_STROKE : 80 ThemeService::COLOR_TOOLBAR_STROKE_INACTIVE, true); 81} 82 83@end 84