diff --git a/src/dd.c b/src/dd.c index 6491f62..819a0fd 100644 --- a/src/dd.c +++ b/src/dd.c @@ -623,6 +623,9 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl } } + BOOL zooming = g_ddraw.zoom.enabled; + g_ddraw.zoom.enabled = FALSE; + g_ddraw.render.width = g_config.window_rect.right; g_ddraw.render.height = g_config.window_rect.bottom; @@ -665,15 +668,35 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl } } - - if (g_ddraw.render.width < g_ddraw.width) + else if (zooming) { - g_ddraw.render.width = g_ddraw.width; + if (g_ddraw.width > g_ddraw.mode.dmPelsWidth || + g_ddraw.height > g_ddraw.mode.dmPelsHeight) + { + /* Downscaling requires adjmouse to be enabled */ + g_config.adjmouse = TRUE; + } + + /* Do not change display resolution when zooming */ + g_ddraw.render.width = g_ddraw.render.mode.dmPelsWidth; + g_ddraw.render.height = g_ddraw.render.mode.dmPelsHeight; + + /* Resize and alt+enter are not supported yet with zooming */ + g_config.resizable = FALSE; + g_config.hotkeys.toggle_fullscreen = 0; } - if (g_ddraw.render.height < g_ddraw.height) + if (!zooming || g_config.fullscreen) { - g_ddraw.render.height = g_ddraw.height; + if (g_ddraw.render.width < g_ddraw.width) + { + g_ddraw.render.width = g_ddraw.width; + } + + if (g_ddraw.render.height < g_ddraw.height) + { + g_ddraw.render.height = g_ddraw.height; + } } g_ddraw.render.run = TRUE; @@ -1114,7 +1137,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl if (!d3d9_active || g_config.nonexclusive) { - if (ChangeDisplaySettings(&g_ddraw.render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) + if (!zooming && ChangeDisplaySettings(&g_ddraw.render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { g_ddraw.render.run = FALSE; g_config.windowed = TRUE;