2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Display Control Panel
4 * FILE: dll/cpl/desk/effappdlg.c
5 * PURPOSE: Effects appearance dialog
7 * PROGRAMMERS: Jan Roeloffzen (jroeloffzen[at]hotmail[dot]com)
8 * Ismael Ferreras Morezuelas (swyterzone+reactos@gmail.com)
13 /* Update all the controls with the current values for the selected screen element */
15 EffAppearanceDlgUpdateControls(HWND hwndDlg
, GLOBALS
*g
)
19 #define SAVE_CHECKBOX(__CONTROL_ID, __MEMBER) \
21 state = SendDlgItemMessageW(hwndDlg, __CONTROL_ID, BM_GETCHECK, 0, 0); \
22 g->SchemeAdv.Effects.__MEMBER = /* Do a XOR of both the conditions */ \
23 ((state == BST_CHECKED) != (__CONTROL_ID == IDC_EFFAPPEARANCE_KEYBOARDCUES)); \
26 #define SAVE_CHECKBOX_SCH(__CONTROL_ID, __MEMBER) \
28 state = SendDlgItemMessageW(hwndDlg, __CONTROL_ID, BM_GETCHECK, 0, 0); \
29 g->SchemeAdv.__MEMBER = (state == BST_CHECKED); \
32 #define RSET_COMBOBOX(__CONTROL_ID, __PARENT_MEMBER, __MEMBER) \
34 SendDlgItemMessageW(hwndDlg, __CONTROL_ID, CB_SETCURSEL, (WPARAM)g->SchemeAdv.Effects.__MEMBER, 0); \
35 EnableWindow(GetDlgItem(hwndDlg, __CONTROL_ID), g->SchemeAdv.Effects.__PARENT_MEMBER); \
38 /* Animated menu transitions section (checkbox + combo) */
39 SAVE_CHECKBOX(IDC_EFFAPPEARANCE_ANIMATION
, bMenuAnimation
);
40 RSET_COMBOBOX(IDC_EFFAPPEARANCE_ANIMATIONTYPE
, bMenuAnimation
, bMenuFade
);
42 /* Font antialiasing section (checkbox + combo) */
43 SAVE_CHECKBOX(IDC_EFFAPPEARANCE_SMOOTHING
, bFontSmoothing
);
44 RSET_COMBOBOX(IDC_EFFAPPEARANCE_SMOOTHINGTYPE
, bFontSmoothing
, uiFontSmoothingType
- 1);
46 /* Other checkboxes */
47 SAVE_CHECKBOX(IDC_EFFAPPEARANCE_SETDROPSHADOW
, bDropShadow
);
48 SAVE_CHECKBOX(IDC_EFFAPPEARANCE_DRAGFULLWINDOWS
, bDragFullWindows
);
49 SAVE_CHECKBOX(IDC_EFFAPPEARANCE_KEYBOARDCUES
, bKeyboardCues
);
50 SAVE_CHECKBOX_SCH(IDC_EFFAPPEARANCE_FLATMENUS
, bFlatMenus
);
55 g
->bSchemeChanged
= TRUE
;
59 EffAppearanceDlgSaveCurrentValues(HWND hwndDlg
, GLOBALS
*g
)
61 /* The settings get saved at the end of ApplyScheme() in theme.c,
62 * when clicking Apply in the main dialog. */
66 AddToCombobox(INT Combo
, HWND hwndDlg
, INT From
, INT To
)
71 for (iElement
= From
; iElement
<= To
; iElement
++)
73 LoadString(hApplet
, iElement
, (LPTSTR
)tstrText
, ARRAYSIZE(tstrText
));
74 SendDlgItemMessage(hwndDlg
, Combo
, CB_ADDSTRING
, 0, (LPARAM
)tstrText
);
78 /* Initialize the effects appearance dialog from the scheme populated in LoadCurrentScheme(), in theme.c */
80 EffAppearanceDlg_Init(HWND hwndDlg
, GLOBALS
*g
)
84 /* Copy the current theme values */
85 g
->SchemeAdv
= g
->Scheme
;
87 #define INIT_CHECKBOX(__CONTROL_ID, __MEMBER) \
89 state = /* Do a XOR of both the conditions */ \
90 ((g->SchemeAdv.Effects.__MEMBER) != (__CONTROL_ID == IDC_EFFAPPEARANCE_KEYBOARDCUES)) \
91 ? BST_CHECKED : BST_UNCHECKED; \
92 SendDlgItemMessageW(hwndDlg, __CONTROL_ID, BM_SETCHECK, state, 0); \
95 #define INIT_CHECKBOX_SCH(__CONTROL_ID, __MEMBER) \
97 state = /* Do a XOR of both the conditions */ \
98 ((g->SchemeAdv.__MEMBER) == TRUE) \
99 ? BST_CHECKED : BST_UNCHECKED; \
100 SendDlgItemMessageW(hwndDlg, __CONTROL_ID, BM_SETCHECK, state, 0); \
103 #define FILL_COMBOBOX(__CONTROL_ID, __FIRST_STR, __LAST_STR) \
104 AddToCombobox(__CONTROL_ID, hwndDlg, __FIRST_STR, __LAST_STR)
106 /* Animated menu transitions section (checkbox + combo) */
107 INIT_CHECKBOX(IDC_EFFAPPEARANCE_ANIMATION
, bMenuAnimation
);
108 FILL_COMBOBOX(IDC_EFFAPPEARANCE_ANIMATIONTYPE
, IDS_SLIDEEFFECT
,
111 /* Font antialiasing section (checkbox + combo) */
112 INIT_CHECKBOX(IDC_EFFAPPEARANCE_SMOOTHING
, bFontSmoothing
);
113 FILL_COMBOBOX(IDC_EFFAPPEARANCE_SMOOTHINGTYPE
, IDS_STANDARDEFFECT
,
114 IDS_CLEARTYPEEFFECT
);
116 /* Other checkboxes */
117 INIT_CHECKBOX(IDC_EFFAPPEARANCE_SETDROPSHADOW
, bDropShadow
);
118 INIT_CHECKBOX(IDC_EFFAPPEARANCE_DRAGFULLWINDOWS
, bDragFullWindows
);
119 INIT_CHECKBOX(IDC_EFFAPPEARANCE_KEYBOARDCUES
, bKeyboardCues
);
120 INIT_CHECKBOX_SCH(IDC_EFFAPPEARANCE_FLATMENUS
, bFlatMenus
);
125 /* Update the controls */
126 EffAppearanceDlgUpdateControls(hwndDlg
, g
);
130 EffAppearanceDlgProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
134 g
= (GLOBALS
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
139 g
= (GLOBALS
*)lParam
;
140 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)g
);
141 EffAppearanceDlg_Init(hwndDlg
, g
);
148 switch(LOWORD(wParam
))
151 EffAppearanceDlgSaveCurrentValues(hwndDlg
, g
);
152 EndDialog(hwndDlg
, IDOK
);
156 g
->SchemeAdv
= g
->Scheme
;
157 EndDialog(hwndDlg
, IDCANCEL
);
160 case IDC_EFFAPPEARANCE_ANIMATION
:
161 case IDC_EFFAPPEARANCE_SMOOTHING
:
162 case IDC_EFFAPPEARANCE_SETDROPSHADOW
:
163 case IDC_EFFAPPEARANCE_DRAGFULLWINDOWS
:
164 case IDC_EFFAPPEARANCE_KEYBOARDCUES
:
165 case IDC_EFFAPPEARANCE_FLATMENUS
:
166 if (HIWORD(wParam
) == BN_CLICKED
)
168 EffAppearanceDlgUpdateControls(hwndDlg
, g
);
172 case IDC_EFFAPPEARANCE_ANIMATIONTYPE
:
173 case IDC_EFFAPPEARANCE_SMOOTHINGTYPE
:
174 if (HIWORD(wParam
) == CBN_SELCHANGE
)
177 SendDlgItemMessageW(hwndDlg
, IDC_EFFAPPEARANCE_SMOOTHINGTYPE
,
180 g
->SchemeAdv
.Effects
.bMenuFade
=
181 SendDlgItemMessageW(hwndDlg
, IDC_EFFAPPEARANCE_ANIMATIONTYPE
,
183 g
->SchemeAdv
.Effects
.uiFontSmoothingType
= (Index
== CB_ERR
) ? 0 : (Index
+ 1);
185 EffAppearanceDlgUpdateControls(hwndDlg
, g
);