summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/bookmark_bar_controller.mm
diff options
context:
space:
mode:
authorjrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-13 00:53:18 +0000
committerjrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-13 00:53:18 +0000
commit89ed01c883dabd07d5e4cf760a290ce682cbf34d (patch)
treedec1237ef5fbcfc99f889dd09ae41c1125014a38 /chrome/browser/cocoa/bookmark_bar_controller.mm
parent16adb28574253284c920079a6800a7cc192c8dc4 (diff)
downloadchromium_src-89ed01c883dabd07d5e4cf760a290ce682cbf34d.zip
chromium_src-89ed01c883dabd07d5e4cf760a290ce682cbf34d.tar.gz
chromium_src-89ed01c883dabd07d5e4cf760a290ce682cbf34d.tar.bz2
Add favicons to Mac bookmark bar.
BUG=8381 TEST=Open bookmark bar (Cmd-B). Add some bookmarks with sites that have favicons (cnn.com). See icons in bookmark buttons. Make sure color is correct. Review URL: http://codereview.chromium.org/125061 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18340 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/bookmark_bar_controller.mm')
-rw-r--r--chrome/browser/cocoa/bookmark_bar_controller.mm37
1 files changed, 31 insertions, 6 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_controller.mm b/chrome/browser/cocoa/bookmark_bar_controller.mm
index 0b3d8e7..e30a1a2 100644
--- a/chrome/browser/cocoa/bookmark_bar_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_controller.mm
@@ -10,10 +10,13 @@
#import "chrome/browser/cocoa/bookmark_bar_controller.h"
#import "chrome/browser/cocoa/bookmark_bar_view.h"
#import "chrome/browser/cocoa/bookmark_button_cell.h"
+#import "chrome/browser/cocoa/cocoa_utils.h"
#include "chrome/browser/profile.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
+using namespace CocoaUtils;
+
@interface BookmarkBarController(Private)
- (void)applyContentAreaOffset:(BOOL)apply;
- (void)positionBar;
@@ -149,7 +152,7 @@ const CGFloat kBookmarkHorizontalPadding = 8.0;
[delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB];
}
-// Return an NSCell suitable for a bookmark button.
+// Return an autoreleased NSCell suitable for a bookmark button.
- (NSCell *)cellForBookmarkNode:(BookmarkNode*)node frame:(NSRect)frame {
NSString* title = base::SysWideToNSString(node->GetTitle());
NSButtonCell *cell = [[[BookmarkButtonCell alloc] initTextCell:nil]
@@ -160,10 +163,16 @@ const CGFloat kBookmarkHorizontalPadding = 8.0;
[cell setBezelStyle:NSShadowlessSquareBezelStyle];
[cell setShowsBorderOnlyWhileMouseInside:YES];
- // TODO(jrg): add the real image. Find or write an SkBitmap-to-NSImage helper.
- // For now I'm using the nav icon just to have something.
- [cell setImage:[NSImage imageNamed:@"nav"]];
- [cell setImagePosition:NSImageLeft];
+ // The favicon may be NULL if we haven't loaded it yet. Bookmarks
+ // (and their icons) are loaded on the IO thread to speed launch.
+ const SkBitmap& favicon = bookmarkModel_->GetFavIcon(node);
+ if (!favicon.isNull()) {
+ NSImage* image = SkBitmapToNSImage(favicon);
+ if (image) {
+ [cell setImage:image];
+ [cell setImagePosition:NSImageLeft];
+ }
+ }
[cell setTitle:title];
[cell setControlSize:NSSmallControlSize];
@@ -243,6 +252,7 @@ const CGFloat kBookmarkHorizontalPadding = 8.0;
// TODO(jrg): for now this is brute force.
- (void)loaded:(BookmarkModel*)model {
+ DCHECK(model == bookmarkModel_);
// Do nothing if not visible or too early
if ((barIsVisible_ == NO) || !model->IsLoaded())
return;
@@ -275,9 +285,24 @@ const CGFloat kBookmarkHorizontalPadding = 8.0;
[self loaded:model];
}
+// TODO(jrg): linear searching is bad.
+// Need a BookmarkNode-->NSCell mapping.
- (void)nodeFavIconLoaded:(BookmarkModel*)model
node:(BookmarkNode*)node {
- // TODO(jrg): no icons yet
+ NSArray* views = [bookmarkBarView_ subviews];
+ for (NSButton* button in views) {
+ NSButtonCell* cell = [button cell];
+ void* pointer = [[cell representedObject] pointerValue];
+ BookmarkNode* cellnode = static_cast<BookmarkNode*>(pointer);
+ if (cellnode == node) {
+ NSImage* image = SkBitmapToNSImage(bookmarkModel_->GetFavIcon(node));
+ if (image) {
+ [cell setImage:image];
+ [cell setImagePosition:NSImageLeft];
+ }
+ return;
+ }
+ }
}
// TODO(jrg): for now this is brute force.