From 5595dbeff7d9ea01d60a4a196d0beeaf27e35b07 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 2 Oct 2022 20:55:20 +0200 Subject: [PATCH] tweak StretchBlt hook --- src/config.c | 2 +- src/winapi_hooks.c | 35 +++++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/config.c b/src/config.c index 53e150d..760efb6 100644 --- a/src/config.c +++ b/src/config.c @@ -1001,7 +1001,7 @@ static void cfg_create_ini() "nonexclusive=true\n" "maxgameticks=60\n" "adjmouse=true\n" - "fixchilds=1\n" + "fixchilds=2\n" "maintas=false\n" "boxing=false\n" "\n" diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index cb13502..60c9e40 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -559,18 +559,37 @@ BOOL WINAPI fake_StretchBlt( int hSrc, DWORD rop) { - if (g_ddraw && g_ddraw->primary && WindowFromDC(hdcDest) == g_ddraw->hwnd) + if (g_ddraw && WindowFromDC(hdcDest) == g_ddraw->hwnd) { - HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); - - if (primary_dc) + if (g_ddraw->primary) { - BOOL result = real_StretchBlt(primary_dc, xDest, yDest, wDest, hDest, hdcSrc, xSrc, ySrc, wSrc, hSrc, rop); + HDC primary_dc; + dds_GetDC(g_ddraw->primary, &primary_dc); - dds_ReleaseDC(g_ddraw->primary, primary_dc); + if (primary_dc) + { + BOOL result = + real_StretchBlt(primary_dc, xDest, yDest, wDest, hDest, hdcSrc, xSrc, ySrc, wSrc, hSrc, rop); - return result; + dds_ReleaseDC(g_ddraw->primary, primary_dc); + + return result; + } + } + else if (g_ddraw->width > 0) + { + return real_StretchBlt( + hdcDest, + xDest + g_ddraw->render.viewport.x, + yDest + g_ddraw->render.viewport.y, + wDest * g_ddraw->render.scale_w, + hDest * g_ddraw->render.scale_h, + hdcSrc, + xSrc, + ySrc, + wSrc, + hSrc, + rop); } }