Home | History | Annotate | Download | only in cocoa
      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