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

Side by Side Diff: chrome/browser/cocoa/bookmark_bar_controller.mm

Issue 125061: Add favicons to Mac bookmark bar. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/cocoa/cocoa_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/sys_string_conversions.h" 5 #include "base/sys_string_conversions.h"
6 #include "chrome/browser/bookmarks/bookmark_model.h" 6 #include "chrome/browser/bookmarks/bookmark_model.h"
7 #include "chrome/browser/browser.h" 7 #include "chrome/browser/browser.h"
8 #include "chrome/browser/browser_list.h" 8 #include "chrome/browser/browser_list.h"
9 #import "chrome/browser/cocoa/bookmark_bar_bridge.h" 9 #import "chrome/browser/cocoa/bookmark_bar_bridge.h"
10 #import "chrome/browser/cocoa/bookmark_bar_controller.h" 10 #import "chrome/browser/cocoa/bookmark_bar_controller.h"
11 #import "chrome/browser/cocoa/bookmark_bar_view.h" 11 #import "chrome/browser/cocoa/bookmark_bar_view.h"
12 #import "chrome/browser/cocoa/bookmark_button_cell.h" 12 #import "chrome/browser/cocoa/bookmark_button_cell.h"
13 #import "chrome/browser/cocoa/cocoa_utils.h"
13 #include "chrome/browser/profile.h" 14 #include "chrome/browser/profile.h"
14 #include "chrome/common/pref_names.h" 15 #include "chrome/common/pref_names.h"
15 #include "chrome/common/pref_service.h" 16 #include "chrome/common/pref_service.h"
16 17
18 using namespace CocoaUtils;
19
17 @interface BookmarkBarController(Private) 20 @interface BookmarkBarController(Private)
18 - (void)applyContentAreaOffset:(BOOL)apply; 21 - (void)applyContentAreaOffset:(BOOL)apply;
19 - (void)positionBar; 22 - (void)positionBar;
20 - (void)showBookmarkBar:(BOOL)enable; 23 - (void)showBookmarkBar:(BOOL)enable;
21 @end 24 @end
22 25
23 namespace { 26 namespace {
24 const int kBookmarkBarHeight = 30; 27 const int kBookmarkBarHeight = 30;
25 // Magic numbers from Cole 28 // Magic numbers from Cole
26 const CGFloat kDefaultBookmarkWidth = 150.0; 29 const CGFloat kDefaultBookmarkWidth = 150.0;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 // TODO(jrg): add an openBookmarkInBackground() for ctrl-click which 145 // TODO(jrg): add an openBookmarkInBackground() for ctrl-click which
143 // has a different disposition. 146 // has a different disposition.
144 - (void)openBookmark:(id)sender { 147 - (void)openBookmark:(id)sender {
145 BookmarkNode* node = static_cast<BookmarkNode*>([[[sender cell] 148 BookmarkNode* node = static_cast<BookmarkNode*>([[[sender cell]
146 representedObject] 149 representedObject]
147 pointerValue]); 150 pointerValue]);
148 DCHECK(node); 151 DCHECK(node);
149 [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; 152 [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB];
150 } 153 }
151 154
152 // Return an NSCell suitable for a bookmark button. 155 // Return an autoreleased NSCell suitable for a bookmark button.
153 - (NSCell *)cellForBookmarkNode:(BookmarkNode*)node frame:(NSRect)frame { 156 - (NSCell *)cellForBookmarkNode:(BookmarkNode*)node frame:(NSRect)frame {
154 NSString* title = base::SysWideToNSString(node->GetTitle()); 157 NSString* title = base::SysWideToNSString(node->GetTitle());
155 NSButtonCell *cell = [[[BookmarkButtonCell alloc] initTextCell:nil] 158 NSButtonCell *cell = [[[BookmarkButtonCell alloc] initTextCell:nil]
156 autorelease]; 159 autorelease];
157 DCHECK(cell); 160 DCHECK(cell);
158 [cell setRepresentedObject:[NSValue valueWithPointer:node]]; 161 [cell setRepresentedObject:[NSValue valueWithPointer:node]];
159 [cell setButtonType:NSMomentaryPushInButton]; 162 [cell setButtonType:NSMomentaryPushInButton];
160 [cell setBezelStyle:NSShadowlessSquareBezelStyle]; 163 [cell setBezelStyle:NSShadowlessSquareBezelStyle];
161 [cell setShowsBorderOnlyWhileMouseInside:YES]; 164 [cell setShowsBorderOnlyWhileMouseInside:YES];
162 165
163 // TODO(jrg): add the real image. Find or write an SkBitmap-to-NSImage helper . 166 // The favicon may be NULL if we haven't loaded it yet. Bookmarks
164 // For now I'm using the nav icon just to have something. 167 // (and their icons) are loaded on the IO thread to speed launch.
165 [cell setImage:[NSImage imageNamed:@"nav"]]; 168 const SkBitmap& favicon = bookmarkModel_->GetFavIcon(node);
166 [cell setImagePosition:NSImageLeft]; 169 if (!favicon.isNull()) {
170 NSImage* image = SkBitmapToNSImage(favicon);
171 if (image) {
172 [cell setImage:image];
173 [cell setImagePosition:NSImageLeft];
174 }
175 }
167 176
168 [cell setTitle:title]; 177 [cell setTitle:title];
169 [cell setControlSize:NSSmallControlSize]; 178 [cell setControlSize:NSSmallControlSize];
170 [cell setAlignment:NSLeftTextAlignment]; 179 [cell setAlignment:NSLeftTextAlignment];
171 [cell setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; 180 [cell setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
172 [cell setWraps:NO]; 181 [cell setWraps:NO];
173 [cell setLineBreakMode:NSLineBreakByTruncatingMiddle]; 182 [cell setLineBreakMode:NSLineBreakByTruncatingMiddle];
174 [cell setBordered:NO]; 183 [cell setBordered:NO];
175 return cell; 184 return cell;
176 } 185 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 url_string.c_str()]; 245 url_string.c_str()];
237 [button setToolTip:tooltip]; 246 [button setToolTip:tooltip];
238 } 247 }
239 // Finally, add it to the bookmark bar. 248 // Finally, add it to the bookmark bar.
240 [bookmarkBarView_ addSubview:button]; 249 [bookmarkBarView_ addSubview:button];
241 } 250 }
242 } 251 }
243 252
244 // TODO(jrg): for now this is brute force. 253 // TODO(jrg): for now this is brute force.
245 - (void)loaded:(BookmarkModel*)model { 254 - (void)loaded:(BookmarkModel*)model {
255 DCHECK(model == bookmarkModel_);
246 // Do nothing if not visible or too early 256 // Do nothing if not visible or too early
247 if ((barIsVisible_ == NO) || !model->IsLoaded()) 257 if ((barIsVisible_ == NO) || !model->IsLoaded())
248 return; 258 return;
249 // Else brute force nuke and build. 259 // Else brute force nuke and build.
250 BookmarkNode* node = model->GetBookmarkBarNode(); 260 BookmarkNode* node = model->GetBookmarkBarNode();
251 [self clearBookmarkBar]; 261 [self clearBookmarkBar];
252 [self addNodesToBar:node]; 262 [self addNodesToBar:node];
253 } 263 }
254 264
255 - (void)beingDeleted:(BookmarkModel*)model { 265 - (void)beingDeleted:(BookmarkModel*)model {
(...skipping 12 matching lines...) Expand all
268 parent:(BookmarkNode*)oldParent index:(int)index { 278 parent:(BookmarkNode*)oldParent index:(int)index {
269 [self loaded:model]; 279 [self loaded:model];
270 } 280 }
271 281
272 // TODO(jrg): for now this is brute force. 282 // TODO(jrg): for now this is brute force.
273 - (void)nodeChanged:(BookmarkModel*)model 283 - (void)nodeChanged:(BookmarkModel*)model
274 node:(BookmarkNode*)node { 284 node:(BookmarkNode*)node {
275 [self loaded:model]; 285 [self loaded:model];
276 } 286 }
277 287
288 // TODO(jrg): linear searching is bad.
289 // Need a BookmarkNode-->NSCell mapping.
278 - (void)nodeFavIconLoaded:(BookmarkModel*)model 290 - (void)nodeFavIconLoaded:(BookmarkModel*)model
279 node:(BookmarkNode*)node { 291 node:(BookmarkNode*)node {
280 // TODO(jrg): no icons yet 292 NSArray* views = [bookmarkBarView_ subviews];
293 for (NSButton* button in views) {
294 NSButtonCell* cell = [button cell];
295 void* pointer = [[cell representedObject] pointerValue];
296 BookmarkNode* cellnode = static_cast<BookmarkNode*>(pointer);
297 if (cellnode == node) {
298 NSImage* image = SkBitmapToNSImage(bookmarkModel_->GetFavIcon(node));
299 if (image) {
300 [cell setImage:image];
301 [cell setImagePosition:NSImageLeft];
302 }
303 return;
304 }
305 }
281 } 306 }
282 307
283 // TODO(jrg): for now this is brute force. 308 // TODO(jrg): for now this is brute force.
284 - (void)nodeChildrenReordered:(BookmarkModel*)model 309 - (void)nodeChildrenReordered:(BookmarkModel*)model
285 node:(BookmarkNode*)node { 310 node:(BookmarkNode*)node {
286 [self loaded:model]; 311 [self loaded:model];
287 } 312 }
288 313
289 - (NSView*)view { 314 - (NSView*)view {
290 return bookmarkBarView_; 315 return bookmarkBarView_;
291 } 316 }
292 317
293 @end 318 @end
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/cocoa/cocoa_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698