Chromium Code Reviews| Index: chrome/browser/ui/cocoa/apps/titlebar_background_view.mm |
| diff --git a/chrome/browser/ui/cocoa/apps/titlebar_background_view.mm b/chrome/browser/ui/cocoa/apps/titlebar_background_view.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fbb88ef3f634928541dde919b383e344cf1c3cfa |
| --- /dev/null |
| +++ b/chrome/browser/ui/cocoa/apps/titlebar_background_view.mm |
| @@ -0,0 +1,64 @@ |
| +// Copyright 2015 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/ui/cocoa/apps/titlebar_background_view.h" |
| + |
| +#import <Cocoa/Cocoa.h> |
|
tapted
2015/05/12 06:15:43
nit: don't need this since it's in the header.
jackhou1
2015/05/14 02:59:13
Done.
|
| + |
| +#import "skia/ext/skia_utils_mac.h" |
| + |
| +@interface TitlebarBackgroundView () |
| +- (void)setColor:(NSColor*)color inactiveColor:(NSColor*)inactiveColor; |
| +@end |
| + |
| +@implementation TitlebarBackgroundView |
| + |
| ++ (void)addToNSWindow:(NSWindow*)window |
| + activeColor:(SkColor)activeColor |
| + inactiveColor:(SkColor)inactiveColor { |
| + // AppKit only officially supports adding subviews to the window's |
| + // contentView and not its superview (an NSNextStepFrame). The 10.10 SDK |
| + // allows adding an NSTitlebarAccessoryViewController to a window, but the |
| + // view can only be placed above the window control buttons, so we'd have to |
| + // replicate those. |
| + NSView* window_view = [[window contentView] superview]; |
| + CGFloat height = |
| + NSHeight([window_view bounds]) - NSHeight([[window contentView] bounds]); |
| + base::scoped_nsobject<TitlebarBackgroundView> titlebar_background_view( |
| + [[TitlebarBackgroundView alloc] |
| + initWithFrame:NSMakeRect(0, NSMaxY([window_view bounds]) - height, |
| + NSWidth([window_view bounds]), height)]); |
| + [titlebar_background_view |
| + setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin]; |
| + [window_view addSubview:titlebar_background_view |
| + positioned:NSWindowBelow |
| + relativeTo:nil]; |
| + |
| + [titlebar_background_view setColor:gfx::SkColorToSRGBNSColor(activeColor) |
| + inactiveColor:gfx::SkColorToSRGBNSColor(inactiveColor)]; |
| +} |
| + |
| +- (void)drawRect:(NSRect)rect { |
| + // Only the top corners are rounded. For simplicity, round all 4 corners but |
| + // draw the bottom corners outside of the visible bounds. |
| + CGFloat cornerRadius = 4.0; |
| + NSRect roundedRect = [self bounds]; |
| + roundedRect.origin.y -= cornerRadius; |
| + roundedRect.size.height += cornerRadius; |
| + [[NSBezierPath bezierPathWithRoundedRect:roundedRect |
| + xRadius:cornerRadius |
| + yRadius:cornerRadius] addClip]; |
| + if ([[self window] isMainWindow] || [[self window] isKeyWindow]) |
| + [color_ set]; |
| + else |
| + [inactiveColor_ set]; |
| + NSRectFill(rect); |
| +} |
| + |
| +- (void)setColor:(NSColor*)color inactiveColor:(NSColor*)inactiveColor { |
| + color_.reset([color retain]); |
| + inactiveColor_.reset([inactiveColor retain]); |
| +} |
| + |
| +@end |