diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-08 00:34:33 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-08 00:34:33 +0000 |
commit | 76855757706810dbe575ccf5c0996f0d7932671d (patch) | |
tree | 4158b5ebae25141a8104383365c71135ee9ae7c2 /chrome/browser/gtk/gtk_theme_provider.cc | |
parent | d11ead72d53b18bd43ff08b4c24141bd98a58ba2 (diff) | |
download | chromium_src-76855757706810dbe575ccf5c0996f0d7932671d.zip chromium_src-76855757706810dbe575ccf5c0996f0d7932671d.tar.gz chromium_src-76855757706810dbe575ccf5c0996f0d7932671d.tar.bz2 |
GTK Theme: Use Glen's new non-border
Imports Glen's new icons, and creates centered versions of all of them. Then
use these icons in the GTK theme interface.
Also selects the button tinting color to be a lighter color on some very dark
backgrounds.
Review URL: http://codereview.chromium.org/164202
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22839 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/gtk_theme_provider.cc')
-rw-r--r-- | chrome/browser/gtk/gtk_theme_provider.cc | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/chrome/browser/gtk/gtk_theme_provider.cc b/chrome/browser/gtk/gtk_theme_provider.cc index a9e331b..4a4075f 100644 --- a/chrome/browser/gtk/gtk_theme_provider.cc +++ b/chrome/browser/gtk/gtk_theme_provider.cc @@ -30,6 +30,17 @@ const skia::HSL kExactColor = { -1, -1, -1 }; const skia::HSL kDefaultFrameShift = { -1, -1, 0.4 }; +// Minimum difference between the toolbar and the button color before we try a +// different color. +const double kMinimumLuminanceDifference = 0.1; + +// Converts a GdkColor to a SkColor. +SkColor GdkToSkColor(GdkColor* color) { + return SkColorSetRGB(color->red >> 8, + color->green >> 8, + color->blue >> 8); +} + } // namespace // static @@ -175,7 +186,9 @@ void GtkThemeProvider::LoadGtkValues() { GdkColor frame_color = window_style->bg[GTK_STATE_SELECTED]; GdkColor inactive_frame_color = window_style->bg[GTK_STATE_INSENSITIVE]; + GdkColor toolbar_color = window_style->bg[GTK_STATE_NORMAL]; GdkColor button_color = window_style->bg[GTK_STATE_SELECTED]; + GdkColor label_color = label_style->text[GTK_STATE_NORMAL]; GtkSettings* settings = gtk_settings_get_default(); bool theme_has_frame_color = false; @@ -205,28 +218,39 @@ void GtkThemeProvider::LoadGtkValues() { // color, change the luminosity of the frame color downwards to 80% of what // it currently is. This is in a futile attempt to match the default // metacity and xfwm themes. - SkColor shifted = - skia::HSLShift(SkColorSetRGB((frame_color.red >> 8), - (frame_color.green >> 8), - (frame_color.blue >> 8)), - kDefaultFrameShift); + SkColor shifted = skia::HSLShift(GdkToSkColor(&frame_color), + kDefaultFrameShift); frame_color.pixel = 0; frame_color.red = SkColorGetR(shifted) * kSkiaToGDKMultiplier; frame_color.green = SkColorGetG(shifted) * kSkiaToGDKMultiplier; frame_color.blue = SkColorGetB(shifted) * kSkiaToGDKMultiplier; } + // By default, the button tint color is the background selection color. But + // this can be unreadable in some dark themes, so we set a minimum contrast + // between the button color and the toolbar color. + skia::HSL button_hsl; + skia::SkColorToHSL(GdkToSkColor(&button_color), button_hsl); + skia::HSL toolbar_hsl; + skia::SkColorToHSL(GdkToSkColor(&toolbar_color), toolbar_hsl); + double hsl_difference = fabs(button_hsl.l - toolbar_hsl.l); + if (hsl_difference <= kMinimumLuminanceDifference) { + // Not enough contrast. Try the text color instead. + skia::HSL label_hsl; + skia::SkColorToHSL(GdkToSkColor(&label_color), label_hsl); + double label_difference = fabs(label_hsl.l - toolbar_hsl.l); + if (label_difference >= kMinimumLuminanceDifference) { + button_color = label_color; + } + } + SetThemeColorFromGtk(kColorFrame, &frame_color); // Skip COLOR_FRAME_INACTIVE and the incognito colors, as they will be // autogenerated from tints. - SetThemeColorFromGtk(kColorToolbar, - &window_style->bg[GTK_STATE_NORMAL]); - SetThemeColorFromGtk(kColorTabText, - &label_style->text[GTK_STATE_NORMAL]); - SetThemeColorFromGtk(kColorBackgroundTabText, - &label_style->text[GTK_STATE_NORMAL]); - SetThemeColorFromGtk(kColorBookmarkText, - &label_style->text[GTK_STATE_NORMAL]); + SetThemeColorFromGtk(kColorToolbar, &toolbar_color); + SetThemeColorFromGtk(kColorTabText, &label_color); + SetThemeColorFromGtk(kColorBackgroundTabText, &label_color); + SetThemeColorFromGtk(kColorBookmarkText, &label_color); SetThemeColorFromGtk(kColorControlBackground, &window_style->bg[GTK_STATE_NORMAL]); SetThemeColorFromGtk(kColorButtonBackground, @@ -257,17 +281,14 @@ void GtkThemeProvider::LoadGtkValues() { } void GtkThemeProvider::SetThemeColorFromGtk(const char* id, GdkColor* color) { - SetColor(id, SkColorSetRGB(color->red >> 8, - color->green >> 8, - color->blue >> 8)); + SetColor(id, GdkToSkColor(color)); } void GtkThemeProvider::SetThemeTintFromGtk(const char* id, GdkColor* color, const skia::HSL& default_tint) { skia::HSL hsl; - skia::SkColorToHSL(SkColorSetRGB((color->red >> 8), - (color->green >> 8), - (color->blue >> 8)), hsl); + skia::SkColorToHSL(GdkToSkColor(color), hsl); + if (default_tint.s != -1) hsl.s = default_tint.s; |