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

Side by Side Diff: chrome/browser/cocoa/browser_frame_view.mm

Issue 879003: Fix resolution independence in theming. Improve from "pretty broken" to "brok... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 123
124 // WARNING: There is an obvious optimization opportunity here that you DO NOT 124 // WARNING: There is an obvious optimization opportunity here that you DO NOT
125 // want to take. To save painting cycles, you might think it would be a good 125 // want to take. To save painting cycles, you might think it would be a good
126 // idea to call out to -drawRectOriginal: only if no theme were drawn. In 126 // idea to call out to -drawRectOriginal: only if no theme were drawn. In
127 // reality, however, if you fail to call -drawRectOriginal:, or if you call it 127 // reality, however, if you fail to call -drawRectOriginal:, or if you call it
128 // after a clipping path is set, the rounded corners at the top of the window 128 // after a clipping path is set, the rounded corners at the top of the window
129 // will not draw properly. Do not try to be smart here. 129 // will not draw properly. Do not try to be smart here.
130 130
131 // Only paint the top of the window. 131 // Only paint the top of the window.
132 NSWindow* window = [self window]; 132 NSWindow* window = [self window];
133 NSRect windowRect = [window frame]; 133 NSRect windowRect = [self convertRect:[window frame] fromView:nil];
134 windowRect.origin = NSMakePoint(0, 0); 134 windowRect.origin = NSMakePoint(0, 0);
135 135
136 NSRect paintRect = windowRect; 136 NSRect paintRect = windowRect;
137 paintRect.origin.y = NSMaxY(paintRect) - kBrowserFrameViewPaintHeight; 137 paintRect.origin.y = NSMaxY(paintRect) - kBrowserFrameViewPaintHeight;
138 paintRect.size.height = kBrowserFrameViewPaintHeight; 138 paintRect.size.height = kBrowserFrameViewPaintHeight;
139 rect = NSIntersectionRect(paintRect, rect); 139 rect = NSIntersectionRect(paintRect, rect);
140 [self drawRectOriginal:rect]; 140 [self drawRectOriginal:rect];
141 141
142 // Set up our clip. 142 // Set up our clip.
143 float cornerRadius = 4.0; 143 float cornerRadius = 4.0;
(...skipping 11 matching lines...) Expand all
155 155
156 // If the window needs a title and we painted over the title as drawn by the 156 // If the window needs a title and we painted over the title as drawn by the
157 // default window paint, paint it ourselves. 157 // default window paint, paint it ourselves.
158 if (themed && gCanDrawTitle && ![[self window] _isTitleHidden]) { 158 if (themed && gCanDrawTitle && ![[self window] _isTitleHidden]) {
159 [self _drawTitleStringIn:[self _titlebarTitleRect] 159 [self _drawTitleStringIn:[self _titlebarTitleRect]
160 withColor:[BrowserFrameView titleColorForThemeView:self]]; 160 withColor:[BrowserFrameView titleColorForThemeView:self]];
161 } 161 }
162 162
163 // Pinstripe the top. 163 // Pinstripe the top.
164 if (themed) { 164 if (themed) {
165 windowRect = [window frame]; 165 NSSize windowPixel = [self convertSizeFromBase:NSMakeSize(1, 1)];
166
167 windowRect = [self convertRect:[window frame] fromView:nil];
166 windowRect.origin = NSMakePoint(0, 0); 168 windowRect.origin = NSMakePoint(0, 0);
167 windowRect.origin.y -= 0.5; 169 windowRect.origin.y -= 0.5 * windowPixel.height;
168 windowRect.origin.x -= 0.5; 170 windowRect.origin.x -= 0.5 * windowPixel.width;
169 windowRect.size.width += 1.0; 171 windowRect.size.width += windowPixel.width;
170 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.5] set]; 172 [[NSColor colorWithCalibratedWhite:1.0 alpha:0.5] set];
171 NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:windowRect 173 NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:windowRect
172 xRadius:cornerRadius 174 xRadius:cornerRadius
173 yRadius:cornerRadius]; 175 yRadius:cornerRadius];
174 [path setLineWidth:1.0]; 176 [path setLineWidth:windowPixel.width];
175 [path stroke]; 177 [path stroke];
176 } 178 }
177 } 179 }
178 180
179 + (BOOL)drawWindowThemeInDirtyRect:(NSRect)dirtyRect 181 + (BOOL)drawWindowThemeInDirtyRect:(NSRect)dirtyRect
180 forView:(NSView*)view 182 forView:(NSView*)view
181 bounds:(NSRect)bounds { 183 bounds:(NSRect)bounds {
182 ThemeProvider* themeProvider = [[view window] themeProvider]; 184 ThemeProvider* themeProvider = [[view window] themeProvider];
183 if (!themeProvider) 185 if (!themeProvider)
184 return NO; 186 return NO;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 // patterns, we have to shift the pattern slightly, rather than simply 227 // patterns, we have to shift the pattern slightly, rather than simply
226 // drawing it from the top left corner. The offset below was empirically 228 // drawing it from the top left corner. The offset below was empirically
227 // determined in order to line these patterns up. 229 // determined in order to line these patterns up.
228 // 230 //
229 // This will make the themes look slightly different than in Windows/Linux 231 // This will make the themes look slightly different than in Windows/Linux
230 // because of the differing heights between window top and tab top, but this 232 // because of the differing heights between window top and tab top, but this
231 // has been approved by UI. 233 // has been approved by UI.
232 NSPoint phase = kBrowserFrameViewPatternPhaseOffset; 234 NSPoint phase = kBrowserFrameViewPatternPhaseOffset;
233 phase.y += NSHeight(bounds); 235 phase.y += NSHeight(bounds);
234 236
235 phase = [view convertPoint:phase toView:nil]; 237 // Align the phase to physical pixels so resizing the window under HiDPI
238 // doesn't cause wiggling of the theme.
239 phase = [view convertPointToBase:phase];
240 phase.x = floor(phase.x);
241 phase.y = floor(phase.y);
242 phase = [view convertPointFromBase:phase];
Nico 2010/03/11 23:38:32 :-)
236 243
237 [[NSGraphicsContext currentContext] setPatternPhase:phase]; 244 [[NSGraphicsContext currentContext] setPatternPhase:phase];
238 [themeImageColor set]; 245 [themeImageColor set];
239 NSRectFill(dirtyRect); 246 NSRectFill(dirtyRect);
240 themed = YES; 247 themed = YES;
241 } else if (gradient) { 248 } else if (gradient) {
242 NSPoint startPoint = NSMakePoint(NSMinX(bounds), NSMaxY(bounds)); 249 NSPoint startPoint = NSMakePoint(NSMinX(bounds), NSMaxY(bounds));
243 NSPoint endPoint = startPoint; 250 NSPoint endPoint = startPoint;
244 endPoint.y -= kBrowserFrameViewPaintHeight; 251 endPoint.y -= kBrowserFrameViewPaintHeight;
245 [gradient drawFromPoint:startPoint toPoint:endPoint options:0]; 252 [gradient drawFromPoint:startPoint toPoint:endPoint options:0];
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 - (void)updateTrackingAreas { 317 - (void)updateTrackingAreas {
311 [super updateTrackingAreas]; 318 [super updateTrackingAreas];
312 if ([[self window] isKindOfClass:[ChromeBrowserWindow class]]) { 319 if ([[self window] isKindOfClass:[ChromeBrowserWindow class]]) {
313 ChromeBrowserWindow* window = 320 ChromeBrowserWindow* window =
314 static_cast<ChromeBrowserWindow*>([self window]); 321 static_cast<ChromeBrowserWindow*>([self window]);
315 [window updateTrackingAreas]; 322 [window updateTrackingAreas];
316 } 323 }
317 } 324 }
318 325
319 @end 326 @end
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698