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

Side by Side Diff: chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm

Issue 2126043002: [Material][Mac] Fix Default Favicon's Color (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for rsesek 2 Created 4 years, 5 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
6 6
7 #import <QuartzCore/QuartzCore.h> 7 #import <QuartzCore/QuartzCore.h>
8 8
9 #include <cmath> 9 #include <cmath>
10 #include <limits> 10 #include <limits>
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 bool animate_; 135 bool animate_;
136 DISALLOW_COPY_AND_ASSIGN(ScopedNSAnimationContextGroup); 136 DISALLOW_COPY_AND_ASSIGN(ScopedNSAnimationContextGroup);
137 }; 137 };
138 138
139 } // namespace 139 } // namespace
140 140
141 @interface TabStripController (Private) 141 @interface TabStripController (Private)
142 - (void)addSubviewToPermanentList:(NSView*)aView; 142 - (void)addSubviewToPermanentList:(NSView*)aView;
143 - (void)regenerateSubviewList; 143 - (void)regenerateSubviewList;
144 - (NSInteger)indexForContentsView:(NSView*)view; 144 - (NSInteger)indexForContentsView:(NSView*)view;
145 - (NSImage*)iconImageForContents:(content::WebContents*)contents; 145 - (NSImage*)iconImageForContents:(content::WebContents*)contents
146 atIndex:(NSInteger)modelIndex;
146 - (void)updateIconsForContents:(content::WebContents*)contents 147 - (void)updateIconsForContents:(content::WebContents*)contents
147 atIndex:(NSInteger)modelIndex; 148 atIndex:(NSInteger)modelIndex;
148 - (void)layoutTabsWithAnimation:(BOOL)animate 149 - (void)layoutTabsWithAnimation:(BOOL)animate
149 regenerateSubviews:(BOOL)doUpdate; 150 regenerateSubviews:(BOOL)doUpdate;
150 - (void)animationDidStop:(CAAnimation*)animation 151 - (void)animationDidStop:(CAAnimation*)animation
151 forController:(TabController*)controller 152 forController:(TabController*)controller
152 finished:(BOOL)finished; 153 finished:(BOOL)finished;
153 - (NSInteger)indexFromModelIndex:(NSInteger)index; 154 - (NSInteger)indexFromModelIndex:(NSInteger)index;
154 - (void)clickNewTabButton:(id)sender; 155 - (void)clickNewTabButton:(id)sender;
155 - (NSInteger)numberOfOpenTabs; 156 - (NSInteger)numberOfOpenTabs;
(...skipping 1134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 [oldController willBecomeUnselectedTab]; 1291 [oldController willBecomeUnselectedTab];
1291 } 1292 }
1292 } 1293 }
1293 1294
1294 NSUInteger activeIndex = [self indexFromModelIndex:modelIndex]; 1295 NSUInteger activeIndex = [self indexFromModelIndex:modelIndex];
1295 1296
1296 [tabArray_ enumerateObjectsUsingBlock:^(TabController* current, 1297 [tabArray_ enumerateObjectsUsingBlock:^(TabController* current,
1297 NSUInteger index, 1298 NSUInteger index,
1298 BOOL* stop) { 1299 BOOL* stop) {
1299 [current setActive:index == activeIndex]; 1300 [current setActive:index == activeIndex];
1301 [self updateIconsForContents:newContents atIndex:modelIndex];
1300 }]; 1302 }];
1301 1303
1302 // Tell the new tab contents it is about to become the selected tab. Here it 1304 // Tell the new tab contents it is about to become the selected tab. Here it
1303 // can do things like make sure the toolbar is up to date. 1305 // can do things like make sure the toolbar is up to date.
1304 TabContentsController* newController = 1306 TabContentsController* newController =
1305 [tabContentsArray_ objectAtIndex:activeIndex]; 1307 [tabContentsArray_ objectAtIndex:activeIndex];
1306 [newController willBecomeSelectedTab]; 1308 [newController willBecomeSelectedTab];
1307 1309
1308 // Relayout for new tabs and to let the selected tab grow to be larger in 1310 // Relayout for new tabs and to let the selected tab grow to be larger in
1309 // size than surrounding tabs if the user has many. This also raises the 1311 // size than surrounding tabs if the user has many. This also raises the
(...skipping 11 matching lines...) Expand all
1321 // First get the vector of indices, which is allays sorted in ascending order. 1323 // First get the vector of indices, which is allays sorted in ascending order.
1322 ui::ListSelectionModel::SelectedIndices selection( 1324 ui::ListSelectionModel::SelectedIndices selection(
1323 tabStripModel_->selection_model().selected_indices()); 1325 tabStripModel_->selection_model().selected_indices());
1324 // Iterate through all of the tabs, selecting each as necessary. 1326 // Iterate through all of the tabs, selecting each as necessary.
1325 ui::ListSelectionModel::SelectedIndices::iterator iter = selection.begin(); 1327 ui::ListSelectionModel::SelectedIndices::iterator iter = selection.begin();
1326 int i = 0; 1328 int i = 0;
1327 for (TabController* current in tabArray_.get()) { 1329 for (TabController* current in tabArray_.get()) {
1328 BOOL selected = iter != selection.end() && 1330 BOOL selected = iter != selection.end() &&
1329 [self indexFromModelIndex:*iter] == i; 1331 [self indexFromModelIndex:*iter] == i;
1330 [current setSelected:selected]; 1332 [current setSelected:selected];
1333 [self updateIconsForContents:tabStripModel_->GetWebContentsAt(i) atIndex:i];
1331 if (selected) 1334 if (selected)
1332 ++iter; 1335 ++iter;
1333 ++i; 1336 ++i;
1334 } 1337 }
1335 } 1338 }
1336 1339
1337 - (void)tabReplacedWithContents:(content::WebContents*)newContents 1340 - (void)tabReplacedWithContents:(content::WebContents*)newContents
1338 previousContents:(content::WebContents*)oldContents 1341 previousContents:(content::WebContents*)oldContents
1339 atIndex:(NSInteger)modelIndex { 1342 atIndex:(NSInteger)modelIndex {
1340 NSInteger index = [self indexFromModelIndex:modelIndex]; 1343 NSInteger index = [self indexFromModelIndex:modelIndex];
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1467 // tabs. Instead, simply mark it as closing to prevent the tab from 1470 // tabs. Instead, simply mark it as closing to prevent the tab from
1468 // generating any drags or selections. 1471 // generating any drags or selections.
1469 [[tab tabView] setClosing:YES]; 1472 [[tab tabView] setClosing:YES];
1470 } 1473 }
1471 1474
1472 [delegate_ onTabDetachedWithContents:contents]; 1475 [delegate_ onTabDetachedWithContents:contents];
1473 } 1476 }
1474 1477
1475 // A helper routine for creating an NSImageView to hold the favicon or app icon 1478 // A helper routine for creating an NSImageView to hold the favicon or app icon
1476 // for |contents|. 1479 // for |contents|.
1477 - (NSImage*)iconImageForContents:(content::WebContents*)contents { 1480 - (NSImage*)iconImageForContents:(content::WebContents*)contents
1481 atIndex:(NSInteger)modelIndex {
1478 extensions::TabHelper* extensions_tab_helper = 1482 extensions::TabHelper* extensions_tab_helper =
1479 extensions::TabHelper::FromWebContents(contents); 1483 extensions::TabHelper::FromWebContents(contents);
1480 BOOL isApp = extensions_tab_helper->is_app(); 1484 BOOL isApp = extensions_tab_helper->is_app();
1481 NSImage* image = nil; 1485 NSImage* image = nil;
1482 // Favicons come from the renderer, and the renderer draws everything in the 1486 // Favicons come from the renderer, and the renderer draws everything in the
1483 // system color space. 1487 // system color space.
1484 CGColorSpaceRef colorSpace = base::mac::GetSystemColorSpace(); 1488 CGColorSpaceRef colorSpace = base::mac::GetSystemColorSpace();
1485 if (isApp) { 1489 if (isApp) {
1486 SkBitmap* icon = extensions_tab_helper->GetExtensionAppIcon(); 1490 SkBitmap* icon = extensions_tab_helper->GetExtensionAppIcon();
1487 if (icon) 1491 if (icon)
1488 image = skia::SkBitmapToNSImageWithColorSpace(*icon, colorSpace); 1492 image = skia::SkBitmapToNSImageWithColorSpace(*icon, colorSpace);
1489 } else { 1493 } else {
1490 TabController* tab = [tabArray_ firstObject]; 1494 TabController* tab = [tabArray_ objectAtIndex:modelIndex];
1491 NSColor* titleColor = [[tab tabView] titleColor]; 1495 image = mac::FaviconForWebContents(contents, [[tab tabView] iconColor]);
1492 NSColor* deviceColor =
1493 [titleColor colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]];
1494 image = mac::FaviconForWebContents(
1495 contents, skia::NSDeviceColorToSkColor(deviceColor));
1496 } 1496 }
1497 1497
1498 // Either we don't have a valid favicon or there was some issue converting it 1498 // Either we don't have a valid favicon or there was some issue converting it
1499 // from an SkBitmap. Either way, just show the default. 1499 // from an SkBitmap. Either way, just show the default.
1500 if (!image) 1500 if (!image)
1501 image = defaultFavicon_.get(); 1501 image = defaultFavicon_.get();
1502 1502
1503 return image; 1503 return image;
1504 } 1504 }
1505 1505
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 [tabController setLoadingState:newState]; 1564 [tabController setLoadingState:newState];
1565 1565
1566 // While loading, this function is called repeatedly with the same state. 1566 // While loading, this function is called repeatedly with the same state.
1567 // To avoid expensive unnecessary view manipulation, only make changes when 1567 // To avoid expensive unnecessary view manipulation, only make changes when
1568 // the state is actually changing. When loading is complete (kTabDone), 1568 // the state is actually changing. When loading is complete (kTabDone),
1569 // every call to this function is significant. 1569 // every call to this function is significant.
1570 if (newState == kTabDone || oldState != newState || 1570 if (newState == kTabDone || oldState != newState ||
1571 oldHasIcon != newHasIcon) { 1571 oldHasIcon != newHasIcon) {
1572 if (newHasIcon) { 1572 if (newHasIcon) {
1573 if (newState == kTabDone) { 1573 if (newState == kTabDone) {
1574 [tabController setIconImage:[self iconImageForContents:contents]]; 1574 [tabController setIconImage:[self iconImageForContents:contents
1575 atIndex:modelIndex]];
1575 } else if (newState == kTabCrashed) { 1576 } else if (newState == kTabCrashed) {
1576 [tabController setIconImage:sadFaviconImage withToastAnimation:YES]; 1577 [tabController setIconImage:sadFaviconImage withToastAnimation:YES];
1577 } else { 1578 } else {
1578 [tabController setIconImage:throbberImage]; 1579 [tabController setIconImage:throbberImage];
1579 } 1580 }
1580 } else { 1581 } else {
1581 [tabController setIconImage:nil]; 1582 [tabController setIconImage:nil];
1582 } 1583 }
1583 } 1584 }
1584 1585
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
2300 } 2301 }
2301 return NO; 2302 return NO;
2302 } 2303 }
2303 2304
2304 - (TabAlertState)alertStateForContents:(content::WebContents*)contents { 2305 - (TabAlertState)alertStateForContents:(content::WebContents*)contents {
2305 return chrome::GetTabAlertStateForContents(contents); 2306 return chrome::GetTabAlertStateForContents(contents);
2306 } 2307 }
2307 2308
2308 - (void)themeDidChangeNotification:(NSNotification*)notification { 2309 - (void)themeDidChangeNotification:(NSNotification*)notification {
2309 [newTabButton_ setImages]; 2310 [newTabButton_ setImages];
2311 for (int i = 0; i < tabStripModel_->count(); i++) {
2312 [self updateIconsForContents:tabStripModel_->GetWebContentsAt(i) atIndex:i];
2313 }
2310 } 2314 }
2311 2315
2312 - (void)setVisualEffectsDisabledForFullscreen:(BOOL)fullscreen { 2316 - (void)setVisualEffectsDisabledForFullscreen:(BOOL)fullscreen {
2313 [tabStripView_ setVisualEffectsDisabledForFullscreen:fullscreen]; 2317 [tabStripView_ setVisualEffectsDisabledForFullscreen:fullscreen];
2314 } 2318 }
2315 2319
2316 @end 2320 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.mm ('k') | chrome/browser/ui/cocoa/tabs/tab_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698