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

Unified Diff: chrome/browser/cocoa/bookmark_bar_folder_controller.mm

Issue 842005: Bookmark bar menu/folder button text is left-aligned, not centered.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 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/cocoa/bookmark_bar_folder_controller.mm
===================================================================
--- chrome/browser/cocoa/bookmark_bar_folder_controller.mm (revision 41344)
+++ chrome/browser/cocoa/bookmark_bar_folder_controller.mm (working copy)
@@ -90,6 +90,7 @@
// If |node| is NULL this is an "(empty)" button.
// Does NOT add this button to our button list.
// Returns an autoreleased button.
+// Adjusts the input frame width as appropriate.
//
// TODO(jrg): combine with addNodesToButtonList: code from
// bookmark_bar_controller.mm, and generalize that to use both x and y
@@ -97,10 +98,20 @@
// http://crbug.com/35966
- (BookmarkButton*)makeButtonForNode:(const BookmarkNode*)node
frame:(NSRect)frame {
+ NSCell* cell = [self cellForBookmarkNode:node];
+ DCHECK(cell);
+
+ // The "+2" is needed because, sometimes, Cocoa is off by a tad when
+ // returning the value it thinks it needs.
+ CGFloat desired = [cell cellSize].width + 2;
+ frame.size.width = std::min(
+ std::max(bookmarks::kBookmarkMenuButtonMinimumWidth, desired),
+ bookmarks::kBookmarkMenuButtonMaximumWidth);
+
BookmarkButton* button = [[[BookmarkButton alloc] initWithFrame:frame]
autorelease];
DCHECK(button);
- NSCell* cell = [self cellForBookmarkNode:node];
+
[button setCell:cell];
[button setDelegate:self];
if (node) {
@@ -182,25 +193,30 @@
int buttons = node->GetChildCount();
if (buttons == 0)
buttons = 1; // the "empty" button
+
int height = buttons * bookmarks::kBookmarkButtonHeight;
- // TODO(jrg): use full width for buttons, like menus?
- // http://crbug.com/36487
- int width = (bookmarks::kDefaultBookmarkWidth +
- 2 * bookmarks::kBookmarkVerticalPadding);
- [[self window] setFrame:NSMakeRect(newWindowTopLeft.x,
- newWindowTopLeft.y - height,
- width,
- height)
- display:YES];
+ // Note: this will be replaced once we make buttons; for now, use a
+ // reasonable value. Button creation needs a valid (x,y,h) in a
+ // frame to position them properly.
+ int windowWidth = (bookmarks::kBookmarkMenuButtonMinimumWidth +
+ 2 * bookmarks::kBookmarkVerticalPadding);
+
+ NSRect windowFrame = NSMakeRect(newWindowTopLeft.x,
+ newWindowTopLeft.y - height,
+ windowWidth,
+ height);
+ [[self window] setFrame:windowFrame display:YES];
+
// TODO(jrg): combine with frame code in bookmark_bar_controller.mm
// http://crbug.com/35966
- NSRect frame = NSMakeRect(bookmarks::kBookmarkHorizontalPadding,
- height - (bookmarks::kBookmarkBarHeight -
- bookmarks::kBookmarkHorizontalPadding),
- bookmarks::kDefaultBookmarkWidth,
- (bookmarks::kBookmarkBarHeight -
- 2 * bookmarks::kBookmarkVerticalPadding));
+ NSRect buttonsOuterFrame = NSMakeRect(
+ bookmarks::kBookmarkHorizontalPadding,
+ height - (bookmarks::kBookmarkBarHeight -
+ bookmarks::kBookmarkHorizontalPadding),
+ bookmarks::kDefaultBookmarkWidth,
+ (bookmarks::kBookmarkBarHeight -
+ 2 * bookmarks::kBookmarkVerticalPadding));
// TODO(jrg): combine with addNodesToButtonList: code from
// bookmark_bar_controller.mm (but use y offset)
@@ -208,21 +224,42 @@
if (!node->GetChildCount()) {
// If no children we are the empty button.
BookmarkButton* button = [self makeButtonForNode:nil
- frame:frame];
+ frame:buttonsOuterFrame];
[buttons_ addObject:button];
[mainView_ addSubview:button];
} else {
for (int i = 0; i < node->GetChildCount(); i++) {
const BookmarkNode* child = node->GetChild(i);
BookmarkButton* button = [self makeButtonForNode:child
- frame:frame];
+ frame:buttonsOuterFrame];
[buttons_ addObject:button];
[mainView_ addSubview:button];
- frame.origin.y -= bookmarks::kBookmarkBarHeight;
+ buttonsOuterFrame.origin.y -= bookmarks::kBookmarkBarHeight;
}
}
+ [self updateTheme:[self themeProvider]];
- [self updateTheme:[self themeProvider]];
+ // Now that we have all our buttons we can determine the real size
+ // of our window.
+ CGFloat width = 0.0;
+ for (BookmarkButton* button in buttons_.get()) {
+ width = std::max(width, NSWidth([button bounds]));
+ }
+ width = std::min(width, bookmarks::kBookmarkMenuButtonMaximumWidth);
+
+ // Things look and feel more menu-like if all the buttons are the
+ // full width of the window, especially if there are submenus.
+ for (BookmarkButton* button in buttons_.get()) {
+ NSRect buttonFrame = [button frame];
+ buttonFrame.size.width = width;
+ [button setFrame:buttonFrame];
+ }
+
+ // Finally, set our window size.
+ width += (2 * bookmarks::kBookmarkVerticalPadding);
+ windowFrame.size.width = width;
+ [[self window] setFrame:windowFrame display:YES];
+
[[parentController_ parentWindow] addChildWindow:[self window]
ordered:NSWindowAbove];
}
« no previous file with comments | « chrome/browser/cocoa/bookmark_bar_controller.h ('k') | chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698