Index: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h |
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h |
index 221168dfb06802b36f1619023659716918725d28..f9dc0b31472c4d3717829bbb1d072bcdba16ade3 100644 |
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h |
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h |
@@ -10,6 +10,7 @@ |
#include <map> |
#include <memory> |
+#include <unordered_map> |
#import "base/mac/cocoa_protocols.h" |
#include "base/mac/scoped_nsobject.h" |
@@ -133,6 +134,67 @@ const NSTimeInterval kDragHoverOpenDelay = 0.7; |
// no opportunity for overlap. |
const NSTimeInterval kDragHoverCloseDelay = 0.4; |
+enum BookmarkBarVisibleElementsMask { |
+ kVisibleElementsMaskNone = 0, |
+ kVisibleElementsMaskAppsButton = 1 << 0, |
+ kVisibleElementsMaskManagedBookmarksButton = 1 << 1, |
+ kVisibleElementsMaskSupervisedBookmarksButton = 1 << 2, |
+ kVisibleElementsMaskOffTheSideButton = 1 << 3, |
+ kVisibleElementsMaskOtherBookmarksButton = 1 << 4, |
+ kVisibleElementsMaskNoItemTextField = 1 << 5, |
+ kVisibleElementsMaskImportBookmarksButton = 1 << 6, |
+}; |
+ |
+// Specifies the location and visibility of the various sub-elements |
+// of the bookmark bar. Allows calculating the layout and actually |
+// applying it to views to be decoupled. For example, applying |
+// the layout in an RTL context transforms all horizontal offsets |
+// transparently. |
+struct BookmarkBarLayout { |
+ public: |
+ BookmarkBarLayout(); |
+ ~BookmarkBarLayout(); |
+ BookmarkBarLayout(BookmarkBarLayout&& other); |
+ BookmarkBarLayout& operator=(BookmarkBarLayout&& other); |
+ |
+ bool IsAppsButtonVisible() const { |
+ return visible_elements & kVisibleElementsMaskAppsButton; |
+ } |
+ bool IsManagedBookmarksButtonVisible() const { |
+ return visible_elements & kVisibleElementsMaskManagedBookmarksButton; |
+ } |
+ bool IsSupervisedBookmarksButtonVisible() const { |
+ return visible_elements & kVisibleElementsMaskSupervisedBookmarksButton; |
+ } |
+ bool IsOffTheSideButtonVisible() const { |
+ return visible_elements & kVisibleElementsMaskOffTheSideButton; |
+ } |
+ bool IsOtherBookmarksButtonVisible() const { |
+ return visible_elements & kVisibleElementsMaskOtherBookmarksButton; |
+ } |
+ bool IsNoItemTextFieldVisible() const { |
+ return visible_elements & kVisibleElementsMaskNoItemTextField; |
+ } |
+ bool IsImportBookmarksButtonVisible() const { |
+ return visible_elements & kVisibleElementsMaskImportBookmarksButton; |
+ } |
+ size_t VisibleButtonCount() const { return button_offsets.size(); } |
+ |
+ unsigned int visible_elements; |
+ CGFloat apps_button_offset; |
+ CGFloat managed_bookmarks_button_offset; |
+ CGFloat supervised_bookmarks_button_offset; |
+ CGFloat off_the_side_button_offset; |
+ CGFloat other_bookmarks_button_offset; |
+ CGFloat no_item_textfield_offset; |
+ CGFloat no_item_textfield_width; |
+ CGFloat import_bookmarks_button_offset; |
+ CGFloat import_bookmarks_button_width; |
+ CGFloat max_x; |
+ |
+ std::unordered_map<int64_t, CGFloat> button_offsets; |
+}; |
+ |
} // namespace bookmarks |
// The interface for the bookmark bar controller's delegate. Currently, the |
@@ -226,9 +288,6 @@ willAnimateFromState:(BookmarkBar::State)oldState |
buttonView_; // Contains 'no items' text fields. |
base::scoped_nsobject<BookmarkButton> offTheSideButton_; // aka the chevron. |
- NSRect originalNoItemsRect_; // Original, pre-resized field rect. |
- NSRect originalImportBookmarksRect_; // Original, pre-resized field rect. |
- |
// "Apps" button on the left side. |
base::scoped_nsobject<BookmarkButton> appsPageShortcutButton_; |
@@ -253,15 +312,6 @@ willAnimateFromState:(BookmarkBar::State)oldState |
// initial build. |
CGFloat savedFrameWidth_; |
- // The number of buttons we display in the bookmark bar. This does |
- // not include the "off the side" chevron or the "Other Bookmarks" |
- // button. We use this number to determine if we need to display |
- // the chevron, and to know what to place in the chevron's menu. |
- // Since we create everything before doing layout we can't be sure |
- // that all bookmark buttons we create will be visible. Thus, |
- // [buttons_ count] isn't a definitive check. |
- int displayedButtonCount_; |
- |
// A state flag which tracks when the bar's folder menus should be shown. |
// An initial click in any of the folder buttons turns this on and |
// one of the following will turn it off: another click in the button, |
@@ -427,28 +477,29 @@ willAnimateFromState:(BookmarkBar::State)oldState |
// These APIs should only be used by unit tests (or used internally). |
@interface BookmarkBarController(InternalOrTestingAPI) |
+- (bookmarks::BookmarkBarLayout)layoutFromCurrentState; |
+- (void)applyLayout:(const bookmarks::BookmarkBarLayout&)layout |
+ animated:(BOOL)animated; |
- (void)openBookmarkFolder:(id)sender; |
- (void)openOrCloseBookmarkFolderForOffTheSideButton; |
- (BookmarkBarView*)buttonView; |
- (NSMutableArray*)buttons; |
-- (BOOL)offTheSideButtonIsHidden; |
-- (BOOL)appsPageShortcutButtonIsHidden; |
+- (BookmarkButton*)otherBookmarksButton; |
+- (BookmarkButton*)managedBookmarksButton; |
+- (BookmarkButton*)supervisedBookmarksButton; |
- (BookmarkButton*)otherBookmarksButton; |
- (BookmarkBarFolderController*)folderController; |
- (id)folderTarget; |
-- (int)displayedButtonCount; |
- (void)openURL:(GURL)url disposition:(WindowOpenDisposition)disposition; |
- (void)clearBookmarkBar; |
- (BookmarkButtonCell*)cellForBookmarkNode:(const bookmarks::BookmarkNode*)node; |
- (BookmarkButtonCell*)cellForCustomButtonWithText:(NSString*)text |
image:(NSImage*)image; |
-- (NSRect)frameForBookmarkButtonFromCell:(NSCell*)cell xOffset:(int*)xOffset; |
- (void)checkForBookmarkButtonGrowth:(NSButton*)button; |
- (void)frameDidChange; |
- (void)updateTheme:(const ui::ThemeProvider*)themeProvider; |
- (BookmarkButton*)buttonForDroppingOnAtPoint:(NSPoint)point; |
- (BOOL)isEventAnExitEvent:(NSEvent*)event; |
-- (BOOL)shrinkOrHideView:(NSView*)view forMaxX:(CGFloat)maxViewX; |
- (void)unhighlightBookmark:(const bookmarks::BookmarkNode*)node; |
@end |