| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/cocoa/browser_frame_view.h" | 5 #import "chrome/browser/cocoa/browser_frame_view.h" |
| 6 | 6 |
| 7 #import <objc/runtime.h> | 7 #import <objc/runtime.h> |
| 8 #import <Carbon/Carbon.h> | 8 #import <Carbon/Carbon.h> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/scoped_nsautorelease_pool.h" | 11 #include "base/scoped_nsautorelease_pool.h" |
| 12 #import "chrome/browser/cocoa/chrome_browser_window.h" | 12 #import "chrome/browser/cocoa/chrome_browser_window.h" |
| 13 #import "third_party/GTM/AppKit/GTMTheme.h" | 13 #import "third_party/GTM/AppKit/GTMTheme.h" |
| 14 | 14 |
| 15 // To line up our background pattern with the patterns in the tabs we need | |
| 16 // to move our background patterns in the window frame up by two pixels. | |
| 17 // This will make the themes look slightly different than in Windows/Linux | |
| 18 // because of the differing heights between window top and tab top, but this | |
| 19 // has been approved by UI. | |
| 20 static const NSInteger kBrowserFrameViewPatternPhaseOffset = 2; | |
| 21 | |
| 22 @interface NSView (Swizzles) | 15 @interface NSView (Swizzles) |
| 23 - (void)drawRectOriginal:(NSRect)rect; | 16 - (void)drawRectOriginal:(NSRect)rect; |
| 24 - (BOOL)_mouseInGroup:(NSButton*)widget; | 17 - (BOOL)_mouseInGroup:(NSButton*)widget; |
| 25 - (void)updateTrackingAreas; | 18 - (void)updateTrackingAreas; |
| 26 @end | 19 @end |
| 27 | 20 |
| 28 @implementation BrowserFrameView | 21 @implementation BrowserFrameView |
| 29 | 22 |
| 30 + (void)load { | 23 + (void)load { |
| 31 // This is where we swizzle drawRect, and add in two methods that we | 24 // This is where we swizzle drawRect, and add in two methods that we |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 [[NSBezierPath bezierPathWithRect:rect] addClip]; | 104 [[NSBezierPath bezierPathWithRect:rect] addClip]; |
| 112 | 105 |
| 113 // Draw our background color if we have one, otherwise fall back on | 106 // Draw our background color if we have one, otherwise fall back on |
| 114 // system drawing. | 107 // system drawing. |
| 115 GTMTheme* theme = [self gtm_theme]; | 108 GTMTheme* theme = [self gtm_theme]; |
| 116 GTMThemeState state = [window isMainWindow] ? GTMThemeStateActiveWindow | 109 GTMThemeState state = [window isMainWindow] ? GTMThemeStateActiveWindow |
| 117 : GTMThemeStateInactiveWindow; | 110 : GTMThemeStateInactiveWindow; |
| 118 NSColor* color = [theme backgroundPatternColorForStyle:GTMThemeStyleWindow | 111 NSColor* color = [theme backgroundPatternColorForStyle:GTMThemeStyleWindow |
| 119 state:state]; | 112 state:state]; |
| 120 if (color) { | 113 if (color) { |
| 121 // If we have a theme pattern, draw it here. | 114 // If there is a theme pattern, draw it here. |
| 122 NSPoint phase = NSMakePoint(0, (NSHeight(windowRect) + | 115 |
| 123 kBrowserFrameViewPatternPhaseOffset)); | 116 // To line up the background pattern with the patterns in the tabs the |
| 117 // background pattern in the window frame need to be moved up by two |
| 118 // pixels and left by 5. |
| 119 // This will make the themes look slightly different than in Windows/Linux |
| 120 // because of the differing heights between window top and tab top, but this |
| 121 // has been approved by UI. |
| 122 static const NSPoint kBrowserFrameViewPatternPhaseOffset = { -5, 2 }; |
| 123 NSPoint phase = kBrowserFrameViewPatternPhaseOffset; |
| 124 phase.y += NSHeight(windowRect); |
| 124 [[NSGraphicsContext currentContext] setPatternPhase:phase]; | 125 [[NSGraphicsContext currentContext] setPatternPhase:phase]; |
| 125 [color set]; | 126 [color set]; |
| 126 NSRectFill(rect); | 127 NSRectFill(rect); |
| 127 } | 128 } |
| 128 | 129 |
| 129 // Check to see if we have an overlay image. | 130 // Check to see if we have an overlay image. |
| 130 NSImage* overlayImage = [theme valueForAttribute:@"overlay" | 131 NSImage* overlayImage = [theme valueForAttribute:@"overlay" |
| 131 style:GTMThemeStyleWindow | 132 style:GTMThemeStyleWindow |
| 132 state:state]; | 133 state:state]; |
| 133 if (overlayImage) { | 134 if (overlayImage) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 161 - (void)updateTrackingAreas { | 162 - (void)updateTrackingAreas { |
| 162 [super updateTrackingAreas]; | 163 [super updateTrackingAreas]; |
| 163 if ([[self window] isKindOfClass:[ChromeBrowserWindow class]]) { | 164 if ([[self window] isKindOfClass:[ChromeBrowserWindow class]]) { |
| 164 ChromeBrowserWindow* window = | 165 ChromeBrowserWindow* window = |
| 165 static_cast<ChromeBrowserWindow*>([self window]); | 166 static_cast<ChromeBrowserWindow*>([self window]); |
| 166 [window updateTrackingAreas]; | 167 [window updateTrackingAreas]; |
| 167 } | 168 } |
| 168 } | 169 } |
| 169 | 170 |
| 170 @end | 171 @end |
| OLD | NEW |