Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(834)

Unified Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h

Issue 2751573002: [Mac] Refactor bookmark bar controller (Closed)
Patch Set: Factor layout tests to helper, address CL comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698