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

Unified Diff: chrome/browser/ui/cocoa/browser_frame_view.mm

Issue 9700002: [Mac] Use NSThemeFrame instead of NSGrayFrame on 10.8. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 8 years, 9 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
« no previous file with comments | « chrome/browser/ui/cocoa/browser_frame_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/browser_frame_view.mm
diff --git a/chrome/browser/ui/cocoa/browser_frame_view.mm b/chrome/browser/ui/cocoa/browser_frame_view.mm
index 41d78385354df3ae072b4cda6980950d584a6c19..28bd181b404881225392ef3dc4eb0eb4a503fa15 100644
--- a/chrome/browser/ui/cocoa/browser_frame_view.mm
+++ b/chrome/browser/ui/cocoa/browser_frame_view.mm
@@ -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.
« no previous file with comments | « chrome/browser/ui/cocoa/browser_frame_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698