EnumDisplayModes* returns a static list of modes with all depths
(helps hexen2demo), ChangeDisplaySettings returns true all the time.
diff --git a/windows/user.c b/windows/user.c
index bf196dd..1f1c34b 100644
--- a/windows/user.c
+++ b/windows/user.c
@@ -326,15 +326,32 @@
if (devmode->dmFields & DM_PELSHEIGHT)
FIXME(system," height=%ld\n",devmode->dmPelsHeight);
FIXME(system," (Putting X in this mode beforehand might help)\n");
+ /* we don't, but the program ... does not need to know */
+ return DISP_CHANGE_SUCCESSFUL;
}
return DISP_CHANGE_SUCCESSFUL;
}
-
/***********************************************************************
* EnumDisplaySettingsA (USER32.592)
+ * FIXME: Currently uses static list of modes.
+ *
+ * RETURNS
+ * TRUE if nth setting exists found (described in the LPDEVMODE32A struct)
+ * FALSE if we do not have the nth setting
*/
-BOOL32 WINAPI EnumDisplaySettings32A(LPCSTR name,DWORD n,LPDEVMODE32A devmode) {
+BOOL32 WINAPI EnumDisplaySettings32A(
+ LPCSTR name, /* [in] huh? */
+ DWORD n, /* [in] nth entry in display settings list*/
+ LPDEVMODE32A devmode /* [out] devmode for that setting */
+) {
+#define NRMODES 5
+#define NRDEPTHS 4
+ struct {
+ int w,h;
+ } modes[NRMODES]={{512,384},{640,400},{640,480},{800,600},{1024,768}};
+ int depths[4] = {8,16,24,32};
+
TRACE(system,"(%s,%ld,%p)\n",name,n,devmode);
if (n==0) {
devmode->dmBitsPerPel = DefaultDepthOfScreen(screen);
@@ -342,6 +359,12 @@
devmode->dmPelsWidth = screenWidth;
return TRUE;
}
+ if ((n-1)<NRMODES*NRDEPTHS) {
+ devmode->dmBitsPerPel = depths[(n-1)/NRMODES];
+ devmode->dmPelsHeight = modes[(n-1)%NRMODES].h;
+ devmode->dmPelsWidth = modes[(n-1)%NRMODES].w;
+ return TRUE;
+ }
return FALSE;
}
@@ -349,14 +372,18 @@
* EnumDisplaySettingsW (USER32.593)
*/
BOOL32 WINAPI EnumDisplaySettings32W(LPCWSTR name,DWORD n,LPDEVMODE32W devmode) {
- TRACE(system,"(%s,%ld,%p)\n",debugstr_w(name),n,devmode);
- if (n==0) {
- devmode->dmBitsPerPel = DefaultDepthOfScreen(screen);
- devmode->dmPelsHeight = screenHeight;
- devmode->dmPelsWidth = screenWidth;
- return TRUE;
+ LPSTR nameA = HEAP_strdupWtoA(GetProcessHeap(),0,name);
+ DEVMODE32A devmodeA;
+ BOOL32 ret = EnumDisplaySettings32A(nameA,n,&devmodeA);
+
+ if (ret) {
+ devmode->dmBitsPerPel = devmodeA.dmBitsPerPel;
+ devmode->dmPelsHeight = devmodeA.dmPelsHeight;
+ devmode->dmPelsWidth = devmodeA.dmPelsWidth;
+ /* FIXME: convert rest too, if they are ever returned */
}
- return FALSE;
+ HeapFree(GetProcessHeap(),0,nameA);
+ return ret;
}
/***********************************************************************