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

Side by Side Diff: trunk/src/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm

Issue 265843005: Revert 267559 "[Mac] Implement frame.[color|inactiveColor]." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 7 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h" 5 #include "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h"
6 6
7 #include "apps/app_shim/extension_app_shim_handler_mac.h" 7 #include "apps/app_shim/extension_app_shim_handler_mac.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/mac/foundation_util.h"
10 #include "base/mac/mac_util.h" 9 #include "base/mac/mac_util.h"
11 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
12 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/ui/cocoa/browser_window_utils.h" 12 #include "chrome/browser/ui/cocoa/browser_window_utils.h"
14 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h" 13 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h"
15 #include "chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa .h" 14 #include "chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa .h"
16 #include "chrome/browser/ui/cocoa/extensions/extension_view_mac.h" 15 #include "chrome/browser/ui/cocoa/extensions/extension_view_mac.h"
17 #import "chrome/browser/ui/cocoa/nsview_additions.h" 16 #import "chrome/browser/ui/cocoa/nsview_additions.h"
18 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
19 #include "content/public/browser/native_web_keyboard_event.h" 18 #include "content/public/browser/native_web_keyboard_event.h"
20 #include "content/public/browser/render_widget_host_view.h" 19 #include "content/public/browser/render_widget_host_view.h"
21 #include "content/public/browser/web_contents.h" 20 #include "content/public/browser/web_contents.h"
22 #include "content/public/browser/web_contents_view.h" 21 #include "content/public/browser/web_contents_view.h"
23 #include "extensions/common/extension.h" 22 #include "extensions/common/extension.h"
24 #include "skia/ext/skia_utils_mac.h"
25 #include "third_party/skia/include/core/SkRegion.h" 23 #include "third_party/skia/include/core/SkRegion.h"
26 #include "ui/gfx/skia_util.h" 24 #include "ui/gfx/skia_util.h"
27 25
28 // NOTE: State Before Update. 26 // NOTE: State Before Update.
29 // 27 //
30 // Internal state, such as |is_maximized_|, must be set before the window 28 // Internal state, such as |is_maximized_|, must be set before the window
31 // state is changed so that it is accurate when e.g. a resize results in a call 29 // state is changed so that it is accurate when e.g. a resize results in a call
32 // to |OnNativeWindowChanged|. 30 // to |OnNativeWindowChanged|.
33 31
34 // NOTE: Maximize and Zoom. 32 // NOTE: Maximize and Zoom.
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 - (CGFloat)roundedCornerRadius; 216 - (CGFloat)roundedCornerRadius;
219 @end 217 @end
220 218
221 // TODO(jamescook): Should these be AppNSWindow to match apps::AppWindow? 219 // TODO(jamescook): Should these be AppNSWindow to match apps::AppWindow?
222 // http://crbug.com/344082 220 // http://crbug.com/344082
223 @interface ShellNSWindow : ChromeEventProcessingWindow 221 @interface ShellNSWindow : ChromeEventProcessingWindow
224 @end 222 @end
225 @implementation ShellNSWindow 223 @implementation ShellNSWindow
226 @end 224 @end
227 225
228 @interface ShellCustomFrameNSWindow : ShellNSWindow { 226 @interface ShellCustomFrameNSWindow : ShellNSWindow
229 @private
230 base::scoped_nsobject<NSColor> color_;
231 base::scoped_nsobject<NSColor> inactiveColor_;
232 }
233 227
234 - (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view; 228 - (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view;
235 - (void)setColor:(NSColor*)color
236 inactiveColor:(NSColor*)inactiveColor;
237 229
238 @end 230 @end
239 231
240 @implementation ShellCustomFrameNSWindow 232 @implementation ShellCustomFrameNSWindow
241 233
242 - (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view { 234 - (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view {
243 [[NSBezierPath bezierPathWithRect:rect] addClip]; 235 [[NSBezierPath bezierPathWithRect:rect] addClip];
244 [[NSColor clearColor] set]; 236 [[NSColor clearColor] set];
245 NSRectFill(rect); 237 NSRectFill(rect);
246 238
247 // Set up our clip. 239 // Set up our clip.
248 CGFloat cornerRadius = 4.0; 240 CGFloat cornerRadius = 4.0;
249 if ([view respondsToSelector:@selector(roundedCornerRadius)]) 241 if ([view respondsToSelector:@selector(roundedCornerRadius)])
250 cornerRadius = [view roundedCornerRadius]; 242 cornerRadius = [view roundedCornerRadius];
251 [[NSBezierPath bezierPathWithRoundedRect:[view bounds] 243 [[NSBezierPath bezierPathWithRoundedRect:[view bounds]
252 xRadius:cornerRadius 244 xRadius:cornerRadius
253 yRadius:cornerRadius] addClip]; 245 yRadius:cornerRadius] addClip];
254 if ([self isMainWindow] || [self isKeyWindow]) 246 [[NSColor whiteColor] set];
255 [color_ set];
256 else
257 [inactiveColor_ set];
258 NSRectFill(rect); 247 NSRectFill(rect);
259 } 248 }
260 249
261 - (void)setColor:(NSColor*)color
262 inactiveColor:(NSColor*)inactiveColor {
263 color_.reset([color retain]);
264 inactiveColor_.reset([inactiveColor retain]);
265 }
266
267 @end 250 @end
268 251
269 @interface ShellFramelessNSWindow : ShellNSWindow 252 @interface ShellFramelessNSWindow : ShellCustomFrameNSWindow
270 - (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view; 253
271 @end 254 @end
272 255
273 @implementation ShellFramelessNSWindow 256 @implementation ShellFramelessNSWindow
274 257
275 - (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view {
276 }
277
278 + (NSRect)frameRectForContentRect:(NSRect)contentRect 258 + (NSRect)frameRectForContentRect:(NSRect)contentRect
279 styleMask:(NSUInteger)mask { 259 styleMask:(NSUInteger)mask {
280 return contentRect; 260 return contentRect;
281 } 261 }
282 262
283 + (NSRect)contentRectForFrameRect:(NSRect)frameRect 263 + (NSRect)contentRectForFrameRect:(NSRect)frameRect
284 styleMask:(NSUInteger)mask { 264 styleMask:(NSUInteger)mask {
285 return frameRect; 265 return frameRect;
286 } 266 }
287 267
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 const AppWindow::CreateParams& params) 299 const AppWindow::CreateParams& params)
320 : app_window_(app_window), 300 : app_window_(app_window),
321 has_frame_(params.frame == AppWindow::FRAME_CHROME), 301 has_frame_(params.frame == AppWindow::FRAME_CHROME),
322 is_hidden_(false), 302 is_hidden_(false),
323 is_hidden_with_app_(false), 303 is_hidden_with_app_(false),
324 is_maximized_(false), 304 is_maximized_(false),
325 is_fullscreen_(false), 305 is_fullscreen_(false),
326 is_resizable_(params.resizable), 306 is_resizable_(params.resizable),
327 shows_resize_controls_(true), 307 shows_resize_controls_(true),
328 shows_fullscreen_controls_(true), 308 shows_fullscreen_controls_(true),
329 has_frame_color_(params.has_frame_color),
330 active_frame_color_(params.active_frame_color),
331 inactive_frame_color_(params.inactive_frame_color),
332 attention_request_id_(0) { 309 attention_request_id_(0) {
333 Observe(web_contents()); 310 Observe(web_contents());
334 311
335 base::scoped_nsobject<NSWindow> window; 312 base::scoped_nsobject<NSWindow> window;
336 Class window_class; 313 Class window_class;
337 if (has_frame_) { 314 if (has_frame_) {
338 window_class = has_frame_color_ ? 315 bool should_use_native_frame =
339 [ShellCustomFrameNSWindow class] : [ShellNSWindow class]; 316 CommandLine::ForCurrentProcess()->HasSwitch(
317 switches::kAppsUseNativeFrame);
318 window_class = should_use_native_frame ?
319 [ShellNSWindow class] : [ShellCustomFrameNSWindow class];
340 } else { 320 } else {
341 window_class = [ShellFramelessNSWindow class]; 321 window_class = [ShellFramelessNSWindow class];
342 } 322 }
343 323
344 // Estimate the initial bounds of the window. Once the frame insets are known, 324 // Estimate the initial bounds of the window. Once the frame insets are known,
345 // the window bounds and constraints can be set precisely. 325 // the window bounds and constraints can be set precisely.
346 NSRect cocoa_bounds = GfxToCocoaBounds( 326 NSRect cocoa_bounds = GfxToCocoaBounds(
347 params.GetInitialWindowBounds(gfx::Insets())); 327 params.GetInitialWindowBounds(gfx::Insets()));
348 window.reset([[window_class alloc] 328 window.reset([[window_class alloc]
349 initWithContentRect:cocoa_bounds 329 initWithContentRect:cocoa_bounds
350 styleMask:GetWindowStyleMask() 330 styleMask:GetWindowStyleMask()
351 backing:NSBackingStoreBuffered 331 backing:NSBackingStoreBuffered
352 defer:NO]); 332 defer:NO]);
353 [window setTitle:base::SysUTF8ToNSString(extension()->name())]; 333 [window setTitle:base::SysUTF8ToNSString(extension()->name())];
354 [[window contentView] cr_setWantsLayer:YES]; 334 [[window contentView] cr_setWantsLayer:YES];
355 if (has_frame_ && has_frame_color_) {
356 [base::mac::ObjCCastStrict<ShellCustomFrameNSWindow>(window)
357 setColor:gfx::SkColorToSRGBNSColor(active_frame_color_)
358 inactiveColor:gfx::SkColorToSRGBNSColor(inactive_frame_color_)];
359 }
360 335
361 if (base::mac::IsOSSnowLeopard() && 336 if (base::mac::IsOSSnowLeopard() &&
362 [window respondsToSelector:@selector(setBottomCornerRounded:)]) 337 [window respondsToSelector:@selector(setBottomCornerRounded:)])
363 [window setBottomCornerRounded:NO]; 338 [window setBottomCornerRounded:NO];
364 339
365 if (params.always_on_top) 340 if (params.always_on_top)
366 [window setLevel:AlwaysOnTopWindowLevel()]; 341 [window setLevel:AlwaysOnTopWindowLevel()];
367 InitCollectionBehavior(window); 342 InitCollectionBehavior(window);
368 343
369 window_controller_.reset( 344 window_controller_.reset(
(...skipping 21 matching lines...) Expand all
391 window, 366 window,
392 extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY, 367 extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY,
393 NULL)); 368 NULL));
394 } 369 }
395 370
396 NSUInteger NativeAppWindowCocoa::GetWindowStyleMask() const { 371 NSUInteger NativeAppWindowCocoa::GetWindowStyleMask() const {
397 NSUInteger style_mask = NSTitledWindowMask | NSClosableWindowMask | 372 NSUInteger style_mask = NSTitledWindowMask | NSClosableWindowMask |
398 NSMiniaturizableWindowMask; 373 NSMiniaturizableWindowMask;
399 if (shows_resize_controls_) 374 if (shows_resize_controls_)
400 style_mask |= NSResizableWindowMask; 375 style_mask |= NSResizableWindowMask;
401 if (!has_frame_) 376 if (!has_frame_ ||
377 !CommandLine::ForCurrentProcess()->HasSwitch(
378 switches::kAppsUseNativeFrame)) {
402 style_mask |= NSTexturedBackgroundWindowMask; 379 style_mask |= NSTexturedBackgroundWindowMask;
380 }
403 return style_mask; 381 return style_mask;
404 } 382 }
405 383
406 void NativeAppWindowCocoa::InstallView() { 384 void NativeAppWindowCocoa::InstallView() {
407 NSView* view = web_contents()->GetView()->GetNativeView(); 385 NSView* view = web_contents()->GetView()->GetNativeView();
408 if (has_frame_) { 386 if (has_frame_) {
409 [view setFrame:[[window() contentView] bounds]]; 387 [view setFrame:[[window() contentView] bounds]];
410 [[window() contentView] addSubview:view]; 388 [[window() contentView] addSubview:view];
411 if (!shows_fullscreen_controls_) 389 if (!shows_fullscreen_controls_)
412 [[window() standardWindowButton:NSWindowZoomButton] setEnabled:NO]; 390 [[window() standardWindowButton:NSWindowZoomButton] setEnabled:NO];
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 bool NativeAppWindowCocoa::IsFrameless() const { 717 bool NativeAppWindowCocoa::IsFrameless() const {
740 return !has_frame_; 718 return !has_frame_;
741 } 719 }
742 720
743 bool NativeAppWindowCocoa::HasFrameColor() const { 721 bool NativeAppWindowCocoa::HasFrameColor() const {
744 // TODO(benwells): Implement this. 722 // TODO(benwells): Implement this.
745 return false; 723 return false;
746 } 724 }
747 725
748 SkColor NativeAppWindowCocoa::ActiveFrameColor() const { 726 SkColor NativeAppWindowCocoa::ActiveFrameColor() const {
749 return active_frame_color_; 727 // TODO(benwells): Implement this.
728 return SkColor();
750 } 729 }
751 730
752 SkColor NativeAppWindowCocoa::InactiveFrameColor() const { 731 SkColor NativeAppWindowCocoa::InactiveFrameColor() const {
753 return inactive_frame_color_; 732 // TODO(benwells): Implement this.
733 return SkColor();
754 } 734 }
755 735
756 gfx::Insets NativeAppWindowCocoa::GetFrameInsets() const { 736 gfx::Insets NativeAppWindowCocoa::GetFrameInsets() const {
757 if (!has_frame_) 737 if (!has_frame_)
758 return gfx::Insets(); 738 return gfx::Insets();
759 739
760 // Flip the coordinates based on the main screen. 740 // Flip the coordinates based on the main screen.
761 NSInteger screen_height = 741 NSInteger screen_height =
762 NSHeight([[[NSScreen screens] objectAtIndex:0] frame]); 742 NSHeight([[[NSScreen screens] objectAtIndex:0] frame]);
763 743
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 } 941 }
962 942
963 void NativeAppWindowCocoa::UpdateRestoredBounds() { 943 void NativeAppWindowCocoa::UpdateRestoredBounds() {
964 if (IsRestored(*this)) 944 if (IsRestored(*this))
965 restored_bounds_ = [window() frame]; 945 restored_bounds_ = [window() frame];
966 } 946 }
967 947
968 void NativeAppWindowCocoa::HideWithoutMarkingHidden() { 948 void NativeAppWindowCocoa::HideWithoutMarkingHidden() {
969 [window() orderOut:window_controller_]; 949 [window() orderOut:window_controller_];
970 } 950 }
OLDNEW
« no previous file with comments | « trunk/src/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h ('k') | trunk/src/chrome/common/chrome_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698