// Copyright (c) 2011 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. #include "chrome/browser/ui/cocoa/background_gradient_view.h" #import "chrome/browser/themes/theme_service.h" #import "chrome/browser/ui/cocoa/nsview_additions.h" #import "chrome/browser/ui/cocoa/themed_window.h" #include "grit/theme_resources.h" #define kToolbarTopOffset 12 #define kToolbarMaxHeight 100 @implementation BackgroundGradientView @synthesize showsDivider = showsDivider_; - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; if (self != nil) { showsDivider_ = YES; } return self; } - (void)awakeFromNib { showsDivider_ = YES; } - (void)setShowsDivider:(BOOL)show { showsDivider_ = show; [self setNeedsDisplay:YES]; } - (void)drawBackground { BOOL isKey = [[self window] isKeyWindow]; ui::ThemeProvider* themeProvider = [[self window] themeProvider]; if (themeProvider) { NSColor* backgroundImageColor = themeProvider->GetNSImageColorNamed(IDR_THEME_TOOLBAR, false); if (backgroundImageColor) { [backgroundImageColor set]; NSRectFill([self bounds]); } else { CGFloat winHeight = NSHeight([[self window] frame]); NSGradient* gradient = themeProvider->GetNSGradient( isKey ? ThemeService::GRADIENT_TOOLBAR : ThemeService::GRADIENT_TOOLBAR_INACTIVE); NSPoint startPoint = [self convertPoint:NSMakePoint(0, winHeight - kToolbarTopOffset) fromView:nil]; NSPoint endPoint = NSMakePoint(0, winHeight - kToolbarTopOffset - kToolbarMaxHeight); endPoint = [self convertPoint:endPoint fromView:nil]; [gradient drawFromPoint:startPoint toPoint:endPoint options:(NSGradientDrawsBeforeStartingLocation | NSGradientDrawsAfterEndingLocation)]; } if (showsDivider_) { // Draw bottom stroke [[self strokeColor] set]; NSRect borderRect, contentRect; NSDivideRect([self bounds], &borderRect, &contentRect, [self cr_lineWidth], NSMinYEdge); NSRectFillUsingOperation(borderRect, NSCompositeSourceOver); } } } - (NSColor*)strokeColor { BOOL isKey = [[self window] isKeyWindow]; ui::ThemeProvider* themeProvider = [[self window] themeProvider]; if (!themeProvider) return [NSColor blackColor]; return themeProvider->GetNSColor( isKey ? ThemeService::COLOR_TOOLBAR_STROKE : ThemeService::COLOR_TOOLBAR_STROKE_INACTIVE, true); } @end