OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_UI_COCOA_FULLSCREEN_CONTROLLER_H_ | 5 #ifndef CHROME_BROWSER_UI_COCOA_PRESENTATION_MODE_CONTROLLER_H_ |
6 #define CHROME_BROWSER_UI_COCOA_FULLSCREEN_CONTROLLER_H_ | 6 #define CHROME_BROWSER_UI_COCOA_PRESENTATION_MODE_CONTROLLER_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #import <Cocoa/Cocoa.h> | 9 #import <Cocoa/Cocoa.h> |
10 | 10 |
11 #import "base/mac/cocoa_protocols.h" | 11 #import "base/mac/cocoa_protocols.h" |
12 #include "base/mac/mac_util.h" | 12 #include "base/mac/mac_util.h" |
13 #include "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" | 13 #include "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" |
14 | 14 |
15 @class BrowserWindowController; | 15 @class BrowserWindowController; |
16 @class DropdownAnimation; | 16 @class DropdownAnimation; |
17 | 17 |
18 // Provides a controller to manage fullscreen mode for a single browser window. | 18 // Provides a controller to manage presentation mode for a single browser |
19 // This class handles running animations, showing and hiding the floating | 19 // window. This class handles running animations, showing and hiding the |
20 // dropdown bar, and managing the tracking area associated with the dropdown. | 20 // floating dropdown bar, and managing the tracking area associated with the |
21 // This class does not directly manage any views -- the BrowserWindowController | 21 // dropdown. This class does not directly manage any views -- the |
22 // is responsible for positioning and z-ordering views. | 22 // BrowserWindowController is responsible for positioning and z-ordering views. |
23 // | 23 // |
24 // Tracking areas are disabled while animations are running. If | 24 // Tracking areas are disabled while animations are running. If |
25 // |overlayFrameChanged:| is called while an animation is running, the | 25 // |overlayFrameChanged:| is called while an animation is running, the |
26 // controller saves the new frame and installs the appropriate tracking area | 26 // controller saves the new frame and installs the appropriate tracking area |
27 // when the animation finishes. This is largely done for ease of | 27 // when the animation finishes. This is largely done for ease of |
28 // implementation; it is easier to check the mouse location at each animation | 28 // implementation; it is easier to check the mouse location at each animation |
29 // step than it is to manage a constantly-changing tracking area. | 29 // step than it is to manage a constantly-changing tracking area. |
30 @interface FullscreenController : NSObject<NSAnimationDelegate> { | 30 @interface PresentationModeController : NSObject<NSAnimationDelegate> { |
31 @private | 31 @private |
32 // Our parent controller. | 32 // Our parent controller. |
33 BrowserWindowController* browserController_; // weak | 33 BrowserWindowController* browserController_; // weak |
34 | 34 |
35 // The content view for the fullscreen window. This is nil when not in | 35 // The content view for the window. This is nil when not in presentation |
36 // fullscreen mode. | 36 // mode. |
37 NSView* contentView_; // weak | 37 NSView* contentView_; // weak |
38 | 38 |
39 // Whether or not we are in fullscreen mode. | 39 // YES while this controller is in the process of entering presentation mode. |
40 BOOL isFullscreen_; | 40 BOOL enteringPresentationMode_; |
| 41 |
| 42 // Whether or not we are in presentation mode. |
| 43 BOOL inPresentationMode_; |
41 | 44 |
42 // The tracking area associated with the floating dropdown bar. This tracking | 45 // The tracking area associated with the floating dropdown bar. This tracking |
43 // area is attached to |contentView_|, because when the dropdown is completely | 46 // area is attached to |contentView_|, because when the dropdown is completely |
44 // hidden, we still need to keep a 1px tall tracking area visible. Attaching | 47 // hidden, we still need to keep a 1px tall tracking area visible. Attaching |
45 // to the content view allows us to do this. |trackingArea_| can be nil if | 48 // to the content view allows us to do this. |trackingArea_| can be nil if |
46 // not in fullscreen mode or during animations. | 49 // not in presentation mode or during animations. |
47 scoped_nsobject<NSTrackingArea> trackingArea_; | 50 scoped_nsobject<NSTrackingArea> trackingArea_; |
48 | 51 |
49 // Pointer to the currently running animation. Is nil if no animation is | 52 // Pointer to the currently running animation. Is nil if no animation is |
50 // running. | 53 // running. |
51 scoped_nsobject<DropdownAnimation> currentAnimation_; | 54 scoped_nsobject<DropdownAnimation> currentAnimation_; |
52 | 55 |
53 // Timers for scheduled showing/hiding of the bar (which are always done with | 56 // Timers for scheduled showing/hiding of the bar (which are always done with |
54 // animation). | 57 // animation). |
55 scoped_nsobject<NSTimer> showTimer_; | 58 scoped_nsobject<NSTimer> showTimer_; |
56 scoped_nsobject<NSTimer> hideTimer_; | 59 scoped_nsobject<NSTimer> hideTimer_; |
57 | 60 |
58 // Holds the current bounds of |trackingArea_|, even if |trackingArea_| is | 61 // Holds the current bounds of |trackingArea_|, even if |trackingArea_| is |
59 // currently nil. Used to restore the tracking area when an animation | 62 // currently nil. Used to restore the tracking area when an animation |
60 // completes. | 63 // completes. |
61 NSRect trackingAreaBounds_; | 64 NSRect trackingAreaBounds_; |
62 | 65 |
63 // Tracks the currently requested fullscreen mode. This should be | 66 // Tracks the currently requested system fullscreen mode, used to show or hide |
64 // |kFullScreenModeNormal| when the window is not main or not fullscreen, | 67 // the menubar. This should be |kFullScreenModeNormal| when the window is not |
65 // |kFullScreenModeHideAll| while the overlay is hidden, and | 68 // main or not fullscreen, |kFullScreenModeHideAll| while the overlay is |
66 // |kFullScreenModeHideDock| while the overlay is shown. If the window is not | 69 // hidden, and |kFullScreenModeHideDock| while the overlay is shown. If the |
67 // on the primary screen, this should always be |kFullScreenModeNormal|. This | 70 // window is not on the primary screen, this should always be |
68 // value can get out of sync with the correct state if we miss a notification | 71 // |kFullScreenModeNormal|. This value can get out of sync with the correct |
69 // (which can happen when a fullscreen window is closed). Used to track the | 72 // state if we miss a notification (which can happen when a window is closed). |
70 // current state and make sure we properly restore the menu bar when this | 73 // Used to track the current state and make sure we properly restore the menu |
71 // controller is destroyed. | 74 // bar when this controller is destroyed. |
72 base::mac::FullScreenMode currentFullscreenMode_; | 75 base::mac::FullScreenMode systemFullscreenMode_; |
73 } | 76 } |
74 | 77 |
75 @property(readonly, nonatomic) BOOL isFullscreen; | 78 @property(readonly, nonatomic) BOOL inPresentationMode; |
76 | 79 |
77 // Designated initializer. | 80 // Designated initializer. |
78 - (id)initWithBrowserController:(BrowserWindowController*)controller; | 81 - (id)initWithBrowserController:(BrowserWindowController*)controller; |
79 | 82 |
80 // Informs the controller that the browser has entered or exited fullscreen | 83 // Informs the controller that the browser has entered or exited presentation |
81 // mode. |-enterFullscreenForContentView:showDropdown:| should be called after | 84 // mode. |-enterPresentationModeForContentView:showDropdown:| should be called |
82 // the fullscreen window is setup, just before it is shown. |-exitFullscreen| | 85 // after the window is setup, just before it is shown. |-exitPresentationMode| |
83 // should be called before any views are moved back to the non-fullscreen | 86 // should be called before any views are moved back to the non-fullscreen |
84 // window. If |-enterFullscreenForContentView:showDropdown:| is called, it must | 87 // window. If |-enterPresentationModeForContentView:showDropdown:| is called, |
85 // be followed with a call to |-exitFullscreen| before the controller is | 88 // it must be balanced with a call to |-exitPresentationMode| before the |
86 // released. | 89 // controller is released. |
87 - (void)enterFullscreenForContentView:(NSView*)contentView | 90 - (void)enterPresentationModeForContentView:(NSView*)contentView |
88 showDropdown:(BOOL)showDropdown; | 91 showDropdown:(BOOL)showDropdown; |
89 - (void)exitFullscreen; | 92 - (void)exitPresentationMode; |
90 | 93 |
91 // Returns the amount by which the floating bar should be offset downwards (to | 94 // Returns the amount by which the floating bar should be offset downwards (to |
92 // avoid the menu) and by which the overlay view should be enlarged vertically. | 95 // avoid the menu) and by which the overlay view should be enlarged vertically. |
93 // Generally, this is > 0 when the fullscreen window is on the primary screen | 96 // Generally, this is > 0 when the window is on the primary screen and 0 |
94 // and 0 otherwise. | 97 // otherwise. |
95 - (CGFloat)floatingBarVerticalOffset; | 98 - (CGFloat)floatingBarVerticalOffset; |
96 | 99 |
97 // Informs the controller that the overlay's frame has changed. The controller | 100 // Informs the controller that the overlay's frame has changed. The controller |
98 // uses this information to update its tracking areas. | 101 // uses this information to update its tracking areas. |
99 - (void)overlayFrameChanged:(NSRect)frame; | 102 - (void)overlayFrameChanged:(NSRect)frame; |
100 | 103 |
101 // Informs the controller that the overlay should be shown/hidden, possibly with | 104 // Informs the controller that the overlay should be shown/hidden, possibly with |
102 // animation, possibly after a delay (only applicable for the animated case). | 105 // animation, possibly after a delay (only applicable for the animated case). |
103 - (void)ensureOverlayShownWithAnimation:(BOOL)animate delay:(BOOL)delay; | 106 - (void)ensureOverlayShownWithAnimation:(BOOL)animate delay:(BOOL)delay; |
104 - (void)ensureOverlayHiddenWithAnimation:(BOOL)animate delay:(BOOL)delay; | 107 - (void)ensureOverlayHiddenWithAnimation:(BOOL)animate delay:(BOOL)delay; |
105 | 108 |
106 // Cancels any running animation and timers. | 109 // Cancels any running animation and timers. |
107 - (void)cancelAnimationAndTimers; | 110 - (void)cancelAnimationAndTimers; |
108 | 111 |
109 // Gets the current floating bar shown fraction. | 112 // Gets the current floating bar shown fraction. |
110 - (CGFloat)floatingBarShownFraction; | 113 - (CGFloat)floatingBarShownFraction; |
111 | 114 |
112 // Sets a new current floating bar shown fraction. NOTE: This function has side | 115 // Sets a new current floating bar shown fraction. NOTE: This function has side |
113 // effects, such as modifying the fullscreen mode (menu bar shown state). | 116 // effects, such as modifying the system fullscreen mode (menu bar shown state). |
114 - (void)changeFloatingBarShownFraction:(CGFloat)fraction; | 117 - (void)changeFloatingBarShownFraction:(CGFloat)fraction; |
115 | 118 |
116 @end | 119 @end |
117 | 120 |
118 // Notification posted when we're about to enter or leave fullscreen. | 121 // Notification posted when we're about to enter or leave fullscreen. |
119 extern NSString* const kWillEnterFullscreenNotification; | 122 extern NSString* const kWillEnterFullscreenNotification; |
120 extern NSString* const kWillLeaveFullscreenNotification; | 123 extern NSString* const kWillLeaveFullscreenNotification; |
121 | 124 |
122 #endif // CHROME_BROWSER_UI_COCOA_FULLSCREEN_CONTROLLER_H_ | 125 #endif // CHROME_BROWSER_UI_COCOA_PRESENTATION_MODE_CONTROLLER_H_ |
OLD | NEW |