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

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: Nix cursor color; adjust textfield functions; add read-only theme colors. 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 27a00a510c00e2a5355756b12b37a14e0d559b60..d59a86087978ca3e84d616b9a4c5b795b09ec585 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;
}
@@ -330,6 +328,8 @@ NativeThemeWin::NativeThemeWin()
GetProcAddress(theme_dll_, "GetThemeInt"));
}
memset(theme_handles_, 0, sizeof(theme_handles_));
+ // Initialize the cached system colors.
+ OnSysColorChange();
sky 2012/12/04 22:38:14 I don't like calling a virtual method from a const
msw 2012/12/05 02:09:56 Done.
}
NativeThemeWin::~NativeThemeWin() {
@@ -341,6 +341,12 @@ NativeThemeWin::~NativeThemeWin() {
}
}
+void NativeThemeWin::OnSysColorChange() {
+ for (int i = 0; i < arraysize(kSystemColors); ++i)
sky 2012/12/04 22:38:14 nit: use {} for the for loop.
msw 2012/12/05 02:09:56 Done.
+ system_colors_[kSystemColors[i]] =
+ color_utils::GetSysSkColor(kSystemColors[i]);
+}
+
void NativeThemeWin::PaintDirect(SkCanvas* canvas,
Part part,
State state,
@@ -441,7 +447,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 +479,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 +1153,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