1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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
|