From 998baf9f0fe4723b0171f03626687ef1e541a344 Mon Sep 17 00:00:00 2001 From: Nigel Liang Date: Wed, 22 Aug 2007 19:48:11 -0700 Subject: [PATCH] winecfg: Suport color schemes from .theme format themes. --- programs/winecfg/theme.c | 147 +++++++++++++++++++++++++++++---------- 1 file changed, 110 insertions(+), 37 deletions(-) diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c index 5797c9624d..ca67914da7 100644 --- a/programs/winecfg/theme.c +++ b/programs/winecfg/theme.c @@ -496,9 +496,111 @@ static void apply_theme(HWND dialog) theme_dirty = FALSE; } +static struct +{ + int sm_idx, color_idx; + const char *color_reg; + int size; + COLORREF color; + LOGFONTW lf; +} metrics[] = +{ + {-1, COLOR_BTNFACE, "ButtonFace" }, /* IDC_SYSPARAMS_BUTTON */ + {-1, COLOR_BTNTEXT, "ButtonText" }, /* IDC_SYSPARAMS_BUTTON_TEXT */ + {-1, COLOR_BACKGROUND, "Background" }, /* IDC_SYSPARAMS_DESKTOP */ + {SM_CXMENUSIZE, COLOR_MENU, "Menu" }, /* IDC_SYSPARAMS_MENU */ + {-1, COLOR_MENUTEXT, "MenuText" }, /* IDC_SYSPARAMS_MENU_TEXT */ + {SM_CXVSCROLL, COLOR_SCROLLBAR, "Scrollbar" }, /* IDC_SYSPARAMS_SCROLLBAR */ + {-1, COLOR_HIGHLIGHT, "Hilight" }, /* IDC_SYSPARAMS_SELECTION */ + {-1, COLOR_HIGHLIGHTTEXT, "HilightText" }, /* IDC_SYSPARAMS_SELECTION_TEXT */ + {-1, COLOR_INFOBK, "InfoWindow" }, /* IDC_SYSPARAMS_TOOLTIP */ + {-1, COLOR_INFOTEXT, "InfoText" }, /* IDC_SYSPARAMS_TOOLTIP_TEXT */ + {-1, COLOR_WINDOW, "Window" }, /* IDC_SYSPARAMS_WINDOW */ + {-1, COLOR_WINDOWTEXT, "WindowText" }, /* IDC_SYSPARAMS_WINDOW_TEXT */ + {SM_CXSIZE, COLOR_ACTIVECAPTION, "ActiveTitle" }, /* IDC_SYSPARAMS_ACTIVE_TITLE */ + {-1, COLOR_CAPTIONTEXT, "TitleText" }, /* IDC_SYSPARAMS_ACTIVE_TITLE_TEXT */ + {-1, COLOR_INACTIVECAPTION, "InactiveTitle" }, /* IDC_SYSPARAMS_INACTIVE_TITLE */ + {-1, COLOR_INACTIVECAPTIONTEXT,"InactiveTitleText" }, /* IDC_SYSPARAMS_INACTIVE_TITLE_TEXT */ + {-1, -1, "MsgBoxText" }, /* IDC_SYSPARAMS_MSGBOX_TEXT */ +}; + +static void save_sys_color(int idx, COLORREF clr) +{ + char buffer[13]; + + sprintf(buffer, "%d %d %d", GetRValue (clr), GetGValue (clr), GetBValue (clr)); + set_reg_key(HKEY_CURRENT_USER, "Control Panel\\Colors", metrics[idx].color_reg, buffer); +} + +static void set_color_from_theme(WCHAR *keyName, COLORREF color) +{ + char *keyNameA = NULL; + int keyNameSize=0, i=0; + + keyNameSize = WideCharToMultiByte(CP_ACP, 0, keyName, -1, keyNameA, 0, NULL, NULL); + keyNameA = HeapAlloc(GetProcessHeap(), 0, keyNameSize); + WideCharToMultiByte(CP_ACP, 0, keyName, -1, keyNameA, -1, NULL, NULL); + + for (i=0; i