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