Home | History | Annotate | Download | only in cocoa
      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