[DDRAW] Display modes enumeration fix
Christian Costa
titan.costa at wanadoo.fr
Sat Oct 15 07:07:13 CDT 2005
Hi,
Changelog:
Enumerate only requested modes by taking into account surface desc when
presents.
Christian Costa titan.costa at wanadoo.fr
-------------- next part --------------
Index: dlls/ddraw/ddraw_user.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw_user.c,v
retrieving revision 1.2
diff -u -r1.2 ddraw_user.c
--- dlls/ddraw/ddraw_user.c 26 Jul 2005 20:10:51 -0000 1.2
+++ dlls/ddraw/ddraw_user.c 15 Oct 2005 10:50:27 -0000
@@ -290,6 +290,12 @@
TRACE("(%p)->(0x%08lx,%p,%p,%p)\n",iface,dwFlags,pDDSD,context,callback);
+ if (pDDSD && TRACE_ON(ddraw))
+ {
+ TRACE("Enumerate modes matching:\n");
+ DDRAW_dump_surface_desc(pDDSD);
+ }
+
ZeroMemory(&callback_sd, sizeof(callback_sd));
callback_sd.dwSize = sizeof(callback_sd);
@@ -301,12 +307,22 @@
callback_sd.u2.dwRefreshRate = 60.0;
- i = 0;
- while (EnumDisplaySettingsExW(NULL, i, &DevModeW, 0))
+ for (i = 0; EnumDisplaySettingsExW(NULL, i, &DevModeW, 0); i++)
{
+ if (pDDSD)
+ {
+ if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevModeW.dmPelsWidth))
+ continue;
+ if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevModeW.dmPelsHeight))
+ continue;
+ if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->u4.ddpfPixelFormat.dwFlags & DDPF_RGB) &&
+ (pDDSD->u4.ddpfPixelFormat.u1.dwRGBBitCount != DevModeW.dmBitsPerPel))
+ continue;
+ }
+
callback_sd.dwHeight = DevModeW.dmPelsHeight;
callback_sd.dwWidth = DevModeW.dmPelsWidth;
- if (DevModeW.dmFields&DM_DISPLAYFREQUENCY)
+ if (DevModeW.dmFields & DM_DISPLAYFREQUENCY)
{
callback_sd.u2.dwRefreshRate = DevModeW.dmDisplayFrequency;
}
@@ -331,7 +347,6 @@
callback_sd.u4.ddpfPixelFormat.u4.dwBBitMask);
if (callback(&callback_sd, context) == DDENUMRET_CANCEL)
return DD_OK;
- i++;
}
return DD_OK;
More information about the wine-patches
mailing list