1// Copyright 2013 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#ifndef CHROME_BROWSER_UI_COCOA_FULLSCREEN_MODE_CONTROLLER_H_ 6#define CHROME_BROWSER_UI_COCOA_FULLSCREEN_MODE_CONTROLLER_H_ 7 8#include <Carbon/Carbon.h> 9#import <Cocoa/Cocoa.h> 10 11#import "base/mac/scoped_nsobject.h" 12#import "ui/base/cocoa/tracking_area.h" 13 14@class BrowserWindowController; 15 16// This class is responsible for managing the menu bar and tabstrip animation 17// when in --enable-simplified-fullscreen. By default, in fullscreen, only the 18// toolbar and not the tabstrip are visible. When the user mouses near the top 19// of the screen, then the full tabstrip becomes available. If the user mouses 20// to the very top of the screen, the menubar also becomes visible. 21// 22// There is one instance of this class per BrowserWindowController, and it is 23// created when fullscreen is being entered and is destroyed when fullscreen 24// is exited. 25@interface FullscreenModeController : NSObject<NSAnimationDelegate> { 26 @private 27 enum FullscreenToolbarState { 28 kFullscreenToolbarOnly, 29 kFullscreenToolbarAndTabstrip, 30 }; 31 32 // The browser for which this is managing fullscreen. Weak, owns self. 33 BrowserWindowController* controller_; 34 35 // The tracking area used to observe the top region of the fullscren window, 36 // to initiate the animations to bring down the tabstrip. 37 ui::ScopedCrTrackingArea trackingArea_; 38 39 // The animation that is either showing or hiding the tabstrip. Nil when no 40 // animation is running. 41 base::scoped_nsobject<NSAnimation> animation_; 42 43 // The current and destination states of |animation_|. When no animation is 44 // running, these values are equal. 45 FullscreenToolbarState destinationState_; 46 FullscreenToolbarState currentState_; 47 48 // A Carbon event handler that tracks the revealed fraction of the menu bar. 49 EventHandlerRef menuBarTrackingHandler_; 50 51 // A fraction in the range [0.0, 1.0] that indicates how much of the 52 // menu bar is visible. Updated via |menuBarTrackingHandler_|. 53 CGFloat menuBarRevealFraction_; 54} 55 56// Designated initializer. Must be called after making the window fullscreen. 57- (id)initWithBrowserWindowController:(BrowserWindowController*)bwc; 58 59// Returns the pixel height of the menu bar, adjusted for fractional visibility. 60- (CGFloat)menuBarHeight; 61 62@end 63 64#endif // CHROME_BROWSER_UI_COCOA_FULLSCREEN_MODE_CONTROLLER_H_ 65