OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 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_LAYOUT_H_ |
| 6 #define CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_LAYOUT_H_ |
| 7 |
| 8 #import <Cocoa/Cocoa.h> |
| 9 |
| 10 #import "chrome/browser/ui/cocoa/presentation_mode_controller.h" |
| 11 |
| 12 namespace chrome { |
| 13 |
| 14 // The height of the tab strip. |
| 15 extern const CGFloat kTabStripHeight; |
| 16 |
| 17 // The parameters used to calculate the layout of the views managed by the |
| 18 // BrowserWindowController. |
| 19 struct LayoutParameters { |
| 20 // The size of the content view of the window. |
| 21 NSSize contentViewSize; |
| 22 // The size of the window. |
| 23 NSSize windowSize; |
| 24 |
| 25 // Whether the controller is in any fullscreen mode. This parameter should be |
| 26 // NO if the controller is in the process of entering fullscreen. |
| 27 BOOL inAnyFullscreen; |
| 28 // The fullscreen sliding style. See presentation_mode_controller.h for more |
| 29 // details. |
| 30 fullscreen_mac::SlidingStyle slidingStyle; |
| 31 // The minY of the AppKit Menu Bar, relative to the top of the screen. Ranges |
| 32 // from 0 to -22. Only relevant in fullscreen mode. |
| 33 CGFloat menubarOffset; |
| 34 // The fraction of the sliding toolbar that is visible in fullscreenm mode. |
| 35 // Ranges from 0 to 1. Only relevant in fullscreen mode. |
| 36 CGFloat toolbarFraction; |
| 37 |
| 38 BOOL hasTabStrip; |
| 39 |
| 40 BOOL hasToolbar; |
| 41 BOOL hasLocationBar; |
| 42 CGFloat toolbarHeight; |
| 43 |
| 44 BOOL bookmarkBarHidden; |
| 45 // If the bookmark bar is not hidden, then the bookmark bar should either be |
| 46 // directly below the omnibox, or directly below the info bar. This parameter |
| 47 // selects between those 2 cases. |
| 48 BOOL placeBookmarkBarBelowInfoBar; |
| 49 CGFloat bookmarkBarHeight; |
| 50 |
| 51 // The height of the info bar, not including the top arrow. |
| 52 CGFloat infoBarHeight; |
| 53 // The distance from the bottom of the location icon to the bottom of the |
| 54 // toolbar. |
| 55 CGFloat pageInfoBubblePointY; |
| 56 |
| 57 BOOL hasDownloadShelf; |
| 58 CGFloat downloadShelfHeight; |
| 59 }; |
| 60 |
| 61 // The output frames of the views managed by the BrowserWindowController. |
| 62 struct LayoutOutput { |
| 63 NSRect tabStripFrame; |
| 64 NSRect toolbarFrame; |
| 65 NSRect bookmarkFrame; |
| 66 NSRect fullscreenBackingBarFrame; |
| 67 CGFloat findBarMaxY; |
| 68 CGFloat fullscreenExitButtonMaxY; |
| 69 NSRect infoBarFrame; |
| 70 CGFloat infoBarMaxTopArrowHeight; |
| 71 NSRect downloadShelfFrame; |
| 72 NSRect contentAreaFrame; |
| 73 }; |
| 74 |
| 75 } // namespace chrome |
| 76 |
| 77 // This class is the sole entity responsible for calculating the layout of the |
| 78 // views managed by the BrowserWindowController. The parameters used to |
| 79 // calculate the layout are the fields of |parameters_|. These fields should be |
| 80 // filled by calling the appropriate setters on this class. Once the parameters |
| 81 // have been set, calling -computeLayout will return a LayoutOutput that |
| 82 // includes sufficient information to lay out all views managed by |
| 83 // BrowserWindowController. |
| 84 // |
| 85 // This is a lightweight class. It should be created on demand. |
| 86 @interface BrowserWindowLayout : NSObject { |
| 87 @private |
| 88 // Stores the parameters used to compute layout. |
| 89 chrome::LayoutParameters parameters_; |
| 90 |
| 91 // Stores the layout output as it's being computed. |
| 92 chrome::LayoutOutput output_; |
| 93 |
| 94 // The offset of the maxY of the tab strip during fullscreen mode. |
| 95 CGFloat fullscreenYOffset_; |
| 96 |
| 97 // The views are laid out from highest Y to lowest Y. This variable holds the |
| 98 // current highest Y that the next view is expected to be laid under. |
| 99 CGFloat maxY_; |
| 100 } |
| 101 |
| 102 // Performs the layout computation and returns the results. This method is fast |
| 103 // and does not perform any caching. |
| 104 - (chrome::LayoutOutput)computeLayout; |
| 105 |
| 106 - (void)setContentViewSize:(NSSize)size; |
| 107 - (void)setWindowSize:(NSSize)size; |
| 108 |
| 109 // Whether the controller is in any fullscreen mode. |inAnyFullscreen| should |
| 110 // be NO if the controller is in the process of entering fullscreen. |
| 111 - (void)setInAnyFullscreen:(BOOL)inAnyFullscreen; |
| 112 - (void)setFullscreenSlidingStyle:(fullscreen_mac::SlidingStyle)slidingStyle; |
| 113 - (void)setFullscreenMenubarOffset:(CGFloat)menubarOffset; |
| 114 - (void)setFullscreenToolbarFraction:(CGFloat)toolbarFraction; |
| 115 |
| 116 - (void)setHasTabStrip:(BOOL)hasTabStrip; |
| 117 |
| 118 - (void)setHasToolbar:(BOOL)hasToolbar; |
| 119 - (void)setHasLocationBar:(BOOL)hasLocationBar; |
| 120 - (void)setToolbarHeight:(CGFloat)toolbarHeight; |
| 121 |
| 122 - (void)setBookmarkBarHidden:(BOOL)bookmarkBarHidden; |
| 123 - (void)setPlaceBookmarkBarBelowInfoBar:(BOOL)placeBookmarkBarBelowInfoBar; |
| 124 - (void)setBookmarkBarHeight:(CGFloat)bookmarkBarHeight; |
| 125 |
| 126 // The height of the info bar, not including the top arrow. |
| 127 - (void)setInfoBarHeight:(CGFloat)infoBarHeight; |
| 128 // The min Y of the bubble point, relative to the toolbar. |
| 129 - (void)setPageInfoBubblePointY:(CGFloat)pageInfoBubblePointY; |
| 130 |
| 131 - (void)setHasDownloadShelf:(BOOL)hasDownloadShelf; |
| 132 - (void)setDownloadShelfHeight:(CGFloat)downloadShelfHeight; |
| 133 |
| 134 @end |
| 135 |
| 136 #endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_LAYOUT_H_ |
OLD | NEW |