diff options
author | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-13 00:53:18 +0000 |
---|---|---|
committer | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-13 00:53:18 +0000 |
commit | 89ed01c883dabd07d5e4cf760a290ce682cbf34d (patch) | |
tree | dec1237ef5fbcfc99f889dd09ae41c1125014a38 /chrome/browser/cocoa/bookmark_bar_controller.mm | |
parent | 16adb28574253284c920079a6800a7cc192c8dc4 (diff) | |
download | chromium_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.mm | 37 |
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. |