2 * Support for system colors
4 * Copyright David W. Metcalfe, 1993
5 * Copyright Alexandre Julliard, 1994
15 /* #define DEBUG_SYSCOLOR */
18 struct SysColorObjects sysColorObjects
;
20 static const char * const DefSysColors
[] =
22 "Scrollbar", "224 224 224", /* COLOR_SCROLLBAR */
23 "Background", "192 192 192", /* COLOR_BACKGROUND */
24 "ActiveTitle", "0 64 128", /* COLOR_ACTIVECAPTION */
25 "InactiveTitle", "255 255 255", /* COLOR_INACTIVECAPTION */
26 "Menu", "255 255 255", /* COLOR_MENU */
27 "Window", "255 255 255", /* COLOR_WINDOW */
28 "WindowFrame", "0 0 0", /* COLOR_WINDOWFRAME */
29 "MenuText", "0 0 0", /* COLOR_MENUTEXT */
30 "WindowText", "0 0 0", /* COLOR_WINDOWTEXT */
31 "TitleText", "255 255 255", /* COLOR_CAPTIONTEXT */
32 "ActiveBorder", "128 128 128", /* COLOR_ACTIVEBORDER */
33 "InactiveBorder", "255 255 255", /* COLOR_INACTIVEBORDER */
34 "AppWorkspace", "255 255 232", /* COLOR_APPWORKSPACE */
35 "Hilight", "166 202 240", /* COLOR_HIGHLIGHT */
36 "HilightText", "0 0 0", /* COLOR_HIGHLIGHTTEXT */
37 "ButtonFace", "192 192 192", /* COLOR_BTNFACE */
38 "ButtonShadow", "128 128 128", /* COLOR_BTNSHADOW */
39 "GrayText", "192 192 192", /* COLOR_GRAYTEXT */
40 "ButtonText", "0 0 0", /* COLOR_BTNTEXT */
41 "InactiveTitleText", "0 0 0", /* COLOR_INACTIVECAPTIONTEXT */
42 "ButtonHilight", "255 255 255", /* COLOR_BTNHIGHLIGHT */
43 "3DDarkShadow", "32 32 32", /* COLOR_3DDKSHADOW */
44 "3DLight", "192 192 192", /* COLOR_3DLIGHT */
45 "InfoText", "0 0 0", /* COLOR_INFOTEXT */
46 "InfoBackground", "255 255 192" /* COLOR_INFOBK */
49 static const char * const DefSysColors95
[] =
51 "Scrollbar", "224 224 224", /* COLOR_SCROLLBAR */
52 "Background", "192 192 192", /* COLOR_BACKGROUND */
53 "ActiveTitle", "0 64 128", /* COLOR_ACTIVECAPTION */
54 "InactiveTitle", "255 255 255", /* COLOR_INACTIVECAPTION */
55 "Menu", "192 192 192", /* COLOR_MENU */
56 "Window", "255 255 255", /* COLOR_WINDOW */
57 "WindowFrame", "0 0 0", /* COLOR_WINDOWFRAME */
58 "MenuText", "0 0 0", /* COLOR_MENUTEXT */
59 "WindowText", "0 0 0", /* COLOR_WINDOWTEXT */
60 "TitleText", "255 255 255", /* COLOR_CAPTIONTEXT */
61 "ActiveBorder", "128 128 128", /* COLOR_ACTIVEBORDER */
62 "InactiveBorder", "255 255 255", /* COLOR_INACTIVEBORDER */
63 "AppWorkspace", "255 255 232", /* COLOR_APPWORKSPACE */
64 "Hilight", "166 202 240", /* COLOR_HIGHLIGHT */
65 "HilightText", "0 0 0", /* COLOR_HIGHLIGHTTEXT */
66 "ButtonFace", "192 192 192", /* COLOR_BTNFACE */
67 "ButtonShadow", "128 128 128", /* COLOR_BTNSHADOW */
68 "GrayText", "192 192 192", /* COLOR_GRAYTEXT */
69 "ButtonText", "0 0 0", /* COLOR_BTNTEXT */
70 "InactiveTitleText", "0 0 0", /* COLOR_INACTIVECAPTIONTEXT */
71 "ButtonHilight", "255 255 255", /* COLOR_BTNHIGHLIGHT */
72 "3DDarkShadow", "32 32 32", /* COLOR_3DDKSHADOW */
73 "3DLight", "192 192 192", /* COLOR_3DLIGHT */
74 "InfoText", "0 0 0", /* COLOR_INFOTEXT */
75 "InfoBackground", "255 255 192" /* COLOR_INFOBK */
79 #define NUM_SYS_COLORS (COLOR_INFOBK+1)
81 static COLORREF SysColors
[NUM_SYS_COLORS
];
83 #define MAKE_SOLID(color) \
84 (PALETTEINDEX(GetNearestPaletteIndex32(STOCK_DEFAULT_PALETTE,(color))))
86 /*************************************************************************
89 static void SYSCOLOR_SetColor( int index
, COLORREF color
)
91 if (index
< 0 || index
>= NUM_SYS_COLORS
) return;
92 SysColors
[index
] = color
;
96 DeleteObject32( sysColorObjects
.hbrushScrollbar
);
97 sysColorObjects
.hbrushScrollbar
= CreateSolidBrush32( color
);
99 case COLOR_BACKGROUND
:
100 DeleteObject32( sysColorObjects
.hbrushBackground
);
101 sysColorObjects
.hbrushBackground
= CreateSolidBrush32( color
);
103 case COLOR_ACTIVECAPTION
:
104 DeleteObject32( sysColorObjects
.hbrushActiveCaption
);
105 sysColorObjects
.hbrushActiveCaption
= CreateSolidBrush32( color
);
107 case COLOR_INACTIVECAPTION
:
108 DeleteObject32( sysColorObjects
.hbrushInactiveCaption
);
109 sysColorObjects
.hbrushInactiveCaption
= CreateSolidBrush32( color
);
112 DeleteObject32( sysColorObjects
.hbrushMenu
);
113 sysColorObjects
.hbrushMenu
= CreateSolidBrush32( MAKE_SOLID(color
) );
116 DeleteObject32( sysColorObjects
.hbrushWindow
);
117 sysColorObjects
.hbrushWindow
= CreateSolidBrush32( color
);
119 case COLOR_WINDOWFRAME
:
120 DeleteObject32( sysColorObjects
.hbrushWindowFrame
);
121 sysColorObjects
.hbrushWindowFrame
= CreateSolidBrush32( color
);
122 /* FIXME: we should not need this pen */
123 DeleteObject32( sysColorObjects
.hpenWindowFrame
);
124 sysColorObjects
.hpenWindowFrame
= CreatePen32( PS_SOLID
, 1, color
);
127 DeleteObject32( sysColorObjects
.hbrushMenuText
);
128 sysColorObjects
.hbrushMenuText
= CreateSolidBrush32( color
);
130 case COLOR_WINDOWTEXT
:
131 DeleteObject32( sysColorObjects
.hbrushWindowText
);
132 sysColorObjects
.hbrushWindowText
= CreateSolidBrush32( color
);
133 /* FIXME: we should not need this pen */
134 DeleteObject32( sysColorObjects
.hpenWindowText
);
135 sysColorObjects
.hpenWindowText
= CreatePen32( PS_DOT
, 1, color
);
137 case COLOR_CAPTIONTEXT
:
138 DeleteObject32( sysColorObjects
.hbrushCaptionText
);
139 sysColorObjects
.hbrushCaptionText
= CreateSolidBrush32( color
);
141 case COLOR_ACTIVEBORDER
:
142 DeleteObject32( sysColorObjects
.hbrushActiveBorder
);
143 sysColorObjects
.hbrushActiveBorder
= CreateSolidBrush32( color
);
145 case COLOR_INACTIVEBORDER
:
146 DeleteObject32( sysColorObjects
.hbrushInactiveBorder
);
147 sysColorObjects
.hbrushInactiveBorder
= CreateSolidBrush32( color
);
149 case COLOR_APPWORKSPACE
:
150 DeleteObject32( sysColorObjects
.hbrushAppWorkspace
);
151 sysColorObjects
.hbrushAppWorkspace
= CreateSolidBrush32( color
);
153 case COLOR_HIGHLIGHT
:
154 DeleteObject32( sysColorObjects
.hbrushHighlight
);
155 sysColorObjects
.hbrushHighlight
= CreateSolidBrush32( color
);
157 case COLOR_HIGHLIGHTTEXT
:
158 DeleteObject32( sysColorObjects
.hbrushHighlightText
);
159 sysColorObjects
.hbrushHighlightText
= CreateSolidBrush32( color
);
162 DeleteObject32( sysColorObjects
.hbrushBtnFace
);
163 sysColorObjects
.hbrushBtnFace
= CreateSolidBrush32( color
);
165 case COLOR_BTNSHADOW
:
166 DeleteObject32( sysColorObjects
.hbrushBtnShadow
);
167 sysColorObjects
.hbrushBtnShadow
= CreateSolidBrush32( color
);
170 DeleteObject32( sysColorObjects
.hbrushGrayText
);
171 sysColorObjects
.hbrushGrayText
= CreateSolidBrush32( color
);
173 DeleteObject32( sysColorObjects
.hbrushBtnText
);
174 sysColorObjects
.hbrushBtnText
= CreateSolidBrush32( color
);
176 case COLOR_INACTIVECAPTIONTEXT
:
177 DeleteObject32( sysColorObjects
.hbrushInactiveCaptionText
);
178 sysColorObjects
.hbrushInactiveCaptionText
= CreateSolidBrush32(color
);
180 case COLOR_BTNHIGHLIGHT
:
181 DeleteObject32( sysColorObjects
.hbrushBtnHighlight
);
182 sysColorObjects
.hbrushBtnHighlight
= CreateSolidBrush32( color
);
184 case COLOR_3DDKSHADOW
:
185 DeleteObject32( sysColorObjects
.hbrush3DDkShadow
);
186 sysColorObjects
.hbrush3DDkShadow
= CreateSolidBrush32( color
);
189 DeleteObject32( sysColorObjects
.hbrush3DLight
);
190 sysColorObjects
.hbrush3DLight
= CreateSolidBrush32( color
);
193 DeleteObject32( sysColorObjects
.hbrushInfoText
);
194 sysColorObjects
.hbrushInfoText
= CreateSolidBrush32( color
);
197 DeleteObject32( sysColorObjects
.hbrushInfoBk
);
198 sysColorObjects
.hbrushInfoBk
= CreateSolidBrush32( color
);
204 /*************************************************************************
207 void SYSCOLOR_Init(void)
210 const char * const *p
;
213 for (i
= 0, p
= TWEAK_Win95Look
? DefSysColors95
: DefSysColors
;
214 i
< NUM_SYS_COLORS
; i
++, p
+= 2)
216 GetProfileString32A( "colors", p
[0], p
[1], buffer
, 100 );
217 if (sscanf( buffer
, " %d %d %d", &r
, &g
, &b
) != 3) r
= g
= b
= 0;
218 SYSCOLOR_SetColor( i
, RGB(r
,g
,b
) );
223 /*************************************************************************
224 * GetSysColor16 (USER.180)
226 COLORREF WINAPI
GetSysColor16( INT16 nIndex
)
228 return GetSysColor32 (nIndex
);
232 /*************************************************************************
233 * GetSysColor32 (USER32.288)
235 COLORREF WINAPI
GetSysColor32( INT32 nIndex
)
237 if (nIndex
>= 0 && nIndex
< NUM_SYS_COLORS
)
238 return SysColors
[nIndex
];
244 /*************************************************************************
245 * SetSysColors16 (USER.181)
247 VOID WINAPI
SetSysColors16( INT16 nChanges
, const INT16
*lpSysColor
,
248 const COLORREF
*lpColorValues
)
252 for (i
= 0; i
< nChanges
; i
++)
254 SYSCOLOR_SetColor( lpSysColor
[i
], lpColorValues
[i
] );
257 /* Send WM_SYSCOLORCHANGE message to all windows */
259 SendMessage32A( HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0 );
261 /* Repaint affected portions of all visible windows */
263 RedrawWindow32( GetDesktopWindow32(), NULL
, 0,
264 RDW_INVALIDATE
| RDW_ERASE
| RDW_UPDATENOW
| RDW_ALLCHILDREN
);
268 /*************************************************************************
269 * SetSysColors32 (USER32.504)
271 BOOL32 WINAPI
SetSysColors32( INT32 nChanges
, const INT32
*lpSysColor
,
272 const COLORREF
*lpColorValues
)
276 for (i
= 0; i
< nChanges
; i
++)
278 SYSCOLOR_SetColor( lpSysColor
[i
], lpColorValues
[i
] );
281 /* Send WM_SYSCOLORCHANGE message to all windows */
283 SendMessage32A( HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0 );
285 /* Repaint affected portions of all visible windows */
287 RedrawWindow32( GetDesktopWindow32(), NULL
, 0,
288 RDW_INVALIDATE
| RDW_ERASE
| RDW_UPDATENOW
| RDW_ALLCHILDREN
);