diff options
-rw-r--r-- | app/theme_provider.h | 8 | ||||
-rw-r--r-- | chrome/browser/browser_theme_provider.cc | 98 | ||||
-rw-r--r-- | chrome/browser/browser_theme_provider.h | 9 | ||||
-rw-r--r-- | chrome/browser/browser_theme_provider_mac.mm | 27 |
4 files changed, 109 insertions, 33 deletions
diff --git a/app/theme_provider.h b/app/theme_provider.h index 073247c..f9a9bb5 100644 --- a/app/theme_provider.h +++ b/app/theme_provider.h @@ -82,8 +82,14 @@ class ThemeProvider { // // The bitmap is not assumed to exist. If a theme does not provide an image, // this function will return nil. - virtual NSImage* GetNSImageNamed(int id) = 0; + + // Gets the NSColor with the specified |id|. + // + // The color is not assumed to exist. If a theme does not provide an color, + // this function will return nil. + virtual NSColor* GetNSColor(int id) = 0; + // Gets the NSColor for tinting with the specified |id|. // // The tint is not assumed to exist. If a theme does not provide a tint with diff --git a/chrome/browser/browser_theme_provider.cc b/chrome/browser/browser_theme_provider.cc index c6da8b9..ff33e43 100644 --- a/chrome/browser/browser_theme_provider.cc +++ b/chrome/browser/browser_theme_provider.cc @@ -258,52 +258,95 @@ SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) { } } -SkColor BrowserThemeProvider::GetColor(int id) { - DCHECK(CalledOnValidThread()); - - // TODO(glen): Figure out if we need to tint these. http://crbug.com/11578 +const std::string BrowserThemeProvider::GetColorKey(int id) { switch (id) { case COLOR_FRAME: - return FindColor(kColorFrame, kDefaultColorFrame); + return kColorFrame; case COLOR_FRAME_INACTIVE: - return FindColor(kColorFrameInactive, kDefaultColorFrameInactive); + return kColorFrameInactive; case COLOR_FRAME_INCOGNITO: - return FindColor(kColorFrameIncognito, kDefaultColorFrameIncognito); + return kColorFrameIncognito; case COLOR_FRAME_INCOGNITO_INACTIVE: - return FindColor(kColorFrameIncognitoInactive, - kDefaultColorFrameIncognitoInactive); + return kColorFrameIncognitoInactive; case COLOR_TOOLBAR: - return FindColor(kColorToolbar, kDefaultColorToolbar); + return kColorToolbar; case COLOR_TAB_TEXT: - return FindColor(kColorTabText, kDefaultColorTabText); + return kColorTabText; case COLOR_BACKGROUND_TAB_TEXT: - return FindColor(kColorBackgroundTabText, kDefaultColorBackgroundTabText); + return kColorBackgroundTabText; case COLOR_BOOKMARK_TEXT: - return FindColor(kColorBookmarkText, kDefaultColorBookmarkText); + return kColorBookmarkText; case COLOR_NTP_BACKGROUND: - return (colors_.find(kColorNTPBackground) != colors_.end()) ? - colors_[kColorNTPBackground] : - kDefaultColorNTPBackground; + return kColorNTPBackground; case COLOR_NTP_TEXT: - return FindColor(kColorNTPText, kDefaultColorNTPText); + return kColorNTPText; case COLOR_NTP_LINK: - return FindColor(kColorNTPLink, kDefaultColorNTPLink); + return kColorNTPLink; case COLOR_NTP_SECTION: - return FindColor(kColorNTPSection, kDefaultColorNTPSection); + return kColorNTPSection; case COLOR_NTP_SECTION_TEXT: - return FindColor(kColorNTPSectionText, kDefaultColorNTPSectionText); + return kColorNTPSectionText; case COLOR_NTP_SECTION_LINK: - return FindColor(kColorNTPSectionLink, kDefaultColorNTPSectionLink); + return kColorNTPSectionLink; case COLOR_CONTROL_BACKGROUND: - return FindColor(kColorControlBackground, kDefaultColorControlBackground); + return kColorControlBackground; case COLOR_BUTTON_BACKGROUND: - return FindColor(kColorButtonBackground, kDefaultColorButtonBackground); + return kColorButtonBackground; default: NOTREACHED() << "Unknown color requested"; + return ""; + } +} + +SkColor BrowserThemeProvider::GetDefaultColor(int id) { + switch (id) { + case COLOR_FRAME: + return kDefaultColorFrame; + case COLOR_FRAME_INACTIVE: + return kDefaultColorFrameInactive; + case COLOR_FRAME_INCOGNITO: + return kDefaultColorFrameIncognito; + case COLOR_FRAME_INCOGNITO_INACTIVE: + return kDefaultColorFrameIncognitoInactive; + case COLOR_TOOLBAR: + return kDefaultColorToolbar; + case COLOR_TAB_TEXT: + return kDefaultColorTabText; + case COLOR_BACKGROUND_TAB_TEXT: + return kDefaultColorBackgroundTabText; + case COLOR_BOOKMARK_TEXT: + return kDefaultColorBookmarkText; + case COLOR_NTP_BACKGROUND: + return kDefaultColorNTPBackground; + case COLOR_NTP_TEXT: + return kDefaultColorNTPText; + case COLOR_NTP_LINK: + return kDefaultColorNTPLink; + case COLOR_NTP_SECTION: + return kDefaultColorNTPSection; + case COLOR_NTP_SECTION_TEXT: + return kDefaultColorNTPSectionText; + case COLOR_NTP_SECTION_LINK: + return kDefaultColorNTPSectionLink; + case COLOR_CONTROL_BACKGROUND: + return kDefaultColorControlBackground; + case COLOR_BUTTON_BACKGROUND: + return kDefaultColorButtonBackground; + default: + // Return a debugging red color. + return 0xffff0000; } +} + +SkColor BrowserThemeProvider::GetColor(int id) { + DCHECK(CalledOnValidThread()); - // Return a debugging red color. - return 0xffff0000; + // TODO(glen): Figure out if we need to tint these. http://crbug.com/11578 + ColorMap::iterator color_iter = colors_.find(GetColorKey(id)); + if (color_iter != colors_.end()) + return color_iter->second; + else + return GetDefaultColor(id); } bool BrowserThemeProvider::GetDisplayProperty(int id, int* result) { @@ -970,11 +1013,6 @@ void BrowserThemeProvider::LoadThemePrefs() { } } -SkColor BrowserThemeProvider::FindColor(const char* id, - SkColor default_color) { - return (colors_.find(id) != colors_.end()) ? colors_[id] : default_color; -} - void BrowserThemeProvider::ClearCaches() { FreePlatformCaches(); for (ImageCache::iterator i = image_cache_.begin(); diff --git a/chrome/browser/browser_theme_provider.h b/chrome/browser/browser_theme_provider.h index 525d396..a1db2ff 100644 --- a/chrome/browser/browser_theme_provider.h +++ b/chrome/browser/browser_theme_provider.h @@ -160,6 +160,7 @@ class BrowserThemeProvider : public base::RefCounted<BrowserThemeProvider>, virtual GdkPixbuf* GetRTLEnabledPixbufNamed(int id); #elif defined(OS_MACOSX) virtual NSImage* GetNSImageNamed(int id); + virtual NSColor* GetNSColor(int id); virtual NSColor* GetNSColorTint(int id); #endif @@ -242,6 +243,12 @@ class BrowserThemeProvider : public base::RefCounted<BrowserThemeProvider>, // Returns the default tint for the given tint |id| TINT_* enum value. skia::HSL GetDefaultTint(int id); + // Returns the string key for the given color |id| COLOR_* enum value. + const std::string GetColorKey(int id); + + // Returns the default color for the given color |id| COLOR_* enum value. + SkColor GetDefaultColor(int id); + // Get the specified tint - |id| is one of the TINT_* enum values. skia::HSL GetTint(int id); @@ -283,8 +290,6 @@ class BrowserThemeProvider : public base::RefCounted<BrowserThemeProvider>, // Save the id of the last theme installed. void SaveThemeID(const std::string& id); - SkColor FindColor(const char* id, SkColor default_color); - // Frees generated images and clears the image cache. void ClearCaches(); diff --git a/chrome/browser/browser_theme_provider_mac.mm b/chrome/browser/browser_theme_provider_mac.mm index 059f24d..45bebc8 100644 --- a/chrome/browser/browser_theme_provider_mac.mm +++ b/chrome/browser/browser_theme_provider_mac.mm @@ -67,6 +67,33 @@ NSImage* BrowserThemeProvider::GetNSImageNamed(int id) { return empty_image; } +NSColor* BrowserThemeProvider::GetNSColor(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; + + ColorMap::iterator color_iter = colors_.find(GetColorKey(id)); + if (color_iter != colors_.end()) { + const SkColor& sk_color = color_iter->second; + + NSColor* color = [NSColor colorWithCalibratedRed:SkColorGetR(sk_color) + green:SkColorGetG(sk_color) + blue:SkColorGetB(sk_color) + alpha:SkColorGetA(sk_color)]; + + // We loaded successfully. Cache the color. + if (color) { + nscolor_cache_[id] = [color retain]; + return color; + } + } + + return nil; +} + NSColor* BrowserThemeProvider::GetNSColorTint(int id) { DCHECK(CalledOnValidThread()); |