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

Unified Diff: ui/native_theme/native_theme_win.cc

Issue 11421204: Use native theme colors for textfields; etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: [En|Dis]able the RenderText cursor instead of setting transient visibility. Created 8 years 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 side-by-side diff with in-line comments
Download patch
Index: ui/native_theme/native_theme_win.cc
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc
index 7ede675d63811f8cd27a5e654d095951dee78bfd..e4065a70f3594cd60c6e392251c632aad20cd866 100644
--- a/ui/native_theme/native_theme_win.cc
+++ b/ui/native_theme/native_theme_win.cc
@@ -49,26 +49,24 @@ const SkColor kEnabledMenuItemForegroundColor = kTextButtonEnabledColor;
const SkColor kDisabledMenuItemForegroundColor = kTextButtonDisabledColor;
const SkColor kFocusedMenuItemBackgroundColor = SkColorSetRGB(246, 249, 253);
const SkColor kMenuSeparatorColor = SkColorSetARGB(50, 0, 0, 0);
-// Label:
-const SkColor kLabelEnabledColor = color_utils::GetSysSkColor(COLOR_WINDOWTEXT);
-const SkColor kLabelDisabledColor = color_utils::GetSysSkColor(COLOR_GRAYTEXT);
-const SkColor kLabelBackgroundColor = color_utils::GetSysSkColor(COLOR_WINDOW);
// Textfield:
-const SkColor kTextfieldDefaultColor = SK_ColorBLACK;
-const SkColor kTextfieldDefaultBackground = SK_ColorWHITE;
-const SkColor kTextfieldSelectionColor = SK_ColorWHITE;
-const SkColor kTextfieldSelectionBackgroundFocused =
- SkColorSetRGB(0x1D, 0x90, 0xFF);
const SkColor kTextfieldSelectionBackgroundUnfocused = SK_ColorLTGRAY;
-SkColor WinColorToSkColor(COLORREF color) {
- return SkColorSetRGB(GetRValue(color), GetGValue(color), GetBValue(color));
-}
+// Windows system color IDs cached and updated by the native theme.
+const int kSystemColors[] = {
+ COLOR_3DFACE,
+ COLOR_GRAYTEXT,
+ COLOR_HIGHLIGHT,
+ COLOR_HIGHLIGHTTEXT,
+ COLOR_SCROLLBAR,
+ COLOR_WINDOW,
+ COLOR_WINDOWTEXT,
+};
void SetCheckerboardShader(SkPaint* paint, const RECT& align_rect) {
// Create a 2x2 checkerboard pattern using the 3D face and highlight colors.
- SkColor face = skia::COLORREFToSkColor(GetSysColor(COLOR_3DFACE));
- SkColor highlight = skia::COLORREFToSkColor(GetSysColor(COLOR_3DHILIGHT));
+ const SkColor face = color_utils::GetSysSkColor(COLOR_3DFACE);
+ const SkColor highlight = color_utils::GetSysSkColor(COLOR_3DHILIGHT);
SkColor buffer[] = { face, highlight, highlight, face };
// Confusing bit: we first create a temporary bitmap with our desired pattern,
// then copy it to another bitmap. The temporary bitmap doesn't take
@@ -154,7 +152,7 @@ SkColor NativeThemeWin::GetThemeColorWithDefault(ThemeName theme,
int default_sys_color) const {
SkColor color;
if (GetThemeColor(theme, part_id, state_id, prop_id, &color) != S_OK)
- color = skia::COLORREFToSkColor(GetSysColor(default_sys_color));
+ color = color_utils::GetSysSkColor(default_sys_color);
return color;
}
@@ -306,7 +304,8 @@ NativeThemeWin::NativeThemeWin()
close_theme_(NULL),
set_theme_properties_(NULL),
is_theme_active_(NULL),
- get_theme_int_(NULL) {
+ get_theme_int_(NULL),
+ ALLOW_THIS_IN_INITIALIZER_LIST(color_change_listener_(this)) {
if (theme_dll_) {
draw_theme_ = reinterpret_cast<DrawThemeBackgroundPtr>(
GetProcAddress(theme_dll_, "DrawThemeBackground"));
@@ -330,6 +329,9 @@ NativeThemeWin::NativeThemeWin()
GetProcAddress(theme_dll_, "GetThemeInt"));
}
memset(theme_handles_, 0, sizeof(theme_handles_));
+
+ // Initialize the cached system colors.
+ UpdateSystemColors();
}
NativeThemeWin::~NativeThemeWin() {
@@ -341,6 +343,17 @@ NativeThemeWin::~NativeThemeWin() {
}
}
+void NativeThemeWin::OnSysColorChange() {
+ UpdateSystemColors();
+}
+
+void NativeThemeWin::UpdateSystemColors() {
+ for (int i = 0; i < arraysize(kSystemColors); ++i) {
+ system_colors_[kSystemColors[i]] =
+ color_utils::GetSysSkColor(kSystemColors[i]);
+ }
+}
+
void NativeThemeWin::PaintDirect(SkCanvas* canvas,
Part part,
State state,
@@ -441,7 +454,7 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
case kColorId_DialogBackground:
// TODO(benrg): Should this use the new Windows theme functions? The old
// code in DialogClientView::OnPaint used GetSysColor(COLOR_3DFACE).
- return WinColorToSkColor(GetSysColor(COLOR_3DFACE));
+ return system_colors_[COLOR_3DFACE];
// FocusableBorder
case kColorId_FocusedBorderColor:
@@ -473,21 +486,25 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
// Label
case kColorId_LabelEnabledColor:
- return kLabelEnabledColor;
+ return system_colors_[COLOR_WINDOWTEXT];
case kColorId_LabelDisabledColor:
- return kLabelDisabledColor;
+ return system_colors_[COLOR_GRAYTEXT];
case kColorId_LabelBackgroundColor:
- return kLabelBackgroundColor;
+ return system_colors_[COLOR_WINDOW];
// Textfield
case kColorId_TextfieldDefaultColor:
- return kTextfieldDefaultColor;
+ return system_colors_[COLOR_WINDOWTEXT];
case kColorId_TextfieldDefaultBackground:
- return kTextfieldDefaultBackground;
+ return system_colors_[COLOR_WINDOW];
+ case kColorId_TextfieldReadOnlyColor:
+ return system_colors_[COLOR_GRAYTEXT];
+ case kColorId_TextfieldReadOnlyBackground:
+ return system_colors_[COLOR_3DFACE];
case kColorId_TextfieldSelectionColor:
- return kTextfieldSelectionColor;
+ return system_colors_[COLOR_HIGHLIGHTTEXT];
case kColorId_TextfieldSelectionBackgroundFocused:
- return kTextfieldSelectionBackgroundFocused;
+ return system_colors_[COLOR_HIGHLIGHT];
case kColorId_TextfieldSelectionBackgroundUnfocused:
return kTextfieldSelectionBackgroundUnfocused;
@@ -1143,10 +1160,8 @@ HRESULT NativeThemeWin::PaintScrollbarTrack(
return draw_theme_(handle, hdc, part_id, state_id, &rect_win, NULL);
// Draw it manually.
- const DWORD colorScrollbar = GetSysColor(COLOR_SCROLLBAR);
- const DWORD color3DFace = GetSysColor(COLOR_3DFACE);
- if ((colorScrollbar != color3DFace) &&
- (colorScrollbar != GetSysColor(COLOR_WINDOW))) {
+ if ((system_colors_[COLOR_SCROLLBAR] != system_colors_[COLOR_3DFACE]) &&
+ (system_colors_[COLOR_SCROLLBAR] != system_colors_[COLOR_WINDOW])) {
FillRect(hdc, &rect_win, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1));
} else {
SkPaint paint;

Powered by Google App Engine
This is Rietveld 408576698