summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/fullscreen_controller.mm
diff options
context:
space:
mode:
authorrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-03 19:27:28 +0000
committerrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-03 19:27:28 +0000
commitce04f0c9b299f5afbc6a44839f302baabe498cd1 (patch)
tree83b7b5fb2b88a95930d7a2d9360b7b2427567bb7 /chrome/browser/cocoa/fullscreen_controller.mm
parentea2cad155442906261ce832585a36630c6f10d98 (diff)
downloadchromium_src-ce04f0c9b299f5afbc6a44839f302baabe498cd1.zip
chromium_src-ce04f0c9b299f5afbc6a44839f302baabe498cd1.tar.gz
chromium_src-ce04f0c9b299f5afbc6a44839f302baabe498cd1.tar.bz2
[Mac] When in fullscreen mode, ties the menubar shown state to the overlay shown state.
BUG=36610 TEST=Go fullscreen. Menubar should only be shown when the overlay is fully visible. TEST=While in fullscreen mode, fullscreen a youtube video. Menubar should be autohidden (mousing to the top of the screen should show it). Review URL: http://codereview.chromium.org/661380 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40529 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/fullscreen_controller.mm')
-rw-r--r--chrome/browser/cocoa/fullscreen_controller.mm71
1 files changed, 52 insertions, 19 deletions
diff --git a/chrome/browser/cocoa/fullscreen_controller.mm b/chrome/browser/cocoa/fullscreen_controller.mm
index 3e36777..3c67409 100644
--- a/chrome/browser/cocoa/fullscreen_controller.mm
+++ b/chrome/browser/cocoa/fullscreen_controller.mm
@@ -6,7 +6,6 @@
#include <algorithm>
-#include "base/mac_util.h"
#import "chrome/browser/cocoa/browser_window_controller.h"
#import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h"
@@ -29,11 +28,11 @@ const CGFloat kTabStripVerticalOffset = 14;
// Helper class to manage animations for the fullscreen dropdown bar. Calls
-// back to [BrowserWindowController setFloatingBarShownFraction] once per
-// animation step.
+// [FullscreenController changeFloatingBarShownFraction] once per animation
+// step.
@interface DropdownAnimation : NSAnimation {
@private
- BrowserWindowController* controller_;
+ FullscreenController* controller_;
CGFloat startFraction_;
CGFloat endFraction_;
}
@@ -47,7 +46,7 @@ const CGFloat kTabStripVerticalOffset = 14;
- (id)initWithFraction:(CGFloat)fromFraction
fullDuration:(CGFloat)fullDuration
animationCurve:(NSInteger)animationCurve
- controller:(BrowserWindowController*)controller;
+ controller:(FullscreenController*)controller;
@end
@@ -59,7 +58,7 @@ const CGFloat kTabStripVerticalOffset = 14;
- (id)initWithFraction:(CGFloat)toFraction
fullDuration:(CGFloat)fullDuration
animationCurve:(NSInteger)animationCurve
- controller:(BrowserWindowController*)controller {
+ controller:(FullscreenController*)controller {
// Calculate the effective duration, based on the current shown fraction.
DCHECK(controller);
CGFloat fromFraction = [controller floatingBarShownFraction];
@@ -79,7 +78,7 @@ const CGFloat kTabStripVerticalOffset = 14;
- (void)setCurrentProgress:(NSAnimationProgress)progress {
CGFloat fraction =
startFraction_ + (progress * (endFraction_ - startFraction_));
- [controller_ setFloatingBarShownFraction:fraction];
+ [controller_ changeFloatingBarShownFraction:fraction];
}
@end
@@ -90,6 +89,10 @@ const CGFloat kTabStripVerticalOffset = 14;
// Returns YES if the fullscreen window is on the primary screen.
- (BOOL)isWindowOnPrimaryScreen;
+// Returns |kFullScreenModeHideAll| when the overlay is hidden and
+// |kFullScreenModeHideDock| when the overlay is shown.
+- (mac_util::FullScreenMode)desiredFullscreenMode;
+
// Change the overlay to the given fraction, with or without animation. Only
// guaranteed to work properly with |fraction == 0| or |fraction == 1|. This
// performs the show/hide (animation) immediately. It does not touch the timers.
@@ -153,6 +156,7 @@ const CGFloat kTabStripVerticalOffset = 14;
- (id)initWithBrowserController:(BrowserWindowController*)controller {
if ((self == [super init])) {
browserController_ = controller;
+ currentFullscreenMode_ = mac_util::kFullScreenModeNormal;
}
return self;
}
@@ -167,7 +171,7 @@ const CGFloat kTabStripVerticalOffset = 14;
DCHECK(!isFullscreen_);
isFullscreen_ = YES;
contentView_ = contentView;
- [browserController_ setFloatingBarShownFraction:(showDropdown ? 1 : 0)];
+ [self changeFloatingBarShownFraction:(showDropdown ? 1 : 0)];
// Register for notifications. Self is removed as an observer in |-cleanup|.
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
@@ -275,6 +279,24 @@ const CGFloat kTabStripVerticalOffset = 14;
currentAnimation_.reset();
}
+- (CGFloat)floatingBarShownFraction {
+ return [browserController_ floatingBarShownFraction];
+}
+
+- (void)changeFloatingBarShownFraction:(CGFloat)fraction {
+ [browserController_ setFloatingBarShownFraction:fraction];
+
+ mac_util::FullScreenMode desiredMode = [self desiredFullscreenMode];
+ if (desiredMode != currentFullscreenMode_ &&
+ [[browserController_ window] isMainWindow]) {
+ if (currentFullscreenMode_ == mac_util::kFullScreenModeNormal)
+ mac_util::RequestFullScreen(desiredMode);
+ else
+ mac_util::SwitchFullScreenModes(currentFullscreenMode_, desiredMode);
+ currentFullscreenMode_ = desiredMode;
+ }
+}
+
// Used to activate the floating bar in fullscreen mode.
- (void)mouseEntered:(NSEvent*)event {
DCHECK(isFullscreen_);
@@ -350,12 +372,18 @@ const CGFloat kTabStripVerticalOffset = 14;
return (screen == primaryScreen);
}
+- (mac_util::FullScreenMode)desiredFullscreenMode {
+ if ([browserController_ floatingBarShownFraction] >= 1.0)
+ return mac_util::kFullScreenModeHideDock;
+ return mac_util::kFullScreenModeHideAll;
+}
+
- (void)changeOverlayToFraction:(CGFloat)fraction
withAnimation:(BOOL)animate {
// The non-animated case is really simple, so do it and return.
if (!animate) {
[currentAnimation_ stopAnimation];
- [browserController_ setFloatingBarShownFraction:fraction];
+ [self changeFloatingBarShownFraction:fraction];
return;
}
@@ -378,7 +406,7 @@ const CGFloat kTabStripVerticalOffset = 14;
[[DropdownAnimation alloc] initWithFraction:fraction
fullDuration:kDropdownAnimationDuration
animationCurve:NSAnimationEaseOut
- controller:browserController_]);
+ controller:self]);
DCHECK(currentAnimation_);
[currentAnimation_ setAnimationBlockingMode:NSAnimationNonblocking];
[currentAnimation_ setDelegate:self];
@@ -544,21 +572,26 @@ const CGFloat kTabStripVerticalOffset = 14;
}
- (void)showActiveWindowUI {
- if (!menubarIsHidden_) {
- // Only hide the menubar if the window is on the primary screen.
- if ([self isWindowOnPrimaryScreen]) {
- mac_util::RequestFullScreen();
- menubarIsHidden_ = YES;
- }
+ DCHECK_EQ(currentFullscreenMode_, mac_util::kFullScreenModeNormal);
+ if (currentFullscreenMode_ != mac_util::kFullScreenModeNormal)
+ return;
+
+ // Only hide the menubar if the window is on the primary screen.
+ if ([self isWindowOnPrimaryScreen]) {
+ mac_util::FullScreenMode desiredMode = [self desiredFullscreenMode];
+ mac_util::RequestFullScreen(desiredMode);
+ currentFullscreenMode_ = desiredMode;
}
+
// TODO(rohitrao): Insert the Exit Fullscreen button. http://crbug.com/35956
}
- (void)hideActiveWindowUI {
- if (menubarIsHidden_) {
- mac_util::ReleaseFullScreen();
- menubarIsHidden_ = NO;
+ if (currentFullscreenMode_ != mac_util::kFullScreenModeNormal) {
+ mac_util::ReleaseFullScreen(currentFullscreenMode_);
+ currentFullscreenMode_ = mac_util::kFullScreenModeNormal;
}
+
// TODO(rohitrao): Remove the Exit Fullscreen button. http://crbug.com/35956
}