From efb524ee4d3a63eda27541fbe0d48a7ee19fd02d Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 17 Aug 2024 14:23:29 +0200 Subject: [PATCH] add new optionm to fixchild= ini setting --- inc/dd.h | 2 +- src/config.c | 2 +- src/render_d3d9.c | 1 - src/render_gdi.c | 1 - src/render_ogl.c | 1 - src/utils.c | 5 +++-- src/wndproc.c | 21 --------------------- 7 files changed, 5 insertions(+), 28 deletions(-) diff --git a/inc/dd.h b/inc/dd.h index 116d661..750825d 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -32,6 +32,7 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute #define FIX_CHILDS_DETECT 1 #define FIX_CHILDS_DETECT_PAINT 2 #define FIX_CHILDS_DETECT_HIDE 3 +#define FIX_CHILDS_DETECT_HIDE_NOSCALE 4 #define RESLIST_NORMAL 0 #define RESLIST_MINI 1 @@ -150,7 +151,6 @@ typedef struct CNCDDRAW void* last_freed_palette; /* Dungeon Keeper hack */ void* last_freed_surface; /* Nox hack */ BOOL child_window_exists; - HWND video_window_hwnd; BOOL got_child_windows; DWORD last_set_window_pos_tick; /* WINE hack */ SPEEDLIMITER ticks_limiter; diff --git a/src/config.c b/src/config.c index 3c3caf9..85f9dac 100644 --- a/src/config.c +++ b/src/config.c @@ -291,7 +291,7 @@ static void cfg_create_ini() "; Note: Set this to 1 if the game is crashing on startup\n" "resolutions=0\n" "\n" - "; Child window handling, possible values: 0 = Disabled, 1 = Display top left, 2 = Display top left + repaint, 3 = Hide\n" + "; Child window handling, possible values: 0 = Disabled, 1 = Display top left, 2 = Display top left + repaint, 3 = Hide, 4 = Display top left + hide\n" "; Note: Disables upscaling if a child window was detected (to ensure the game is fully playable, may look weird though)\n" "fixchilds=2\n" "\n" diff --git a/src/render_d3d9.c b/src/render_d3d9.c index 4a0d22f..5c5bdeb 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -634,7 +634,6 @@ DWORD WINAPI d3d9_render_main(void) if (g_config.fixchilds) { g_ddraw.child_window_exists = FALSE; - InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, NULL); EnumChildWindows(g_ddraw.hwnd, util_enum_child_proc, (LPARAM)g_ddraw.primary); if (g_ddraw.render.width != g_ddraw.width || g_ddraw.render.height != g_ddraw.height) diff --git a/src/render_gdi.c b/src/render_gdi.c index 390fc56..f4e5746 100644 --- a/src/render_gdi.c +++ b/src/render_gdi.c @@ -85,7 +85,6 @@ DWORD WINAPI gdi_render_main(void) if (g_config.fixchilds) { g_ddraw.child_window_exists = FALSE; - InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, NULL); EnumChildWindows(g_ddraw.hwnd, util_enum_child_proc, (LPARAM)g_ddraw.primary); } diff --git a/src/render_ogl.c b/src/render_ogl.c index 2975428..6584f80 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -1034,7 +1034,6 @@ static void ogl_render() if (g_config.fixchilds) { g_ddraw.child_window_exists = FALSE; - InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, NULL); EnumChildWindows(g_ddraw.hwnd, util_enum_child_proc, (LPARAM)g_ddraw.primary); if (g_ddraw.render.width != g_ddraw.width || g_ddraw.render.height != g_ddraw.height) diff --git a/src/utils.c b/src/utils.c index cdd64ba..110e55a 100644 --- a/src/utils.c +++ b/src/utils.c @@ -861,6 +861,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) return TRUE; if (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE || + g_config.fixchilds == FIX_CHILDS_DETECT_HIDE_NOSCALE || strcmp(class_name, "msctls_statusbar32") == 0 || strcmp(class_name, "VideoRenderer") == 0 || strcmp(class_name, "MCIQTZ_Window") == 0 || @@ -869,9 +870,9 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) strcmp(class_name, "MCIWndClass") == 0 || strcmp(class_name, "AVI Window") == 0) { - if (g_config.fixchilds != FIX_CHILDS_DETECT_HIDE) + if (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE_NOSCALE) { - InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, hwnd); + g_ddraw.got_child_windows = g_ddraw.child_window_exists = TRUE; } if (!(exstyle & WS_EX_TRANSPARENT)) diff --git a/src/wndproc.c b/src/wndproc.c index 9fa4e4a..a12c2c5 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -830,13 +830,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } } - HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw.video_window_hwnd, 0); - if (video_hwnd) - { - //PostMessageA(video_hwnd, uMsg, wParam, lParam); - //return 0; - } - break; } case WM_KEYUP: @@ -847,13 +840,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (g_config.hotkeys.screenshot && wParam == g_config.hotkeys.screenshot) ss_take_screenshot(g_ddraw.primary); - HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw.video_window_hwnd, 0); - if (video_hwnd) - { - //PostMessageA(video_hwnd, uMsg, wParam, lParam); - //return 0; - } - break; } /* button up messages reactivate cursor lock */ @@ -945,13 +931,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam lParam = MAKELPARAM(x, y); - HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw.video_window_hwnd, 0); - if (video_hwnd) - { - //PostMessageA(video_hwnd, uMsg, wParam, lParam); - //return 0; - } - break; } case WM_PARENTNOTIFY: