Index: chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm |
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm |
index 03bdf22050de1c0f938f72eed2347afe917d59ff..1a5b1d0405d8f5ac01770fff6d3bf566cae38470 100644 |
--- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm |
+++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm |
@@ -6,6 +6,7 @@ |
#include "apps/app_shim/extension_app_shim_handler_mac.h" |
#include "base/command_line.h" |
+#include "base/mac/foundation_util.h" |
#include "base/mac/mac_util.h" |
#include "base/strings/sys_string_conversions.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -20,6 +21,7 @@ |
#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/web_contents.h" |
#include "extensions/common/extension.h" |
+#include "skia/ext/skia_utils_mac.h" |
#include "third_party/skia/include/core/SkRegion.h" |
#include "ui/gfx/skia_util.h" |
@@ -223,7 +225,15 @@ std::vector<gfx::Rect> CalculateNonDraggableRegions( |
@implementation ShellNSWindow |
@end |
-@interface ShellCustomFrameNSWindow : ShellNSWindow |
+@interface ShellCustomFrameNSWindow : ShellNSWindow { |
+ @private |
+ base::scoped_nsobject<NSColor> color_; |
+ base::scoped_nsobject<NSColor> inactiveColor_; |
+} |
+ |
+- (void)setColor:(NSColor*)color |
+ inactiveColor:(NSColor*)inactiveColor; |
+ |
@end |
@implementation ShellCustomFrameNSWindow |
@@ -240,10 +250,19 @@ std::vector<gfx::Rect> CalculateNonDraggableRegions( |
[[NSBezierPath bezierPathWithRoundedRect:[view bounds] |
xRadius:cornerRadius |
yRadius:cornerRadius] addClip]; |
- [[NSColor whiteColor] set]; |
+ if ([self isMainWindow] || [self isKeyWindow]) |
+ [color_ set]; |
+ else |
+ [inactiveColor_ set]; |
NSRectFill(rect); |
} |
+- (void)setColor:(NSColor*)color |
+ inactiveColor:(NSColor*)inactiveColor { |
+ color_.reset([color retain]); |
+ inactiveColor_.reset([inactiveColor retain]); |
+} |
+ |
@end |
@interface ShellFramelessNSWindow : ShellNSWindow |
@@ -303,17 +322,17 @@ NativeAppWindowCocoa::NativeAppWindowCocoa( |
is_resizable_(params.resizable), |
shows_resize_controls_(true), |
shows_fullscreen_controls_(true), |
+ has_frame_color_(params.has_frame_color), |
+ active_frame_color_(params.active_frame_color), |
+ inactive_frame_color_(params.inactive_frame_color), |
attention_request_id_(0) { |
Observe(WebContents()); |
base::scoped_nsobject<NSWindow> window; |
Class window_class; |
if (has_frame_) { |
- bool should_use_native_frame = |
- CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kAppsUseNativeFrame); |
- window_class = should_use_native_frame ? |
- [ShellNSWindow class] : [ShellCustomFrameNSWindow class]; |
+ window_class = has_frame_color_ ? |
+ [ShellCustomFrameNSWindow class] : [ShellNSWindow class]; |
} else { |
window_class = [ShellFramelessNSWindow class]; |
} |
@@ -334,6 +353,11 @@ NativeAppWindowCocoa::NativeAppWindowCocoa( |
name = extension->name(); |
[window setTitle:base::SysUTF8ToNSString(name)]; |
[[window contentView] cr_setWantsLayer:YES]; |
+ if (has_frame_ && has_frame_color_) { |
+ [base::mac::ObjCCastStrict<ShellCustomFrameNSWindow>(window) |
+ setColor:gfx::SkColorToSRGBNSColor(active_frame_color_) |
+ inactiveColor:gfx::SkColorToSRGBNSColor(inactive_frame_color_)]; |
+ } |
if (base::mac::IsOSSnowLeopard() && |
[window respondsToSelector:@selector(setBottomCornerRounded:)]) |
@@ -713,18 +737,15 @@ bool NativeAppWindowCocoa::IsFrameless() const { |
} |
bool NativeAppWindowCocoa::HasFrameColor() const { |
- // TODO(benwells): Implement this. |
- return false; |
+ return has_frame_color_; |
} |
SkColor NativeAppWindowCocoa::ActiveFrameColor() const { |
- // TODO(benwells): Implement this. |
- return SkColor(); |
+ return active_frame_color_; |
} |
SkColor NativeAppWindowCocoa::InactiveFrameColor() const { |
- // TODO(benwells): Implement this. |
- return SkColor(); |
+ return inactive_frame_color_; |
} |
gfx::Insets NativeAppWindowCocoa::GetFrameInsets() const { |
@@ -918,7 +939,8 @@ void NativeAppWindowCocoa::SetContentSizeConstraints( |
// Set the window to participate in Lion Fullscreen mode. Setting this flag |
// has no effect on Snow Leopard or earlier. UI controls for fullscreen are |
// only shown for apps that have unbounded size. |
- SetFullScreenCollectionBehavior(window(), shows_fullscreen_controls_); |
+ if (base::mac::IsOSLionOrLater()) |
+ SetFullScreenCollectionBehavior(window(), shows_fullscreen_controls_); |
} |
if (has_frame_) { |