Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1024)

Unified Diff: chrome/browser/ui/cocoa/apps/titlebar_background_view.mm

Issue 1053303003: [MacViews] Implement colored window frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Missed a few things. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698