summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrossetti@chromium.org <mrossetti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 19:36:20 +0000
committermrossetti@chromium.org <mrossetti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 19:36:20 +0000
commit0645da53f77955736a4b4c7a073fcc9605dcfc1e (patch)
tree44b6df23eeaef423e5b7bf44a8646ba36b7d3aa2
parent511cc0d4031024b45c1eb97ae6971217f2ef5994 (diff)
downloadchromium_src-0645da53f77955736a4b4c7a073fcc9605dcfc1e.zip
chromium_src-0645da53f77955736a4b4c7a073fcc9605dcfc1e.tar.gz
chromium_src-0645da53f77955736a4b4c7a073fcc9605dcfc1e.tar.bz2
Remove the themeing from the folder menu background, text in the folder menu items, and no longer needed calls. Changed the menu button stroke color to a lighter shade of black. Did a bit of refactoring of how bookmark buttons are created.
BUG=39428 TEST=Pop up a folder menu and insure that the background does not adopt any theme settings. Review URL: http://codereview.chromium.org/1589005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43511 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/cocoa/bookmark_bar_controller.mm40
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_button_cell.h30
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_button_cell.mm22
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_button_cell_unittest.mm24
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_controller.mm45
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm7
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_view.h3
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_view.mm20
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm11
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_window.mm7
-rw-r--r--chrome/browser/cocoa/bookmark_button.h6
-rw-r--r--chrome/browser/cocoa/bookmark_button_cell.h14
-rw-r--r--chrome/browser/cocoa/bookmark_button_cell.mm42
-rw-r--r--chrome/browser/cocoa/bookmark_button_cell_unittest.mm7
-rw-r--r--chrome/browser/cocoa/gradient_button_cell.mm2
-rwxr-xr-xchrome/chrome_browser.gypi2
-rw-r--r--chrome/chrome_tests.gypi1
17 files changed, 191 insertions, 92 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_controller.mm b/chrome/browser/cocoa/bookmark_bar_controller.mm
index 11fb1f0..c84b087 100644
--- a/chrome/browser/cocoa/bookmark_bar_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_controller.mm
@@ -176,7 +176,6 @@ const NSTimeInterval kBookmarkBarAnimationDuration = 0.12;
- (void)addNonBookmarkButtonsToView;
- (void)addButtonsToView;
- (void)centerNoItemsLabel;
-- (NSImage*)getFavIconForNode:(const BookmarkNode*)node;
- (void)setNodeForBarMenu;
- (void)watchForExitEvent:(BOOL)watch;
@@ -1140,7 +1139,7 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
action:nil
keyEquivalent:@""] autorelease];
[menu addItem:item];
- [item setImage:[self getFavIconForNode:child]];
+ [item setImage:[self favIconForNode:child]];
if (child->is_folder()) {
NSMenu* submenu = [[[NSMenu alloc] initWithTitle:title] autorelease];
[menu setSubmenu:submenu forItem:item];
@@ -1411,25 +1410,12 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
// Return an autoreleased NSCell suitable for a bookmark button.
// TODO(jrg): move much of the cell config into the BookmarkButtonCell class.
- (NSCell*)cellForBookmarkNode:(const BookmarkNode*)node {
- BookmarkButtonCell* cell =
- [[[BookmarkButtonCell alloc] initTextCell:nil]
- autorelease];
- DCHECK(cell);
- [cell setBookmarkNode:node];
-
- if (node) {
- NSString* title = base::SysWideToNSString(node->GetTitle());
- NSImage* image = [self getFavIconForNode:node];
- [cell setBookmarkCellText:title image:image];
- if (node->is_folder())
- [cell setMenu:buttonFolderContextMenu_];
- else
- [cell setMenu:buttonContextMenu_];
- } else {
- [cell setEmpty:YES];
- [cell setBookmarkCellText:l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU)
- image:nil];
- }
+ NSImage* image = node ? [self favIconForNode:node] : nil;
+ NSMenu* menu = [self contextMenuForNode:node];
+ BookmarkButtonCell* cell = [BookmarkButtonCell buttonCellForNode:node
+ contextMenu:menu
+ cellText:nil
+ cellImage:image];
// Note: a quirk of setting a cell's text color is that it won't work
// until the cell is associated with a button, so we can't theme the cell yet.
@@ -1437,6 +1423,11 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
return cell;
}
+- (NSMenu*)contextMenuForNode:(const BookmarkNode*)node {
+ return node && node->is_folder() ? buttonFolderContextMenu_ :
+ buttonContextMenu_;
+}
+
// Return an appropriate width for the given bookmark button cell.
// The "+2" is needed because, sometimes, Cocoa is off by a tad.
// Example: for a bookmark named "Moma" or "SFGate", it is one pixel
@@ -1691,7 +1682,7 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
const BookmarkNode* cellnode = [button bookmarkNode];
if (cellnode == node) {
[[button cell] setBookmarkCellText:nil
- image:[self getFavIconForNode:node]];
+ image:[self favIconForNode:node]];
// Adding an image means we might need more room for the
// bookmark. Test for it by growing the button (if needed)
// and shifting everything else over.
@@ -1718,7 +1709,10 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
return otherBookmarksButton_.get();
}
-- (NSImage*)getFavIconForNode:(const BookmarkNode*)node {
+- (NSImage*)favIconForNode:(const BookmarkNode*)node {
+ if (!node)
+ return defaultImage_;
+
if (node->is_folder())
return folderImage_;
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_button_cell.h b/chrome/browser/cocoa/bookmark_bar_folder_button_cell.h
new file mode 100644
index 0000000..afcfd34
--- /dev/null
+++ b/chrome/browser/cocoa/bookmark_bar_folder_button_cell.h
@@ -0,0 +1,30 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_COCOA_BOOKMARK_BAR_FOLDER_BUTTON_CELL_H_
+#define CHROME_BROWSER_COCOA_BOOKMARK_BAR_FOLDER_BUTTON_CELL_H_
+
+#import "chrome/browser/cocoa/bookmark_button_cell.h"
+
+class BookmarkNode;
+
+// A button cell that handles drawing/highlighting of buttons in the
+// bookmark bar. This cell forwards mouseEntered/mouseExited events
+// to its control view so that pseudo-menu operations
+// (e.g. hover-over to open) can be implemented.
+@interface BookmarkBarFolderButtonCell : BookmarkButtonCell {
+ @private
+ scoped_nsobject<NSColor> frameColor_;
+}
+
+// Create a button cell which draws without a theme and with a frame
+// color provided by the BrowserThemeProvider defaults.
++ (id)buttonCellForNode:(const BookmarkNode*)node
+ contextMenu:(NSMenu*)contextMenu
+ cellText:(NSString*)cellText
+ cellImage:(NSImage*)cellImage;
+
+@end
+
+#endif // CHROME_BROWSER_COCOA_BOOKMARK_BAR_FOLDER_BUTTON_CELL_H_
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_button_cell.mm b/chrome/browser/cocoa/bookmark_bar_folder_button_cell.mm
new file mode 100644
index 0000000..3c4b913
--- /dev/null
+++ b/chrome/browser/cocoa/bookmark_bar_folder_button_cell.mm
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/cocoa/bookmark_bar_folder_button_cell.h"
+
+@implementation BookmarkBarFolderButtonCell
+
++ (id)buttonCellForNode:(const BookmarkNode*)node
+ contextMenu:(NSMenu*)contextMenu
+ cellText:(NSString*)cellText
+ cellImage:(NSImage*)cellImage {
+ id buttonCell =
+ [[[BookmarkBarFolderButtonCell alloc] initForNode:node
+ contextMenu:contextMenu
+ cellText:cellText
+ cellImage:cellImage]
+ autorelease];
+ return buttonCell;
+}
+
+@end
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_button_cell_unittest.mm b/chrome/browser/cocoa/bookmark_bar_folder_button_cell_unittest.mm
new file mode 100644
index 0000000..55c2412
--- /dev/null
+++ b/chrome/browser/cocoa/bookmark_bar_folder_button_cell_unittest.mm
@@ -0,0 +1,24 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/scoped_nsobject.h"
+#import "chrome/browser/cocoa/bookmark_bar_folder_button_cell.h"
+#import "chrome/browser/cocoa/cocoa_test_helper.h"
+
+namespace {
+
+class BookmarkBarFolderButtonCellTest : public CocoaTest {
+};
+
+// Basic creation.
+TEST_F(BookmarkBarFolderButtonCellTest, Create) {
+ scoped_nsobject<BookmarkBarFolderButtonCell> cell;
+ cell.reset([[BookmarkBarFolderButtonCell buttonCellForNode:nil
+ contextMenu:nil
+ cellText:nil
+ cellImage:nil] retain]);
+ EXPECT_TRUE(cell);
+}
+
+} // namespace
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
index 811cf90..b99ba51 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
@@ -10,7 +10,7 @@
#import "chrome/browser/cocoa/bookmark_bar_constants.h" // namespace bookmarks
#import "chrome/browser/cocoa/bookmark_bar_controller.h" // namespace bookmarks
#import "chrome/browser/cocoa/bookmark_bar_folder_view.h"
-#import "chrome/browser/cocoa/bookmark_button_cell.h"
+#import "chrome/browser/cocoa/bookmark_bar_folder_button_cell.h"
#import "chrome/browser/cocoa/bookmark_folder_target.h"
#import "chrome/browser/cocoa/browser_window_controller.h"
#import "chrome/browser/cocoa/event_utils.h"
@@ -49,14 +49,6 @@ const CGFloat kBookmarkBarFolderScrollAmount =
parentController_.reset([controller retain]);
buttons_.reset([[NSMutableArray alloc] init]);
folderTarget_.reset([[BookmarkFolderTarget alloc] initWithController:self]);
-
- // Register for theme changes.
- NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
- [defaultCenter addObserver:self
- selector:@selector(themeDidChangeNotification:)
- name:kBrowserThemeDidChangeNotification
- object:nil];
-
[self configureWindow];
[self addScrollTracking];
}
@@ -66,7 +58,6 @@ const CGFloat kBookmarkBarFolderScrollAmount =
- (void)dealloc {
[self removeScrollTracking];
[self endScroll];
- [[NSNotificationCenter defaultCenter] removeObserver:self];
// Note: we don't need to
// [NSObject cancelPreviousPerformRequestsWithTarget:self];
// Because all of our performSelector: calls use withDelay: which
@@ -81,30 +72,23 @@ const CGFloat kBookmarkBarFolderScrollAmount =
[super showWindow:sender];
}
-// Update theme information for all our buttons.
-- (void)updateTheme:(ThemeProvider*)themeProvider {
- if (!themeProvider)
- return;
- NSColor* color =
- themeProvider->GetNSColor(BrowserThemeProvider::COLOR_BOOKMARK_TEXT,
- true);
- for (BookmarkButton* button in buttons_.get()) {
- BookmarkButtonCell* cell = [button cell];
- [cell setTextColor:color];
- }
+- (NSCell*)cellForBookmarkNode:(const BookmarkNode*)child {
+ NSImage* image = child ? [self favIconForNode:child] : nil;
+ NSMenu* menu = [self contextMenuForNode:child];
+ BookmarkBarFolderButtonCell* cell =
+ [BookmarkBarFolderButtonCell buttonCellForNode:child
+ contextMenu:menu
+ cellText:nil
+ cellImage:image];
+ return cell;
}
-// Called after the current theme has changed.
-- (void)themeDidChangeNotification:(NSNotification*)aNotification {
- ThemeProvider* themeProvider =
- static_cast<ThemeProvider*>([[aNotification object] pointerValue]);
- [self updateTheme:themeProvider];
+- (NSImage*)favIconForNode:(const BookmarkNode*)node {
+ return node ? [parentController_ favIconForNode:node] : nil;
}
-// Redirect bookmark button cell creation to our parent to allow a
-// single implementation.
-- (NSCell*)cellForBookmarkNode:(const BookmarkNode*)child {
- return [parentController_ cellForBookmarkNode:child];
+- (NSMenu*)contextMenuForNode:(const BookmarkNode*)node {
+ return node ? [parentController_ contextMenuForNode:node] : nil;
}
// Redirect to our logic shared with BookmarkBarController.
@@ -276,7 +260,6 @@ const CGFloat kBookmarkBarFolderScrollAmount =
buttonsOuterFrame.origin.y -= bookmarks::kBookmarkBarHeight;
}
}
- [self updateTheme:[self themeProvider]];
// Now that we have all our buttons we can determine the real size
// of our window.
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm b/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm
index cde2b2e..55b3d16 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm
@@ -7,6 +7,7 @@
#include "base/basictypes.h"
#include "base/scoped_nsobject.h"
#import "chrome/browser/cocoa/bookmark_bar_controller.h"
+#import "chrome/browser/cocoa/bookmark_bar_folder_button_cell.h"
#import "chrome/browser/cocoa/bookmark_bar_folder_controller.h"
#include "chrome/browser/cocoa/browser_test_helper.h"
#import "chrome/browser/cocoa/cocoa_test_helper.h"
@@ -124,17 +125,19 @@ TEST_F(BookmarkBarFolderControllerTest, InitCreateAndDelete) {
scoped_nsobject<BookmarkBarFolderController> bbfc;
bbfc.reset(SimpleBookmarkBarFolderController());
- // Make sure none of the buttons overlap, and that all are inside
- // the content frame.
+ // Make sure none of the buttons overlap, that all are inside
+ // the content frame, and their cells are of the proper class.
NSArray* buttons = [bbfc buttons];
EXPECT_TRUE([buttons count]);
for (unsigned int i = 0; i < ([buttons count]-1); i++) {
EXPECT_FALSE(NSContainsRect([[buttons objectAtIndex:i] frame],
[[buttons objectAtIndex:i+1] frame]));
}
+ Class cellClass = [BookmarkBarFolderButtonCell class];
for (BookmarkButton* button in buttons) {
NSRect r = [[bbfc mainView] convertRect:[button frame] fromView:button];
EXPECT_TRUE(NSContainsRect([[bbfc mainView] frame], r));
+ EXPECT_TRUE([[button cell] isKindOfClass:cellClass]);
}
// Confirm folder buttons have no tooltip. The important thing
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_view.h b/chrome/browser/cocoa/bookmark_bar_folder_view.h
index a8fe85b..e4142d6 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_view.h
+++ b/chrome/browser/cocoa/bookmark_bar_folder_view.h
@@ -3,13 +3,12 @@
// found in the LICENSE file.
#import <Cocoa/Cocoa.h>
-#import "chrome/browser/cocoa/background_gradient_view.h"
@protocol BookmarkButtonControllerProtocol;
// Main content view for a bookmark bar folder "menu" window. This is
// logically similar to a BookmarkBarView but is oriented vertically.
-@interface BookmarkBarFolderView : BackgroundGradientView {
+@interface BookmarkBarFolderView : NSView {
@private
BOOL inDrag_; // Are we in the middle of a drag?
BOOL dropIndicatorShown_;
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_view.mm b/chrome/browser/cocoa/bookmark_bar_folder_view.mm
index 9ede01b..cbbd5a2 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_view.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_view.mm
@@ -4,7 +4,6 @@
#import "chrome/browser/cocoa/bookmark_bar_folder_view.h"
-#import "chrome/browser/browser_theme_provider.h"
#import "chrome/browser/cocoa/bookmark_bar_controller.h"
@implementation BookmarkBarFolderView
@@ -14,12 +13,6 @@
}
- (void)awakeFromNib {
- [super awakeFromNib];
-
- // BackgroundGradientView's awakeFromNib does a |showsDivider_ = YES|.
- // Make sure we turn it off.
- [self setShowsDivider:NO];
-
NSArray* types = [NSArray arrayWithObject:kBookmarkButtonDragType];
[self registerForDraggedTypes:types];
}
@@ -30,8 +23,6 @@
}
- (void)drawRect:(NSRect)rect {
- [self drawBackground];
-
// TODO(jrg): copied from bookmark_bar_view but orientation changed.
// Code dup sucks but I'm not sure I can take 16 lines and make it
// generic for horiz vs vertical while keeping things simple.
@@ -49,14 +40,9 @@
NSMakeRect(kBarHorizPad, dropIndicatorPosition_,
NSWidth([self bounds]) - 2*kBarHorizPad,
kBarHeight);
- // themeProvider is nil in unit tests.
- ThemeProvider* themeProvider = [[self controller] themeProvider];
- if (themeProvider) {
- NSColor* uglyBlackBarColor = themeProvider->
- GetNSColor(BrowserThemeProvider::COLOR_BOOKMARK_TEXT, true);
- [[uglyBlackBarColor colorWithAlphaComponent:kBarOpacity] setFill];
- [[NSBezierPath bezierPathWithRect:uglyBlackBar] fill];
- }
+ NSColor* uglyBlackBarColor = [NSColor blackColor];
+ [[uglyBlackBarColor colorWithAlphaComponent:kBarOpacity] setFill];
+ [[NSBezierPath bezierPathWithRect:uglyBlackBar] fill];
}
}
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm b/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
index 2cf339e..6a46198 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
@@ -114,6 +114,14 @@
return nil;
}
+- (NSImage*)favIconForNode:(const BookmarkNode*)node {
+ return nil;
+}
+
+- (NSMenu*)contextMenuForNode:(const BookmarkNode*)node {
+ return nil;
+}
+
@end
namespace {
@@ -132,9 +140,6 @@ TEST_F(BookmarkBarFolderViewTest, Basics) {
[view_ awakeFromNib];
[[test_window() contentView] addSubview:view_];
- // Confirm an assumption made in our awakeFromNib
- EXPECT_FALSE([view_ showsDivider]);
-
// Make sure we're set up for DnD
NSArray* types = [view_ registeredDraggedTypes];
EXPECT_TRUE([types containsObject:kBookmarkButtonDragType]);
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_window.mm b/chrome/browser/cocoa/bookmark_bar_folder_window.mm
index 9d056f5..f911777 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_window.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_window.mm
@@ -4,9 +4,6 @@
#import "chrome/browser/cocoa/bookmark_bar_folder_window.h"
-#import "chrome/browser/cocoa/bookmark_bar_folder_controller.h"
-#import "chrome/browser/cocoa/themed_window.h"
-
@implementation BookmarkBarFolderWindow
- (id)initWithContentRect:(NSRect)contentRect
@@ -19,8 +16,4 @@
defer:deferCreation];
}
-- (ThemeProvider*)themeProvider {
- return [[self windowController] themeProvider];
-}
-
@end
diff --git a/chrome/browser/cocoa/bookmark_button.h b/chrome/browser/cocoa/bookmark_button.h
index 10c1bc4..a5176ac 100644
--- a/chrome/browser/cocoa/bookmark_button.h
+++ b/chrome/browser/cocoa/bookmark_button.h
@@ -116,6 +116,12 @@ class ThemeProvider;
// If there is a current folder controller, close it.
- (void)addNewFolderControllerWithParentButton:(BookmarkButton*)parentButton;
+// Provide a favIcon for a bookmark node. May return nil.
+- (NSImage*)favIconForNode:(const BookmarkNode*)node;
+
+// Provide a contextual menu for a bookmark node. May return nil.
+- (NSMenu*)contextMenuForNode:(const BookmarkNode*)node;
+
@end // @protocol BookmarkButtonControllerProtocol
diff --git a/chrome/browser/cocoa/bookmark_button_cell.h b/chrome/browser/cocoa/bookmark_button_cell.h
index a2f072a..6684b8e 100644
--- a/chrome/browser/cocoa/bookmark_button_cell.h
+++ b/chrome/browser/cocoa/bookmark_button_cell.h
@@ -25,7 +25,19 @@ class BookmarkNode;
@property (readwrite, assign) const BookmarkNode* bookmarkNode;
@property (readwrite, assign) int startingChildIndex;
-- (id)initTextCell:(NSString*)string; // Designated initializer
+// Create a button cell which draws with a theme.
++ (id)buttonCellForNode:(const BookmarkNode*)node
+ contextMenu:(NSMenu*)contextMenu
+ cellText:(NSString*)cellText
+ cellImage:(NSImage*)cellImage;
+
+// Initialize a button cell which draws with a theme.
+// Designated initializer.
+- (id)initForNode:(const BookmarkNode*)node
+ contextMenu:(NSMenu*)contextMenu
+ cellText:(NSString*)cellText
+ cellImage:(NSImage*)cellImage;
+
- (BOOL)empty; // returns YES if empty.
- (void)setEmpty:(BOOL)empty;
diff --git a/chrome/browser/cocoa/bookmark_button_cell.mm b/chrome/browser/cocoa/bookmark_button_cell.mm
index 7125a5c..f769938 100644
--- a/chrome/browser/cocoa/bookmark_button_cell.mm
+++ b/chrome/browser/cocoa/bookmark_button_cell.mm
@@ -2,10 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#import "chrome/browser/cocoa/bookmark_button_cell.h"
+
+#include "app/l10n_util_mac.h"
#include "base/logging.h"
+#include "base/sys_string_conversions.h"
#import "chrome/browser/bookmarks/bookmark_model.h"
-#import "chrome/browser/cocoa/bookmark_button_cell.h"
#import "chrome/browser/cocoa/bookmark_menu.h"
+#include "grit/generated_resources.h"
@interface BookmarkButtonCell(Private)
@@ -17,13 +21,45 @@
@synthesize startingChildIndex = startingChildIndex_;
-- (id)initTextCell:(NSString*)string {
- if ((self = [super initTextCell:string])) {
++ (id)buttonCellForNode:(const BookmarkNode*)node
+ contextMenu:(NSMenu*)contextMenu
+ cellText:(NSString*)cellText
+ cellImage:(NSImage*)cellImage {
+ id buttonCell =
+ [[[BookmarkButtonCell alloc] initForNode:node
+ contextMenu:contextMenu
+ cellText:cellText
+ cellImage:cellImage]
+ autorelease];
+ return buttonCell;
+}
+
+- (id)initForNode:(const BookmarkNode*)node
+ contextMenu:(NSMenu*)contextMenu
+ cellText:(NSString*)cellText
+ cellImage:(NSImage*)cellImage {
+ if ((self = [super initTextCell:cellText])) {
[self configureBookmarkButtonCell];
+
+ [self setBookmarkNode:node];
+
+ if (node) {
+ NSString* title = base::SysWideToNSString(node->GetTitle());
+ [self setBookmarkCellText:title image:cellImage];
+ [self setMenu:contextMenu];
+ } else {
+ [self setEmpty:YES];
+ [self setBookmarkCellText:l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU)
+ image:nil];
+ }
}
return self;
}
+- (id)initTextCell:(NSString*)string {
+ return [self initForNode:nil contextMenu:nil cellText:string cellImage:nil];
+}
+
// Used by the off-the-side menu, the only case where a
// BookmarkButtonCell is loaded from a nib.
- (void)awakeFromNib {
diff --git a/chrome/browser/cocoa/bookmark_button_cell_unittest.mm b/chrome/browser/cocoa/bookmark_button_cell_unittest.mm
index 63c043b..da378f1 100644
--- a/chrome/browser/cocoa/bookmark_button_cell_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_button_cell_unittest.mm
@@ -56,13 +56,16 @@ TEST_F(BookmarkButtonCellTest, SizeForBounds) {
TEST_F(BookmarkButtonCellTest, MouseEnterStuff) {
scoped_nsobject<BookmarkButtonCell> cell(
[[BookmarkButtonCell alloc] initTextCell:@"Testing"]);
+ // Setting the menu should have no affect since we either share or
+ // dynamically compose the menu given a node.
[cell setMenu:[[[BookmarkMenu alloc] initWithTitle:@"foo"] autorelease]];
+ EXPECT_FALSE([cell menu]);
BookmarkModel* model = helper_.profile()->GetBookmarkModel();
const BookmarkNode* node = model->GetBookmarkBarNode();
+ [cell setEmpty:NO];
[cell setBookmarkNode:node];
-
- EXPECT_TRUE([cell.get() showsBorderOnlyWhileMouseInside]);
+ EXPECT_TRUE([cell showsBorderOnlyWhileMouseInside]);
EXPECT_TRUE([cell menu]);
[cell setEmpty:YES];
diff --git a/chrome/browser/cocoa/gradient_button_cell.mm b/chrome/browser/cocoa/gradient_button_cell.mm
index 2ec70ba..002116d 100644
--- a/chrome/browser/cocoa/gradient_button_cell.mm
+++ b/chrome/browser/cocoa/gradient_button_cell.mm
@@ -276,7 +276,7 @@ static const NSTimeInterval kAnimationHideDuration = 0.4;
strokeColor = themeProvider ? themeProvider->GetNSColor(
active ? BrowserThemeProvider::COLOR_TOOLBAR_BUTTON_STROKE :
BrowserThemeProvider::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE,
- true) : [NSColor blackColor];
+ true) : [NSColor colorWithCalibratedWhite:0.0 alpha:0.6];
}
[strokeColor setStroke];
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 961419e..383018d 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -495,6 +495,8 @@
'browser/cocoa/bookmark_bar_constants.h',
'browser/cocoa/bookmark_bar_controller.h',
'browser/cocoa/bookmark_bar_controller.mm',
+ 'browser/cocoa/bookmark_bar_folder_button_cell.h',
+ 'browser/cocoa/bookmark_bar_folder_button_cell.mm',
'browser/cocoa/bookmark_bar_folder_controller.h',
'browser/cocoa/bookmark_bar_folder_controller.mm',
'browser/cocoa/bookmark_bar_folder_view.h',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 85eedb7..7b3f7d9 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -609,6 +609,7 @@
'browser/cocoa/bookmark_all_tabs_controller_unittest.mm',
'browser/cocoa/bookmark_bar_bridge_unittest.mm',
'browser/cocoa/bookmark_bar_controller_unittest.mm',
+ 'browser/cocoa/bookmark_bar_folder_button_cell_unittest.mm',
'browser/cocoa/bookmark_bar_folder_controller_unittest.mm',
'browser/cocoa/bookmark_bar_folder_view_unittest.mm',
'browser/cocoa/bookmark_bar_folder_window_unittest.mm',