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

Unified 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: 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 side-by-side diff with in-line comments
Download patch
Index: ui/base/cocoa/fullscreen_window_manager.mm
===================================================================
--- ui/base/cocoa/fullscreen_window_manager.mm (revision 0)
+++ ui/base/cocoa/fullscreen_window_manager.mm (revision 0)
@@ -0,0 +1,113 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ui/base/cocoa/fullscreen_window_manager.h"
+
+namespace {
+
+// Get the screen with the menu bar.
+NSScreen* GetMenuBarScreen() {
+ // Documentation in NSScreen says that the first object in
+ // +[NSScreen screens] is the menu bar screen.
+ NSArray *screens = [NSScreen screens];
+ if ([screens count])
+ return [screens objectAtIndex:0];
+ return nil;
+}
+
+// Get the screen with the dock.
+NSScreen* GetDockScreen() {
+ NSArray *screens = [NSScreen screens];
+ NSUInteger count = [screens count];
+ if (count == 0)
+ return NULL;
+ if (count == 1)
+ return [screens objectAtIndex:0];
+
+ for (NSUInteger i = 1; i < count; ++i) {
+ NSScreen* screen = [screens objectAtIndex:i];
+ // This screen is not the menu bar screen since it's not index 0. Therefore,
+ // the only reason that the frame would not match the visible frame is if
+ // the dock is on the screen.
+ if (!NSEqualRects([screen frame], [screen visibleFrame]))
+ return screen;
+ }
+ return [screens objectAtIndex:0];
+}
+
+} // namespace
+
+@interface FullscreenWindowManager()
+- (void)onScreenChanged:(NSNotification*)note;
+- (void)update;
+@end
+
+@implementation FullscreenWindowManager
+
+- (id)initWithWindow:(NSWindow*)window
+ desiredScreen:(NSScreen*)desiredScreen {
+ if ((self = [super init])) {
+ window_.reset([window retain]);
+ desiredScreen_.reset([desiredScreen retain]);
+ fullscreenMode_ = base::mac::kFullScreenModeNormal;
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(onScreenChanged:)
+ name:NSApplicationDidChangeScreenParametersNotification
+ object:NSApp];
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ [self exitFullscreenMode];
+ [super dealloc];
+}
+
+- (void)enterFullscreenMode {
+ if (fullscreenActive_)
+ return;
+ fullscreenActive_ = true;
+ [self update];
+}
+
+- (void)exitFullscreenMode {
+ if (!fullscreenActive_)
+ return;
+ fullscreenActive_ = false;
+ [self update];
+}
+
+- (void)onScreenChanged:(NSNotification*)note {
+ [self update];
+}
+
+- (void)update {
+ if (![[NSScreen screens] containsObject:desiredScreen_])
+ desiredScreen_.reset([[window_ screen] retain]);
+
+ base::mac::FullScreenMode newMode;
+ if (!fullscreenActive_)
+ newMode = base::mac::kFullScreenModeNormal;
+ else if (desiredScreen_ == GetMenuBarScreen())
+ newMode = base::mac::kFullScreenModeHideAll;
+ else if (desiredScreen_ == GetDockScreen())
+ newMode = base::mac::kFullScreenModeHideDock;
+ else
+ newMode = base::mac::kFullScreenModeNormal;
+
+ if (fullscreenMode_ != newMode) {
+ if (fullscreenMode_ != base::mac::kFullScreenModeNormal)
+ base::mac::ReleaseFullScreen(fullscreenMode_);
+ if (newMode != base::mac::kFullScreenModeNormal)
+ base::mac::RequestFullScreen(newMode);
+ fullscreenMode_ = newMode;
+ }
+
+ if (fullscreenActive_)
+ [window_ setFrame:[desiredScreen_ frame] display:YES];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698