1 // Copyright (c) 2012 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_BROWSER_WINDOW_CONTROLLER_PRIVATE_H_ 6 #define CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_PRIVATE_H_ 7 8 #import "chrome/browser/ui/cocoa/browser_window_controller.h" 9 #import "chrome/browser/ui/cocoa/presentation_mode_controller.h" 10 11 @class BrowserWindowLayout; 12 13 // Private methods for the |BrowserWindowController|. This category should 14 // contain the private methods used by different parts of the BWC; private 15 // methods used only by single parts should be declared in their own file. 16 // TODO(viettrungluu): [crbug.com/35543] work on splitting out stuff from the 17 // BWC, and figuring out which methods belong here (need to unravel 18 // "dependencies"). 19 @interface BrowserWindowController(Private) 20 21 // Create the appropriate tab strip controller based on whether or not side 22 // tabs are enabled. Replaces the current controller. 23 - (void)createTabStripController; 24 25 // Saves the window's position in the local state preferences. 26 - (void)saveWindowPositionIfNeeded; 27 28 // We need to adjust where sheets come out of the window, as by default they 29 // erupt from the omnibox, which is rather weird. 30 - (NSRect)window:(NSWindow*)window 31 willPositionSheet:(NSWindow*)sheet 32 usingRect:(NSRect)defaultSheetRect; 33 34 // Repositions the window's subviews. From the top down: toolbar, normal 35 // bookmark bar (if shown), infobar, NTP detached bookmark bar (if shown), 36 // content area, download shelf (if any). 37 - (void)layoutSubviews; 38 39 // Shows the informational "how to exit fullscreen" bubble. 40 - (void)showFullscreenExitBubbleIfNecessary; 41 - (void)destroyFullscreenExitBubbleIfNecessary; 42 43 // Lays out the tab strip at the given maximum y-coordinate, with the given 44 // width, possibly for fullscreen mode; returns the new maximum y (below the 45 // tab strip). This is safe to call even when there is no tab strip. 46 - (CGFloat)layoutTabStripAtMaxY:(CGFloat)maxY 47 width:(CGFloat)width 48 fullscreen:(BOOL)fullscreen; 49 50 // Returns YES if the bookmark bar should be placed below the infobar, NO 51 // otherwise. 52 - (BOOL)placeBookmarkBarBelowInfoBar; 53 54 55 // Lays out the tab content area in the given frame. If the height changes, 56 // sends a message to the renderer to resize. 57 - (void)layoutTabContentArea:(NSRect)frame; 58 59 // Sets the toolbar's height to a value appropriate for the given compression. 60 // Also adjusts the bookmark bar's height by the opposite amount in order to 61 // keep the total height of the two views constant. 62 - (void)adjustToolbarAndBookmarkBarForCompression:(CGFloat)compression; 63 64 // Moves views between windows in preparation for fullscreen mode when not using 65 // Cocoa's System Fullscreen API. (System Fullscreen reuses the original window 66 // for fullscreen mode, so there is no need to move views around.) This method 67 // does not position views; callers must also call |-layoutSubviews:|. 68 - (void)moveViewsForImmersiveFullscreen:(BOOL)fullscreen 69 regularWindow:(NSWindow*)regularWindow 70 fullscreenWindow:(NSWindow*)fullscreenWindow; 71 72 // Called when a permission bubble closes, and informs the presentation 73 // controller that the dropdown can be hidden. (The dropdown should never be 74 // hidden while a permissions bubble is visible.) 75 - (void)permissionBubbleWindowWillClose:(NSNotification*)notification; 76 77 // Enter or exit fullscreen without using Cocoa's System Fullscreen API. These 78 // methods are internal implementations of |-setFullscreen:|. 79 - (void)enterImmersiveFullscreen; 80 - (void)exitImmersiveFullscreen; 81 82 // Register or deregister for content view resize notifications. These 83 // notifications are used while transitioning into fullscreen mode using Cocoa's 84 // System Fullscreen API. 85 - (void)registerForContentViewResizeNotifications; 86 - (void)deregisterForContentViewResizeNotifications; 87 88 // Allows/prevents bar visibility locks and releases from updating the visual 89 // state. Enabling makes changes instantaneously; disabling cancels any 90 // timers/animation. 91 - (void)enableBarVisibilityUpdates; 92 - (void)disableBarVisibilityUpdates; 93 94 // If there are no visibility locks and bar visibity updates are enabled, hides 95 // the bar with |animation| and |delay|. Otherwise, does nothing. 96 - (void)hideOverlayIfPossibleWithAnimation:(BOOL)animation delay:(BOOL)delay; 97 98 // The opacity for the toolbar divider; 0 means that it shouldn't be shown. 99 - (CGFloat)toolbarDividerOpacity; 100 101 // When a view does not have a layer, but it has multiple subviews with layers, 102 // the ordering of the layers is not well defined. Removing a subview and 103 // re-adding it to the same position has the side effect of updating the layer 104 // ordering to better reflect the subview ordering. 105 // This is a hack needed because NSThemeFrame is not layer backed, but it has 106 // multiple direct subviews which are. http://crbug.com/413009 107 - (void)updateLayerOrdering:(NSView*)view; 108 109 // Update visibility of the infobar tip, depending on the state of the window. 110 - (void)updateInfoBarTipVisibility; 111 112 // The min Y of the bubble point in the coordinate space of the toolbar. 113 - (NSInteger)pageInfoBubblePointY; 114 115 // Configures the presentationModeController_ right after it is constructed. 116 - (void)configurePresentationModeController; 117 118 // Allows the omnibox to slide. Also prepares UI for several fullscreen modes. 119 // This method gets called when entering AppKit fullscren, or when entering 120 // Immersive fullscreen. Expects fullscreenStyle_ to be set. 121 - (void)adjustUIForSlidingFullscreenStyle:(fullscreen_mac::SlidingStyle)style; 122 123 // This method gets called when exiting AppKit fullscreen, or when exiting 124 // Immersive fullscreen. It performs some common UI changes, and stops the 125 // omnibox from sliding. 126 - (void)adjustUIForExitingFullscreenAndStopOmniboxSliding; 127 128 // Exposed for testing. 129 // Creates a PresentationModeController with the given style. 130 - (PresentationModeController*)newPresentationModeControllerWithStyle: 131 (fullscreen_mac::SlidingStyle)style; 132 133 // Toggles the AppKit Fullscreen API. By default, doing so enters Canonical 134 // Fullscreen. 135 - (void)enterAppKitFullscreen; 136 - (void)exitAppKitFullscreen; 137 138 // Updates |layout| with the full set of parameters required to statelessly 139 // determine the layout of the views managed by this controller. 140 - (void)updateLayoutParameters:(BrowserWindowLayout*)layout; 141 142 // Applies a layout to the views managed by this controller. 143 - (void)applyLayout:(BrowserWindowLayout*)layout; 144 145 // Ensures that the window's content view's subviews have the correct 146 // z-ordering. Will add or remove subviews as necessary. 147 - (void)updateSubviewZOrder; 148 149 // Performs updateSubviewZOrder when this controller is not in fullscreen. 150 - (void)updateSubviewZOrderNormal; 151 152 // Performs updateSubviewZOrder when this controller is in fullscreen. 153 - (void)updateSubviewZOrderFullscreen; 154 155 // Sets the content view's subviews. Attempts to not touch the tabContentArea 156 // to prevent redraws. 157 - (void)setContentViewSubviews:(NSArray*)subviews; 158 159 // A hack required to get NSThemeFrame sub layers to order correctly. See 160 // implementation for more details. 161 - (void)updateSubviewZOrderHack; 162 163 @end // @interface BrowserWindowController(Private) 164 165 #endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_PRIVATE_H_ 166