From c656dfc39c5ac86d42d91e2aacaab114b8deaca0 Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Mon, 17 Oct 2005 08:55:27 +0000 Subject: [PATCH] Enumerate only requested modes by taking into account surface desc when present. --- dlls/ddraw/ddraw_user.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/dlls/ddraw/ddraw_user.c b/dlls/ddraw/ddraw_user.c index e1e18a9911b..3ec938d432c 100644 --- a/dlls/ddraw/ddraw_user.c +++ b/dlls/ddraw/ddraw_user.c @@ -290,6 +290,12 @@ User_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFlags, 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 @@ User_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFlags, 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 @@ User_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFlags, callback_sd.u4.ddpfPixelFormat.u4.dwBBitMask); if (callback(&callback_sd, context) == DDENUMRET_CANCEL) return DD_OK; - i++; } return DD_OK; -- 2.11.4.GIT