diff --git a/src/dd.c b/src/dd.c index a7ee93e..e943488 100644 --- a/src/dd.c +++ b/src/dd.c @@ -804,11 +804,13 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl } else if (g_config.maintas) { - g_ddraw->render.viewport.width = g_ddraw->render.width; - g_ddraw->render.viewport.height = - (int)roundf(((float)g_ddraw->height / g_ddraw->width) * g_ddraw->render.viewport.width); + float dst_ar = (float)g_ddraw->height / g_ddraw->width; + float src_ar = (float)g_ddraw->render.height / g_ddraw->render.width; - if (g_ddraw->render.viewport.height > g_ddraw->render.height) + g_ddraw->render.viewport.width = g_ddraw->render.width; + g_ddraw->render.viewport.height = (int)roundf(dst_ar * g_ddraw->render.viewport.width); + + if (src_ar < dst_ar) { g_ddraw->render.viewport.width = (int)roundf(((float)g_ddraw->render.viewport.width / g_ddraw->render.viewport.height) * g_ddraw->render.height); diff --git a/src/utils.c b/src/utils.c index 2fbd72d..3f4e026 100644 --- a/src/utils.c +++ b/src/utils.c @@ -382,11 +382,11 @@ void util_toggle_maximize() dst_rc.top = 0; dst_rc.left = 0; dst_rc.right = w; - dst_rc.bottom = (LONG)roundf(((float)g_ddraw->height / g_ddraw->width) * w); + dst_rc.bottom = (LONG)(((float)g_ddraw->height / g_ddraw->width) * w); if (dst_rc.bottom > h) { - dst_rc.right = (LONG)roundf(((float)dst_rc.right / dst_rc.bottom) * h); + dst_rc.right = (LONG)(((float)dst_rc.right / dst_rc.bottom) * h); dst_rc.bottom = h; } diff --git a/src/wndproc.c b/src/wndproc.c index c0886c2..d6f5543 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -324,19 +324,19 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WMSZ_LEFT: case WMSZ_RIGHT: { - windowrc->bottom += (LONG)roundf(scaleH * clientrc.right - clientrc.bottom); + windowrc->bottom += (LONG)(scaleH * clientrc.right - clientrc.bottom); break; } case WMSZ_TOP: case WMSZ_BOTTOM: { - windowrc->right += (LONG)roundf(scaleW * clientrc.bottom - clientrc.right); + windowrc->right += (LONG)(scaleW * clientrc.bottom - clientrc.right); break; } case WMSZ_TOPRIGHT: case WMSZ_TOPLEFT: { - windowrc->top -= (LONG)roundf(scaleH * clientrc.right - clientrc.bottom); + windowrc->top -= (LONG)(scaleH * clientrc.right - clientrc.bottom); break; } }