tangled
alpha
login
or
join now
huwcampbell.com
/
reactos
0
fork
atom
Reactos
0
fork
atom
overview
issues
pulls
pipelines
[GDITOOLS] Improve ChangeScreenBpp utility function
Timo Kreuzer
2 months ago
ef60fb2e
d3aef68c
+34
-14
4 changed files
expand all
collapse all
unified
split
modules
rostests
apitests
gditools
gditools.c
gditools.h
win32u
ntgdi
NtGdiBitBlt.c
NtGdiLineTo.c
+26
-4
modules/rostests/apitests/gditools/gditools.c
reviewed
···
106
106
return pentry->pUser;
107
107
}
108
108
109
109
+
VOID
110
110
+
PrintAvailableDisplayModes(void)
111
111
+
{
112
112
+
DEVMODEW dm = { .dmSize = sizeof(dm) };
113
113
+
ULONG iMode = 0;
114
114
+
115
115
+
printf("Available display modes:\n");
116
116
+
while (EnumDisplaySettingsW(NULL, iMode++, &dm))
117
117
+
{
118
118
+
printf(" %ux%u @ %u bpp, freq: %u Hz\n",
119
119
+
dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency);
120
120
+
}
121
121
+
}
122
122
+
109
123
BOOL
110
124
ChangeScreenBpp(
111
125
_In_ ULONG cBitsPixel,
112
112
-
_Out_ PULONG pcOldBitsPixel)
126
126
+
_Out_ PDEVMODEW pdmOld)
113
127
{
114
128
DEVMODEW dm = { .dmSize = sizeof(dm) };
115
129
···
119
133
return FALSE;
120
134
}
121
135
122
122
-
*pcOldBitsPixel = dm.dmBitsPerPel;
136
136
+
printf("ChangeScreenBpp(%lu): Old display settings: %ux%u @ %u bpp\n",
137
137
+
cBitsPixel, dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel);
138
138
+
139
139
+
*pdmOld = dm;
123
140
124
141
if (dm.dmBitsPerPel != cBitsPixel)
125
142
{
126
143
dm.dmBitsPerPel = cBitsPixel;
127
127
-
if (ChangeDisplaySettingsExW(NULL, &dm, NULL, CDS_UPDATEREGISTRY | CDS_GLOBAL, NULL) != DISP_CHANGE_SUCCESSFUL)
144
144
+
if (ChangeDisplaySettingsW(&dm, 0) != DISP_CHANGE_SUCCESSFUL)
128
145
{
129
129
-
printf("Failed to change display settings to %lu bpp. Current bpp: %u\n", cBitsPixel, *pcOldBitsPixel);
146
146
+
printf("Failed to change display settings.\n");
147
147
+
PrintAvailableDisplayModes();
130
148
return FALSE;
131
149
}
132
150
}
151
151
+
152
152
+
EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &dm);
153
153
+
printf("ChangeScreenBpp(%lu): New display settings: %ux%u @ %u bpp\n",
154
154
+
cBitsPixel, dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel);
133
155
134
156
return TRUE;
135
157
}
+1
-1
modules/rostests/apitests/gditools/gditools.h
reviewed
···
44
44
BOOL
45
45
ChangeScreenBpp(
46
46
_In_ ULONG cBitsPixel,
47
47
-
_Out_ PULONG pcOldBitsPixel);
47
47
+
_Out_ PDEVMODEW pdmOld);
+3
-3
modules/rostests/apitests/win32u/ntgdi/NtGdiBitBlt.c
reviewed
···
355
355
{
356
356
ok(GdiToolsInit(), "GdiToolsInit failed\n");
357
357
358
358
-
ULONG cBitsPixel;
359
359
-
ChangeScreenBpp(32, &cBitsPixel);
358
358
+
DEVMODEW dmOld;
359
359
+
ChangeScreenBpp(32, &dmOld);
360
360
361
361
ghdcDDB1 = CreateCompatibleDC(NULL);
362
362
SelectObject(ghdcDDB1, ghbmp1);
···
371
371
gbUseCLR_INVALID = FALSE;
372
372
Test_NtGdiBitBlt_1BPP();
373
373
374
374
-
ChangeScreenBpp(cBitsPixel, &cBitsPixel);
374
374
+
ChangeDisplaySettingsW(&dmOld, 0);
375
375
}
+4
-6
modules/rostests/apitests/win32u/ntgdi/NtGdiLineTo.c
reviewed
···
10
10
11
11
#define DIBINDEX(n) MAKELONG((n),0x10FF)
12
12
13
13
-
static HDC ghdcDDB1, ghdcDDB32;
13
13
+
static HDC ghdcDDB1;
14
14
15
15
static
16
16
COLORREF
···
186
186
{
187
187
ok(GdiToolsInit(), "GdiToolsInit failed\n");
188
188
189
189
-
ULONG cBitsPixel;
190
190
-
ChangeScreenBpp(32, &cBitsPixel);
189
189
+
DEVMODEW dmOld;
190
190
+
ChangeScreenBpp(32, &dmOld);
191
191
192
192
ghdcDDB1 = CreateCompatibleDC(NULL);
193
193
ok(SelectObject(ghdcDDB1, ghbmp1) != NULL, "SelectObject failed\n");
194
194
-
ghdcDDB32 = CreateCompatibleDC(NULL);
195
195
-
ok(SelectObject(ghdcDDB32, ghbmp32) != NULL, "SelectObject failed\n");
196
194
197
195
Test_NtGdiLineTo_1BPP_BW(ghdcDDB1);
198
196
Test_NtGdiLineTo_1BPP_BW(ghdcDIB1);
199
197
Test_NtGdiLineTo_1BPP_BW(ghdcDIB1_InvCol);
200
198
Test_NtGdiLineTo_1BPP_RB();
201
199
202
202
-
ChangeScreenBpp(cBitsPixel, &cBitsPixel);
200
200
+
ChangeDisplaySettingsW(&dmOld, 0);
203
201
}