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

Side by Side Diff: extensions/shell/browser/shell_native_app_window_mac.mm

Issue 745093002: AppShell support for Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: jamescook2 Created 6 years 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
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "extensions/shell/browser/shell_native_app_window_mac.h"
tapted 2014/12/17 08:05:16 nit: import
Yoyo Zhou 2014/12/18 02:38:34 Done.
6
7 #import <Cocoa/Cocoa.h>
8
9 #include "base/logging.h"
10 #include "base/strings/sys_string_conversions.h"
11 #include "content/public/browser/web_contents.h"
12
13 @implementation ShellNativeAppWindowController
14
15 @synthesize appWindow = appWindow_;
16
17 - (void)windowWillClose:(NSNotification*)notification {
18 if (appWindow_)
19 appWindow_->WindowWillClose();
20 }
21
22 @end
23
24 // TODO(yoz): Do we need to handle commands (keyboard shortcuts)?
25 // Do we need need ChromeEventProcessingWindow or UnderlayOpenGLHostingWindow?
26 @interface ShellNSWindow : NSWindow
27 @end
28
29 @implementation ShellNSWindow
30
31 - (BOOL)_isTitleHidden {
32 return YES;
33 }
34
35 @end
36
37 namespace extensions {
38
39 ShellNativeAppWindowMac::ShellNativeAppWindowMac(
40 AppWindow* app_window,
41 const AppWindow::CreateParams& params)
42 : ShellNativeAppWindow(app_window, params) {
43 base::scoped_nsobject<NSWindow> shell_window;
44 NSUInteger style_mask = NSTitledWindowMask | NSClosableWindowMask;
45
46 NSRect cocoa_bounds = params.GetInitialWindowBounds(gfx::Insets()).ToCGRect();
47 // TODO(yoz): Flip coordinates here?
tapted 2014/12/17 08:05:16 you could use gfx::ScreenRectToNSRect from #import
Yoyo Zhou 2014/12/18 02:38:34 Done.
48
49 shell_window.reset(
50 [[ShellNSWindow alloc] initWithContentRect:cocoa_bounds
51 styleMask:style_mask
52 backing:NSBackingStoreBuffered
53 defer:NO]);
54
55 window_controller_.reset([[ShellNativeAppWindowController alloc]
56 initWithWindow:shell_window.release()]);
tapted 2014/12/17 08:05:16 The release() looks a bit like a leak, but it's ne
Yoyo Zhou 2014/12/18 02:38:34 This looks more complicated right now; I was hopin
tapted 2014/12/18 03:30:55 Corect - the releases are not the same. But NSWind
57
58 [[window_controller_ window] setDelegate:window_controller_];
59 [window_controller_ setAppWindow:this];
60
61 NSView* view = app_window->web_contents()->GetNativeView();
62 NSView* frameView = [window() contentView];
63 [view setFrame:[frameView bounds]];
64 [frameView addSubview:view];
65 }
66
67 ShellNativeAppWindowMac::~ShellNativeAppWindowMac() {
68 }
tapted 2014/12/17 08:05:16 this should call [window() setDelegate:nil]; (the
Yoyo Zhou 2014/12/18 02:38:34 Done.
69
70 bool ShellNativeAppWindowMac::IsActive() const {
71 NOTIMPLEMENTED();
tapted 2014/12/17 08:05:16 if you feel like it now.. [window() isKeyWindow] s
Yoyo Zhou 2014/12/18 02:38:34 Done.
72 return false;
73 }
74
75 gfx::NativeWindow ShellNativeAppWindowMac::GetNativeWindow() const {
76 return window();
77 }
78
79 gfx::Rect ShellNativeAppWindowMac::GetBounds() const {
80 // Flip coordinates based on the primary screen.
tapted 2014/12/17 08:05:16 return gfx::ScreenRectFromNSRect([window() frame])
Yoyo Zhou 2014/12/18 02:38:34 Done.
81 NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
82 NSRect frame = [[window_controller_ window] frame];
83 return gfx::Rect(frame.origin.x, NSHeight([screen frame]) - NSMaxY(frame),
84 NSWidth(frame), NSHeight(frame));
85 }
86
87 void ShellNativeAppWindowMac::Show() {
88 [window_controller_ showWindow:nil];
89 }
90
91 void ShellNativeAppWindowMac::Hide() {
92 NOTIMPLEMENTED();
93 }
94
95 void ShellNativeAppWindowMac::Activate() {
96 // TODO(yoz): Activate in front of other applications.
97 [[window_controller_ window] makeKeyAndOrderFront:window_controller_];
98 }
99
100 void ShellNativeAppWindowMac::Deactivate() {
101 // See crbug.com/51364.
102 NOTIMPLEMENTED();
103 }
104
105 void ShellNativeAppWindowMac::SetBounds(const gfx::Rect& bounds) {
106 // TODO(yoz): Windows should be fullscreen.
107 NOTIMPLEMENTED();
108 }
109
110 void ShellNativeAppWindowMac::WindowWillClose() {
111 [window_controller_ setAppWindow:NULL];
112 app_window()->OnNativeWindowChanged();
113 app_window()->OnNativeClose();
114 }
115
116 ShellNSWindow* ShellNativeAppWindowMac::window() const {
117 NSWindow* window = [window_controller_ window];
118 CHECK(!window || [window isKindOfClass:[ShellNSWindow class]]);
tapted 2014/12/17 08:05:16 maybe, from base/mac/foundation_util.h return b
Yoyo Zhou 2014/12/18 02:38:34 Done.
119 return static_cast<ShellNSWindow*>(window);
120 }
121
122 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698