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

Unified Diff: chrome/browser/cocoa/browser_window_controller.mm

Issue 126294: Mac fullscreen mode (with pkasting). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 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: chrome/browser/cocoa/browser_window_controller.mm
===================================================================
--- chrome/browser/cocoa/browser_window_controller.mm (revision 19517)
+++ chrome/browser/cocoa/browser_window_controller.mm (working copy)
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <Carbon/Carbon.h>
+
#include "base/mac_util.h"
#include "base/scoped_nsdisable_screen_updates.h"
#include "base/sys_string_conversions.h"
@@ -20,6 +22,7 @@
#import "chrome/browser/cocoa/download_shelf_controller.h"
#import "chrome/browser/cocoa/find_bar_cocoa_controller.h"
#include "chrome/browser/cocoa/find_bar_bridge.h"
+#import "chrome/browser/cocoa/fullscreen_window.h"
#import "chrome/browser/cocoa/status_bubble_mac.h"
#import "chrome/browser/cocoa/tab_strip_model_observer_bridge.h"
#import "chrome/browser/cocoa/tab_strip_view.h"
@@ -53,6 +56,7 @@
@interface BrowserWindowController(Private)
- (void)positionToolbar;
+- (void)removeToolbar;
- (void)installIncognitoBadge;
// Leopard's gradient heuristic gets confused by our tabs and makes the title
@@ -607,6 +611,63 @@
[findBarCocoaController_ positionFindBarView:[self tabContentArea]];
}
+// Adjust the UI for fullscreen mode. E.g. when going fullscreen,
+// remove the toolbar. When stopping fullscreen, add it back in.
+- (void)adjustUIForFullscreen:(BOOL)fullscreen {
+ if (fullscreen) {
+ // Disable showing of the bookmark bar. This does not toggle the
+ // preference.
+ [bookmarkBarController_ setBookmarkBarEnabled:NO];
+ // Make room for more content area.
+ [self removeToolbar];
+ // Hide the menubar, and allow it to un-hide when moving the mouse
+ // to the top of the screen. Does this eliminate the need for an
+ // info bubble describing how to exit fullscreen mode?
+ SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ } else {
+ SetSystemUIMode(kUIModeNormal, 0);
+ [self positionToolbar];
+ [bookmarkBarController_ setBookmarkBarEnabled:YES];
+ }
+}
+
+- (NSWindow*)fullscreenWindow {
+ return [[[FullscreenWindow alloc] initForScreen:[[self window] screen]]
+ autorelease];
+}
+
+- (void)setFullscreen:(BOOL)fullscreen {
+ fullscreen_ = fullscreen;
+ if (fullscreen) {
+ // Minimize our UI
+ [self adjustUIForFullscreen:fullscreen];
+ // Move content to a new fullscreen window
+ NSView* content = [[self window] contentView];
+ fullscreen_window_.reset([[self fullscreenWindow] retain]);
+ [content removeFromSuperview];
+ [fullscreen_window_ setContentView:content];
+ [self setWindow:fullscreen_window_.get()];
+ // Show one window, hide the other.
+ [fullscreen_window_ makeKeyAndOrderFront:self];
+ [content setNeedsDisplay:YES];
+ [window_ orderOut:self];
+ } else {
+ [self adjustUIForFullscreen:fullscreen];
+ NSView* content = [fullscreen_window_ contentView];
+ [content removeFromSuperview];
+ [window_ setContentView:content];
+ [self setWindow:window_.get()];
+ [window_ makeKeyAndOrderFront:self];
+ [content setNeedsDisplay:YES];
+ [fullscreen_window_ close];
+ fullscreen_window_.reset(nil);
+ }
+}
+
+- (BOOL)isFullscreen {
+ return fullscreen_;
+}
+
// Called by the bookmark bar to open a URL.
- (void)openBookmarkURL:(const GURL&)url
disposition:(WindowOpenDisposition)disposition {
@@ -661,28 +722,49 @@
@implementation BrowserWindowController (Private)
-// Position |toolbarView_| below the tab strip, but not as a sibling. The
-// toolbar is part of the window's contentView, mainly because we want the
-// opacity during drags to be the same as the web content.
-- (void)positionToolbar {
+// If |add| is YES:
+// Position |toolbarView_| below the tab strip, but not as a
+// sibling. The toolbar is part of the window's contentView, mainly
+// because we want the opacity during drags to be the same as the web
+// content. This can be used for either the initial add or a
+// reposition.
+// If |add| is NO:
+// Remove the toolbar from it's parent view (the window's content view).
+// Called when going fullscreen and we need to minimize UI.
+- (void)positionOrRemoveToolbar:(BOOL)add {
NSView* contentView = [self tabContentArea];
NSRect contentFrame = [contentView frame];
NSView* toolbarView = [toolbarController_ view];
NSRect toolbarFrame = [toolbarView frame];
- // Shrink the content area by the height of the toolbar.
- contentFrame.size.height -= toolbarFrame.size.height;
+ // Shrink or grow the content area by the height of the toolbar.
+ if (add)
+ contentFrame.size.height -= toolbarFrame.size.height;
+ else
+ contentFrame.size.height += toolbarFrame.size.height;
[contentView setFrame:contentFrame];
- // Move the toolbar above the content area, within the window's content view
- // (as opposed to the tab strip, which is a sibling).
- toolbarFrame.origin.y = NSMaxY(contentFrame);
- toolbarFrame.origin.x = 0;
- toolbarFrame.size.width = contentFrame.size.width;
- [toolbarView setFrame:toolbarFrame];
- [[[self window] contentView] addSubview:toolbarView];
+ if (add) {
+ // Move the toolbar above the content area, within the window's content view
+ // (as opposed to the tab strip, which is a sibling).
+ toolbarFrame.origin.y = NSMaxY(contentFrame);
+ toolbarFrame.origin.x = 0;
+ toolbarFrame.size.width = contentFrame.size.width;
+ [toolbarView setFrame:toolbarFrame];
+ [[[self window] contentView] addSubview:toolbarView];
+ } else {
+ [toolbarView removeFromSuperview];
+ }
}
+- (void)positionToolbar {
+ [self positionOrRemoveToolbar:YES];
+}
+
+- (void)removeToolbar {
+ [self positionOrRemoveToolbar:NO];
+}
+
// If the browser is in incognito mode, install the image view to decordate
// the window at the upper right. Use the same base y coordinate as the
// tab strip.
« no previous file with comments | « chrome/browser/cocoa/browser_window_controller.h ('k') | chrome/browser/cocoa/browser_window_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698