From 0cf0533654f4089e6ab8b9776718f5a9c6605b96 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 22 May 2024 23:51:48 +0200 Subject: [PATCH] #313 Add partial support for American Girls Dress Designer (Fullscreen only, no upscaling) --- inc/utils.h | 1 + src/config.c | 4 ++++ src/dd.c | 17 ++++++++++++++--- src/utils.c | 8 ++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/inc/utils.h b/inc/utils.h index 253ec11..2263142 100644 --- a/inc/utils.h +++ b/inc/utils.h @@ -17,6 +17,7 @@ void util_toggle_maximize(); void util_toggle_fullscreen(); BOOL util_unadjust_window_rect(LPRECT prc, DWORD dwStyle, BOOL fMenu, DWORD dwExStyle); void util_set_window_rect(int x, int y, int width, int height, UINT flags); +BOOL CALLBACK util_enum_thread_wnd_proc(HWND hwnd, LPARAM lParam); BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lParam); BOOL util_detect_low_res_screen(); diff --git a/src/config.c b/src/config.c index 93c0c67..00f65c9 100644 --- a/src/config.c +++ b/src/config.c @@ -387,6 +387,10 @@ static void cfg_create_ini() "guard_lines=300\n" "minfps=-2\n" "\n" + "; American Girls Dress Designer\n" + "[Dress Designer]\n" + "fake_mode=640x480x32\n" + "\n" "; Age of Wonders 2\n" "[AoW2]\n" "resolutions=2\n" diff --git a/src/dd.c b/src/dd.c index a305890..599e8c4 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1166,12 +1166,23 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) { dbg_dump_scl_flags(dwFlags); - if (hwnd == NULL) + if (!hwnd) { - return DD_OK; + if (!g_ddraw.hwnd && g_config.fake_mode[0]) + { + EnumThreadWindows(GetCurrentThreadId(), (WNDENUMPROC)util_enum_thread_wnd_proc, 0); + hwnd = g_ddraw.hwnd; + + if (!hwnd) + return DD_OK; + } + else + { + return DD_OK; + } } - if (g_ddraw.hwnd == NULL) + if (!g_ddraw.hwnd) { g_ddraw.hwnd = hwnd; } diff --git a/src/utils.c b/src/utils.c index 0a87f08..6013650 100644 --- a/src/utils.c +++ b/src/utils.c @@ -551,6 +551,14 @@ void util_set_window_rect(int x, int y, int width, int height, UINT flags) } } +BOOL CALLBACK util_enum_thread_wnd_proc(HWND hwnd, LPARAM lParam) +{ + if (!g_ddraw.hwnd) + g_ddraw.hwnd = hwnd; + + return FALSE; +} + BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) { IDirectDrawSurfaceImpl* this = (IDirectDrawSurfaceImpl*)lparam;