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

Side by Side Diff: ui/base/cocoa/fullscreen_window_manager.mm

Issue 9838071: Implement pepper flash fullscreen on Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 8 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 #import "ui/base/cocoa/fullscreen_window_manager.h"
6
7 namespace {
8
9 // Get the screen with the menu bar.
10 NSScreen* GetMenuBarScreen() {
11 // Documentation in NSScreen says that the first object in
12 // +[NSScreen screens] is the menu bar screen.
13 NSArray *screens = [NSScreen screens];
14 if ([screens count])
15 return [screens objectAtIndex:0];
16 return nil;
17 }
18
19 // Get the screen with the dock.
20 NSScreen* GetDockScreen() {
21 NSArray *screens = [NSScreen screens];
22 NSUInteger count = [screens count];
23 if (count == 0)
24 return NULL;
25 if (count == 1)
26 return [screens objectAtIndex:0];
27
28 for (NSUInteger i = 1; i < count; ++i) {
29 NSScreen* screen = [screens objectAtIndex:i];
30 // This screen is not the menu bar screen since it's not index 0. Therefore,
31 // the only reason that the frame would not match the visible frame is if
32 // the dock is on the screen.
33 if (!NSEqualRects([screen frame], [screen visibleFrame]))
34 return screen;
35 }
36 return [screens objectAtIndex:0];
37 }
38
39 } // namespace
40
41 @interface FullscreenWindowManager()
42 - (void)onScreenChanged:(NSNotification*)note;
43 - (void)update;
44 @end
45
46 @implementation FullscreenWindowManager
47
48 - (id)initWithWindow:(NSWindow*)window
49 desiredScreen:(NSScreen*)desiredScreen {
50 if ((self = [super init])) {
51 window_.reset([window retain]);
52 desiredScreen_.reset([desiredScreen retain]);
53 fullscreenMode_ = base::mac::kFullScreenModeNormal;
54 [[NSNotificationCenter defaultCenter]
55 addObserver:self
56 selector:@selector(onScreenChanged:)
57 name:NSApplicationDidChangeScreenParametersNotification
58 object:NSApp];
59 }
60 return self;
61 }
62
63 - (void)dealloc {
64 [[NSNotificationCenter defaultCenter]
65 removeObserver:self];
Nico 2012/03/30 19:33:57 unwrap
sail 2012/03/30 23:06:06 Done.
66 [self exitFullscreenMode];
67 [super dealloc];
68 }
69
70 - (void)enterFullscreenMode {
71 if (fullscreenEnabled_)
72 return;
73 fullscreenEnabled_ = true;
74 [self update];
75 }
76
77 - (void)exitFullscreenMode {
78 if (!fullscreenEnabled_)
79 return;
80 fullscreenEnabled_ = false;
81 [self update];
82 }
83
84 - (void)onScreenChanged:(NSNotification*)note {
85 [self update];
86 }
87
88 - (void)update {
89 if (![[NSScreen screens] containsObject:desiredScreen_])
90 desiredScreen_.reset([[window_ screen] retain]);
91
92 base::mac::FullScreenMode newMode;
93 if (!fullscreenEnabled_)
94 newMode = base::mac::kFullScreenModeNormal;
95 else if (desiredScreen_ == GetMenuBarScreen())
96 newMode = base::mac::kFullScreenModeHideAll;
97 else if (desiredScreen_ == GetDockScreen())
98 newMode = base::mac::kFullScreenModeHideDock;
99 else
100 newMode = base::mac::kFullScreenModeNormal;
101
102 if (fullscreenMode_ != newMode) {
103 if (fullscreenMode_ != base::mac::kFullScreenModeNormal)
104 base::mac::ReleaseFullScreen(fullscreenMode_);
105 if (newMode != base::mac::kFullScreenModeNormal)
106 base::mac::RequestFullScreen(newMode);
107 fullscreenMode_ = newMode;
108 }
109
110 if (fullscreenEnabled_)
111 [window_ setFrame:[desiredScreen_ frame] display:YES];
112 }
113
114 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698