Index: chrome/browser/ui/cocoa/tabs/tab_strip_background_view.mm |
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_background_view.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_background_view.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d8fba5d570bdd23a5f4588d866e23aaed71ead7e |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_background_view.mm |
@@ -0,0 +1,73 @@ |
+// Copyright 2014 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/tabs/tab_strip_background_view.h" |
+ |
+#import "chrome/browser/ui/cocoa/framed_browser_window.h" |
+#import "ui/base/cocoa/nsview_additions.h" |
+ |
+@implementation TabStripBackgroundView |
+ |
+- (void)drawRect:(NSRect)dirtyRect { |
+ // Only the top corners are rounded. For simplicity, round all 4 corners but |
+ // draw the bottom corners outside of the visible bounds. |
+ float cornerRadius = 4.0; |
+ NSRect roundedRect = [self bounds]; |
+ roundedRect.origin.y -= cornerRadius; |
+ roundedRect.size.height += cornerRadius; |
+ [[NSBezierPath bezierPathWithRoundedRect:roundedRect |
+ xRadius:cornerRadius |
+ yRadius:cornerRadius] addClip]; |
+ BOOL themed = [FramedBrowserWindow drawWindowThemeInDirtyRect:dirtyRect |
+ forView:self |
+ bounds:roundedRect |
+ forceBlackBackground:NO]; |
+ |
+ // Draw a 1px border on the top edge and top corners. |
+ if (themed) { |
+ CGFloat lineWidth = [self cr_lineWidth]; |
+ // Inset the vertical lines by 0.5px so that the top line gets a full pixel. |
+ // Outset the horizontal lines by 0.5px so that they are not visible, but |
+ // still get the rounded corners to get a border. |
+ NSRect strokeRect = NSInsetRect(roundedRect, -lineWidth/2, lineWidth/2); |
+ NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:strokeRect |
+ xRadius:cornerRadius |
+ yRadius:cornerRadius]; |
+ [path setLineWidth:lineWidth]; |
+ [[NSColor colorWithCalibratedWhite:1.0 alpha:0.5] set]; |
+ [path stroke]; |
+ } |
+} |
+ |
+- (void)viewWillMoveToWindow:(NSWindow*)window { |
+ if ([self window]) { |
+ [[NSNotificationCenter defaultCenter] |
+ removeObserver:self |
+ name:NSWindowDidBecomeMainNotification |
+ object:[self window]]; |
+ [[NSNotificationCenter defaultCenter] |
+ removeObserver:self |
+ name:NSWindowDidResignMainNotification |
+ object:[self window]]; |
+ } |
+ if (window) { |
+ [[NSNotificationCenter defaultCenter] |
+ addObserver:self |
+ selector:@selector(windowFocusDidChange:) |
+ name:NSWindowDidBecomeMainNotification |
+ object:window]; |
+ [[NSNotificationCenter defaultCenter] |
+ addObserver:self |
+ selector:@selector(windowFocusDidChange:) |
+ name:NSWindowDidResignMainNotification |
+ object:window]; |
+ } |
+} |
+ |
+- (void)windowFocusDidChange:(NSNotification*)notification { |
+ // The theme image may depend on the window's active state. |
+ [self setNeedsDisplay:YES]; |
+} |
+ |
+@end |