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

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_utils.mm

Issue 19918002: Refactor [FramedBrowserWindow drawWindowThemeInDirtyRect:] to use themeImagePositionForAlignment: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ui/cocoa/browser_window_utils.h" 5 #import "chrome/browser/ui/cocoa/browser_window_utils.h"
6 6
7 #include <Carbon/Carbon.h> 7 #include <Carbon/Carbon.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "chrome/app/chrome_command_ids.h" 10 #include "chrome/app/chrome_command_ids.h"
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 138
139 [[NSRunLoop currentRunLoop] 139 [[NSRunLoop currentRunLoop]
140 performSelector:@selector(setTitle:) 140 performSelector:@selector(setTitle:)
141 target:window 141 target:window
142 argument:newTitle 142 argument:newTitle
143 order:0 143 order:0
144 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]]; 144 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]];
145 return [newTitle copy]; 145 return [newTitle copy];
146 } 146 }
147 147
148 // Our patterns want to be drawn from the upper left hand corner of the view. 148 // The titlebar/tabstrip header on the mac is slightly smaller than on Windows.
149 // Cocoa wants to do it from the lower left of the window. 149 // There is also no window frame to the left of the web contents on mac.
150 // To keep:
151 // - the window background pattern (IDR_THEME_FRAME.*) lined up vertically with
152 // the tab and toolbar patterns
153 // - the toolbar pattern lined up horizontally with the NTP background.
154 // we have to shift the pattern slightly, rather than drawing from the top left
155 // corner of the frame / tabstrip. The offsets below were empirically determined
156 // in order to line these patterns up.
150 // 157 //
151 // Rephase our pattern to fit this view. Some other views (Tabs, Toolbar etc.) 158 // This will make the themes look slightly different than in Windows/Linux
152 // will phase their patterns relative to this so all the views look right. 159 // because of the differing heights between window top and tab top, but this has
153 // 160 // been approved by UI.
154 // To line up the background pattern with the pattern in the browser window
155 // the background pattern for the tabs needs to be moved left by 5 pixels.
156 const CGFloat kPatternHorizontalOffset = -5; 161 const CGFloat kPatternHorizontalOffset = -5;
157 // To match Windows and CrOS, have to offset vertically by 2 pixels.
158 // Without tab strip, offset an extra pixel (determined by experimentation). 162 // Without tab strip, offset an extra pixel (determined by experimentation).
159 const CGFloat kPatternVerticalOffset = 2; 163 const CGFloat kPatternVerticalOffset = 2;
160 const CGFloat kPatternVerticalOffsetNoTabStrip = 3; 164 const CGFloat kPatternVerticalOffsetNoTabStrip = 3;
161 165
166 + (NSPoint)themeImagePositionFor:(NSView*)windowView
167 withTabStrip:(NSView*)tabStripView
168 alignment:(ThemeImageAlignment)alignment {
169 if (!tabStripView) {
170 return NSMakePoint(kPatternHorizontalOffset,
171 NSHeight([windowView bounds]) +
172 kPatternVerticalOffsetNoTabStrip);
173 }
162 174
163 + (NSPoint)themePatternPhaseFor:(NSView*)windowView 175 NSPoint position =
164 withTabStrip:(NSView*)tabStripView { 176 [BrowserWindowUtils themeImagePositionInTabStripCoords:tabStripView
165 // When we have a tab strip, line up with the top of the tab, otherwise, 177 alignment:alignment];
166 // line up with the top of the window. 178 return [tabStripView convertPoint:position toView:windowView];
167 if (!tabStripView) 179 }
180
181 + (NSPoint) themeImagePositionInTabStripCoords:(NSView*)tabStripView
Robert Sesek 2013/07/30 14:25:24 nit: no space after )
182 alignment:(ThemeImageAlignment)alignment {
183 DCHECK(tabStripView);
184
185 if (alignment == THEME_IMAGE_ALIGN_WITH_TAB_STRIP) {
186 // The theme image is lined up with the top of the tab which is below the
187 // top of the tab strip.
168 return NSMakePoint(kPatternHorizontalOffset, 188 return NSMakePoint(kPatternHorizontalOffset,
169 NSHeight([windowView bounds]) 189 [TabStripController defaultTabHeight] +
170 + kPatternVerticalOffsetNoTabStrip); 190 kPatternVerticalOffset);
171 191 }
172 NSRect tabStripViewWindowBounds = [tabStripView bounds]; 192 // The theme image is lined up with the top of the tab strip (as opposed to
173 tabStripViewWindowBounds = 193 // the top of the tab above). This is the same as lining up with the top of
174 [tabStripView convertRect:tabStripViewWindowBounds 194 // the window's root view when not in presentation mode.
175 toView:windowView]; 195 return NSMakePoint(kPatternHorizontalOffset,
176 return NSMakePoint(NSMinX(tabStripViewWindowBounds) 196 NSHeight([tabStripView bounds]) +
177 + kPatternHorizontalOffset, 197 kPatternVerticalOffsetNoTabStrip);
178 NSMinY(tabStripViewWindowBounds)
179 + [TabStripController defaultTabHeight]
180 + kPatternVerticalOffset);
181 } 198 }
182 199
183 + (void)activateWindowForController:(NSWindowController*)controller { 200 + (void)activateWindowForController:(NSWindowController*)controller {
184 // Per http://crbug.com/73779 and http://crbug.com/75223, we need this to 201 // Per http://crbug.com/73779 and http://crbug.com/75223, we need this to
185 // properly activate windows if Chrome is not the active application. 202 // properly activate windows if Chrome is not the active application.
186 [[controller window] makeKeyAndOrderFront:controller]; 203 [[controller window] makeKeyAndOrderFront:controller];
187 ProcessSerialNumber psn; 204 ProcessSerialNumber psn;
188 GetCurrentProcess(&psn); 205 GetCurrentProcess(&psn);
189 SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly); 206 SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
190 } 207 }
191 208
192 @end 209 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698