summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/theme_provider.h8
-rw-r--r--chrome/browser/browser_theme_provider.cc98
-rw-r--r--chrome/browser/browser_theme_provider.h9
-rw-r--r--chrome/browser/browser_theme_provider_mac.mm27
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());