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 1b4af00c233e59d6bd8852160a0956b28d7474ab..ef35007322dd2774c0e04fcaf9bc9f162b36caee 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/web_contents.h" |
#include "content/public/browser/web_contents_view.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,9 +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)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view; |
+- (void)setColor:(NSColor*)color |
+ inactiveColor:(NSColor*)inactiveColor; |
@end |
@@ -243,18 +251,30 @@ 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); |
} |
-@end |
+- (void)setColor:(NSColor*)color |
+ inactiveColor:(NSColor*)inactiveColor { |
+ color_.reset([color retain]); |
+ inactiveColor_.reset([inactiveColor retain]); |
+} |
-@interface ShellFramelessNSWindow : ShellCustomFrameNSWindow |
+@end |
+@interface ShellFramelessNSWindow : ShellNSWindow |
+- (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view; |
@end |
@implementation ShellFramelessNSWindow |
+- (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view { |
+} |
+ |
+ (NSRect)frameRectForContentRect:(NSRect)contentRect |
styleMask:(NSUInteger)mask { |
return contentRect; |
@@ -306,17 +326,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(web_contents()); |
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]; |
} |
@@ -332,6 +352,11 @@ NativeAppWindowCocoa::NativeAppWindowCocoa( |
defer:NO]); |
[window setTitle:base::SysUTF8ToNSString(extension()->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:)]) |
@@ -373,11 +398,8 @@ NSUInteger NativeAppWindowCocoa::GetWindowStyleMask() const { |
NSMiniaturizableWindowMask; |
if (shows_resize_controls_) |
style_mask |= NSResizableWindowMask; |
- if (!has_frame_ || |
- !CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kAppsUseNativeFrame)) { |
+ if (!has_frame_) |
style_mask |= NSTexturedBackgroundWindowMask; |
- } |
return style_mask; |
} |
@@ -719,18 +741,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 { |
@@ -825,8 +844,10 @@ void NativeAppWindowCocoa::WindowDidFinishResize() { |
is_fullscreen_ = ([window() styleMask] & NSFullScreenWindowMask) != 0; |
// If not fullscreen but the window is constrained, disable the fullscreen UI |
// control. |
- if (!is_fullscreen_ && !shows_fullscreen_controls_) |
+ if (!is_fullscreen_ && !shows_fullscreen_controls_ && |
+ base::mac::IsOSLionOrLater()) { |
SetFullScreenCollectionBehavior(window(), false); |
+ } |
UpdateRestoredBounds(); |
} |
@@ -916,7 +937,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_) { |