2 * Support for system colors
4 * Copyright David W. Metcalfe, 1993
5 * Copyright Alexandre Julliard, 1994
14 /* #define DEBUG_SYSCOLOR */
17 struct SysColorObjects sysColorObjects
;
19 static const char * const DefSysColors
[] =
21 "Scrollbar", "224 224 224", /* COLOR_SCROLLBAR */
22 "Background", "192 192 192", /* COLOR_BACKGROUND */
23 "ActiveTitle", "0 64 128", /* COLOR_ACTIVECAPTION */
24 "InactiveTitle", "255 255 255", /* COLOR_INACTIVECAPTION */
25 "Menu", "0 255 255", /* COLOR_MENU */
26 "Window", "255 255 255", /* COLOR_WINDOW */
27 "WindowFrame", "0 0 0", /* COLOR_WINDOWFRAME */
28 "MenuText", "0 0 0", /* COLOR_MENUTEXT */
29 "WindowText", "0 0 0", /* COLOR_WINDOWTEXT */
30 "TitleText", "255 255 255", /* COLOR_CAPTIONTEXT */
31 "ActiveBorder", "128 128 128", /* COLOR_ACTIVEBORDER */
32 "InactiveBorder", "255 255 255", /* COLOR_INACTIVEBORDER */
33 "AppWorkspace", "255 255 232", /* COLOR_APPWORKSPACE */
34 "Hilight", "166 202 240", /* COLOR_HIGHLIGHT */
35 "HilightText", "0 0 0", /* COLOR_HIGHLIGHTTEXT */
36 "ButtonFace", "192 192 192", /* COLOR_BTNFACE */
37 "ButtonShadow", "128 128 128", /* COLOR_BTNSHADOW */
38 "GrayText", "192 192 192", /* COLOR_GRAYTEXT */
39 "ButtonText", "0 0 0", /* COLOR_BTNTEXT */
40 "InactiveTitleText", "0 0 0", /* COLOR_INACTIVECAPTIONTEXT */
41 "ButtonHilight", "255 255 255" /* COLOR_BTNHIGHLIGHT */
44 #define NUM_SYS_COLORS (COLOR_BTNHIGHLIGHT+1)
46 static COLORREF SysColors
[NUM_SYS_COLORS
];
48 #define MAKE_SOLID(color) \
49 (PALETTEINDEX(GetNearestPaletteIndex32(STOCK_DEFAULT_PALETTE,(color))))
51 /*************************************************************************
54 static void SYSCOLOR_SetColor( int index
, COLORREF color
)
56 SysColors
[index
] = color
;
60 DeleteObject32( sysColorObjects
.hbrushScrollbar
);
61 sysColorObjects
.hbrushScrollbar
= CreateSolidBrush32( color
);
63 case COLOR_BACKGROUND
:
65 case COLOR_ACTIVECAPTION
:
66 DeleteObject32( sysColorObjects
.hbrushActiveCaption
);
67 sysColorObjects
.hbrushActiveCaption
= CreateSolidBrush32( color
);
69 case COLOR_INACTIVECAPTION
:
70 DeleteObject32( sysColorObjects
.hbrushInactiveCaption
);
71 sysColorObjects
.hbrushInactiveCaption
= CreateSolidBrush32( color
);
74 DeleteObject32( sysColorObjects
.hbrushMenu
);
75 sysColorObjects
.hbrushMenu
= CreateSolidBrush32( MAKE_SOLID(color
) );
78 DeleteObject32( sysColorObjects
.hbrushWindow
);
79 sysColorObjects
.hbrushWindow
= CreateSolidBrush32( color
);
81 case COLOR_WINDOWFRAME
:
82 DeleteObject32( sysColorObjects
.hpenWindowFrame
);
83 sysColorObjects
.hpenWindowFrame
= CreatePen32( PS_SOLID
, 1, color
);
87 case COLOR_WINDOWTEXT
:
88 DeleteObject32( sysColorObjects
.hpenWindowText
);
89 sysColorObjects
.hpenWindowText
= CreatePen32( PS_DOT
, 1, color
);
91 case COLOR_CAPTIONTEXT
:
93 case COLOR_ACTIVEBORDER
:
94 DeleteObject32( sysColorObjects
.hbrushActiveBorder
);
95 sysColorObjects
.hbrushActiveBorder
= CreateSolidBrush32( color
);
97 case COLOR_INACTIVEBORDER
:
98 DeleteObject32( sysColorObjects
.hbrushInactiveBorder
);
99 sysColorObjects
.hbrushInactiveBorder
= CreateSolidBrush32( color
);
101 case COLOR_APPWORKSPACE
:
103 case COLOR_HIGHLIGHT
:
104 DeleteObject32( sysColorObjects
.hbrushHighlight
);
105 sysColorObjects
.hbrushHighlight
= CreateSolidBrush32(MAKE_SOLID(color
));
107 case COLOR_HIGHLIGHTTEXT
:
110 DeleteObject32( sysColorObjects
.hbrushBtnFace
);
111 sysColorObjects
.hbrushBtnFace
= CreateSolidBrush32( color
);
113 case COLOR_BTNSHADOW
:
114 DeleteObject32( sysColorObjects
.hbrushBtnShadow
);
115 sysColorObjects
.hbrushBtnShadow
= CreateSolidBrush32( color
);
119 case COLOR_INACTIVECAPTIONTEXT
:
121 case COLOR_BTNHIGHLIGHT
:
122 DeleteObject32( sysColorObjects
.hbrushBtnHighlight
);
123 sysColorObjects
.hbrushBtnHighlight
= CreateSolidBrush32( color
);
129 /*************************************************************************
132 void SYSCOLOR_Init(void)
135 const char * const *p
;
138 for (i
= 0, p
= DefSysColors
; i
< NUM_SYS_COLORS
; i
++, p
+= 2)
140 GetProfileString32A( "colors", p
[0], p
[1], buffer
, 100 );
141 if (!sscanf( buffer
, " %d %d %d", &r
, &g
, &b
)) r
= g
= b
= 0;
142 SYSCOLOR_SetColor( i
, RGB(r
,g
,b
) );
147 /*************************************************************************
148 * GetSysColor16 (USER.180)
150 COLORREF
GetSysColor16( INT16 nIndex
)
152 return SysColors
[nIndex
];
156 /*************************************************************************
157 * GetSysColor32 (USER32.288)
159 COLORREF
GetSysColor32( INT32 nIndex
)
161 return SysColors
[nIndex
];
165 /*************************************************************************
166 * SetSysColors16 (USER.181)
168 VOID
SetSysColors16( INT16 nChanges
, const INT16
*lpSysColor
,
169 const COLORREF
*lpColorValues
)
173 for (i
= 0; i
< nChanges
; i
++)
175 SYSCOLOR_SetColor( lpSysColor
[i
], lpColorValues
[i
] );
178 /* Send WM_SYSCOLORCHANGE message to all windows */
180 SendMessage32A( HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0 );
182 /* Repaint affected portions of all visible windows */
184 RedrawWindow32( GetDesktopWindow32(), NULL
, 0,
185 RDW_INVALIDATE
| RDW_ERASE
| RDW_UPDATENOW
| RDW_ALLCHILDREN
);
189 /*************************************************************************
190 * SetSysColors32 (USER32.504)
192 BOOL32
SetSysColors32( INT32 nChanges
, const INT32
*lpSysColor
,
193 const COLORREF
*lpColorValues
)
197 for (i
= 0; i
< nChanges
; i
++)
199 SYSCOLOR_SetColor( lpSysColor
[i
], lpColorValues
[i
] );
202 /* Send WM_SYSCOLORCHANGE message to all windows */
204 SendMessage32A( HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0 );
206 /* Repaint affected portions of all visible windows */
208 RedrawWindow32( GetDesktopWindow32(), NULL
, 0,
209 RDW_INVALIDATE
| RDW_ERASE
| RDW_UPDATENOW
| RDW_ALLCHILDREN
);