summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-14 23:23:20 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-14 23:23:20 +0000
commitccb92e8c07fd08a1d6d10f913decb5c4650b3034 (patch)
tree794068dcdf1fcbee04a45fed659f0006ee72f464 /chrome
parent6272f52603a630197cb11a3e6e6215c37c8aac18 (diff)
downloadchromium_src-ccb92e8c07fd08a1d6d10f913decb5c4650b3034.zip
chromium_src-ccb92e8c07fd08a1d6d10f913decb5c4650b3034.tar.gz
chromium_src-ccb92e8c07fd08a1d6d10f913decb5c4650b3034.tar.bz2
[Mac] Use NSThemeFrame instead of NSGrayFrame on 10.8.
BUG=114745 TEST=Theming works on 10.8. Review URL: http://codereview.chromium.org/9700002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126787 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/ui/cocoa/browser_frame_view.h6
-rw-r--r--chrome/browser/ui/cocoa/browser_frame_view.mm26
2 files changed, 20 insertions, 12 deletions
diff --git a/chrome/browser/ui/cocoa/browser_frame_view.h b/chrome/browser/ui/cocoa/browser_frame_view.h
index 1d5a095..68ee84b 100644
--- a/chrome/browser/ui/cocoa/browser_frame_view.h
+++ b/chrome/browser/ui/cocoa/browser_frame_view.h
@@ -1,11 +1,13 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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 <Cocoa/Cocoa.h>
// BrowserFrameView is a class whose methods we swizzle into NSGrayFrame
-// (an AppKit framework class) so that we can support custom frame drawing.
+// on 10.7 and below, or NSThemeFrame on 10.8 and above, so that we can
+// support custom frame drawing. This is used with a textured window so that
+// AppKit does not draw a title bar.
// This class is never to be instantiated on its own.
// We explored a variety of ways to support custom frame drawing and custom
// window widgets.
diff --git a/chrome/browser/ui/cocoa/browser_frame_view.mm b/chrome/browser/ui/cocoa/browser_frame_view.mm
index 41d7838..1677497 100644
--- a/chrome/browser/ui/cocoa/browser_frame_view.mm
+++ b/chrome/browser/ui/cocoa/browser_frame_view.mm
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -8,6 +8,7 @@
#import <Carbon/Carbon.h>
#include "base/logging.h"
+#include "base/mac/mac_util.h"
#include "base/mac/scoped_nsautorelease_pool.h"
#import "chrome/browser/themes/theme_service.h"
#import "chrome/browser/ui/cocoa/framed_browser_window.h"
@@ -46,22 +47,27 @@ static BOOL gCanGetCornerRadius = NO;
// roll overs for our close widgets, but things should still function
// correctly.
base::mac::ScopedNSAutoreleasePool pool;
- Class grayFrameClass = NSClassFromString(@"NSGrayFrame");
- DCHECK(grayFrameClass);
- if (!grayFrameClass) return;
+
+ // On 10.8+ the background for textured windows are no longer drawn by
+ // NSGrayFrame, and NSThemeFrame is used instead <http://crbug.com/114745>.
+ Class borderViewClass = NSClassFromString(
+ base::mac::IsOSMountainLionOrLater() ? @"NSThemeFrame" : @"NSGrayFrame");
+ DCHECK(borderViewClass);
+ if (!borderViewClass) return;
// Exchange draw rect.
Method m0 = class_getInstanceMethod([self class], @selector(drawRect:));
DCHECK(m0);
if (m0) {
- BOOL didAdd = class_addMethod(grayFrameClass,
+ BOOL didAdd = class_addMethod(borderViewClass,
@selector(drawRectOriginal:),
method_getImplementation(m0),
method_getTypeEncoding(m0));
DCHECK(didAdd);
if (didAdd) {
- Method m1 = class_getInstanceMethod(grayFrameClass, @selector(drawRect:));
- Method m2 = class_getInstanceMethod(grayFrameClass,
+ Method m1 = class_getInstanceMethod(borderViewClass,
+ @selector(drawRect:));
+ Method m2 = class_getInstanceMethod(borderViewClass,
@selector(drawRectOriginal:));
DCHECK(m1 && m2);
if (m1 && m2) {
@@ -71,12 +77,12 @@ static BOOL gCanGetCornerRadius = NO;
}
gCanDrawTitle =
- [grayFrameClass
+ [borderViewClass
instancesRespondToSelector:@selector(_titlebarTitleRect)] &&
- [grayFrameClass
+ [borderViewClass
instancesRespondToSelector:@selector(_drawTitleStringIn:withColor:)];
gCanGetCornerRadius =
- [grayFrameClass
+ [borderViewClass
instancesRespondToSelector:@selector(roundedCornerRadius)];
// Add _shadowFlags. This is a method on NSThemeFrame, not on NSGrayFrame.