Index: chrome/browser/browser_theme_provider_mac.mm |
=================================================================== |
--- chrome/browser/browser_theme_provider_mac.mm (revision 19729) |
+++ chrome/browser/browser_theme_provider_mac.mm (working copy) |
@@ -52,13 +52,50 @@ |
return empty_image; |
} |
-void BrowserThemeProvider::FreePlatformImages() { |
+NSColor* BrowserThemeProvider::GetNSColorTint(int id) { |
DCHECK(CalledOnValidThread()); |
+ // Check to see if we already have the color in the cache. |
+ NSColorMap::const_iterator found = nscolor_cache_.find(id); |
+ if (found != nscolor_cache_.end()) |
+ return found->second; |
+ |
+ TintMap::iterator tint_iter = tints_.find(GetTintKey(id)); |
+ if (tint_iter != tints_.end()) { |
+ skia::HSL tint = tint_iter->second; |
+ |
+ // The tint is HSL, not HSB, but we're cheating for now. TODO(avi,alcor): |
+ // determine how much this matters and fix it if necessary. |
+ // http://crbug.com/15760 |
+ NSColor* tint_color = [NSColor colorWithCalibratedHue:tint.h |
+ saturation:tint.s |
+ brightness:tint.l |
+ alpha:1.0]; |
+ |
+ // We loaded successfully. Cache the color. |
+ if (tint_color) { |
+ nscolor_cache_[id] = [tint_color retain]; |
+ return tint_color; |
+ } |
+ } |
+ |
+ return nil; |
+} |
+ |
+void BrowserThemeProvider::FreePlatformCaches() { |
+ DCHECK(CalledOnValidThread()); |
+ |
// Free images. |
for (NSImageMap::iterator i = nsimage_cache_.begin(); |
i != nsimage_cache_.end(); i++) { |
[i->second release]; |
} |
nsimage_cache_.clear(); |
+ |
+ // Free colors. |
+ for (NSColorMap::iterator i = nscolor_cache_.begin(); |
+ i != nscolor_cache_.end(); i++) { |
+ [i->second release]; |
+ } |
+ nscolor_cache_.clear(); |
} |