1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

#313 improve American Girls Dress Designer support and merge changes into master

This commit is contained in:
FunkyFr3sh 2024-05-28 22:23:47 +02:00
parent 37a04d7598
commit cf3d0c51ad
4 changed files with 33 additions and 16 deletions

View File

@ -394,6 +394,10 @@ static void cfg_create_ini()
"; American Girls Dress Designer\n" "; American Girls Dress Designer\n"
"[Dress Designer]\n" "[Dress Designer]\n"
"fake_mode=640x480x32\n" "fake_mode=640x480x32\n"
"border=false\n"
"posX=0\n"
"posY=0\n"
"nonexclusive=true\n"
"\n" "\n"
"; Age of Wonders 2\n" "; Age of Wonders 2\n"
"[AoW2]\n" "[AoW2]\n"

View File

@ -546,18 +546,15 @@ HRESULT dd_RestoreDisplayMode()
return DD_OK; return DD_OK;
} }
if (g_ddraw.renderer != gdi_render_main) EnterCriticalSection(&g_ddraw.cs);
{ g_ddraw.render.run = FALSE;
EnterCriticalSection(&g_ddraw.cs); ReleaseSemaphore(g_ddraw.render.sem, 1, NULL);
g_ddraw.render.run = FALSE; LeaveCriticalSection(&g_ddraw.cs);
ReleaseSemaphore(g_ddraw.render.sem, 1, NULL);
LeaveCriticalSection(&g_ddraw.cs);
if (g_ddraw.render.thread) if (g_ddraw.render.thread)
{ {
WaitForSingleObject(g_ddraw.render.thread, INFINITE); WaitForSingleObject(g_ddraw.render.thread, INFINITE);
g_ddraw.render.thread = NULL; g_ddraw.render.thread = NULL;
}
} }
if (!g_config.windowed) if (!g_config.windowed)

View File

@ -553,9 +553,12 @@ 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_thread_wnd_proc(HWND hwnd, LPARAM lParam)
{ {
RECT size = { 0 };
real_GetClientRect(hwnd, &size);
LONG sytle = real_GetWindowLongA(hwnd, GWL_STYLE); LONG sytle = real_GetWindowLongA(hwnd, GWL_STYLE);
if (!g_ddraw.hwnd && !(sytle & WS_DISABLED)) if (!g_ddraw.hwnd && !(sytle & WS_DISABLED) && size.right > 0 && size.bottom > 0)
g_ddraw.hwnd = hwnd; g_ddraw.hwnd = hwnd;
#ifdef _DEBUG #ifdef _DEBUG
@ -568,9 +571,6 @@ BOOL CALLBACK util_enum_thread_wnd_proc(HWND hwnd, LPARAM lParam)
RECT pos = { 0 }; RECT pos = { 0 };
real_GetWindowRect(hwnd, &pos); real_GetWindowRect(hwnd, &pos);
RECT size = { 0 };
real_GetClientRect(hwnd, &size);
LONG exsytle = real_GetWindowLongA(hwnd, GWL_EXSTYLE); LONG exsytle = real_GetWindowLongA(hwnd, GWL_EXSTYLE);
TRACE( TRACE(

View File

@ -11,6 +11,7 @@
#include "mouse.h" #include "mouse.h"
#include "wndproc.h" #include "wndproc.h"
#include "render_gdi.h" #include "render_gdi.h"
#include "render_d3d9.h"
#include "directinput.h" #include "directinput.h"
#include "ddsurface.h" #include "ddsurface.h"
#include "ddclipper.h" #include "ddclipper.h"
@ -1320,13 +1321,28 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
{ {
TRACE("DestroyWindow(hwnd=%p) - g_ddraw.hwnd=%p\n", hWnd, g_ddraw.hwnd); TRACE("DestroyWindow(hwnd=%p) - g_ddraw.hwnd=%p\n", hWnd, g_ddraw.hwnd);
if (g_ddraw.ref && hWnd && hWnd == g_ddraw.hwnd)
{
dd_RestoreDisplayMode();
if (g_ddraw.renderer == d3d9_render_main)
{
d3d9_release();
}
}
BOOL result = real_DestroyWindow(hWnd); BOOL result = real_DestroyWindow(hWnd);
if (result && g_ddraw.ref && hWnd == g_ddraw.hwnd) if (result && g_ddraw.ref && hWnd && hWnd == g_ddraw.hwnd)
{ {
g_ddraw.hwnd = NULL; g_ddraw.hwnd = NULL;
g_ddraw.wndproc = NULL; g_ddraw.wndproc = NULL;
g_ddraw.render.hdc = NULL; g_ddraw.render.hdc = NULL;
if (g_config.fake_mode[0])
{
dd_SetCooperativeLevel(NULL, DDSCL_NORMAL);
}
} }
if (g_ddraw.ref && g_ddraw.hwnd != hWnd && g_ddraw.bnet_active) if (g_ddraw.ref && g_ddraw.hwnd != hWnd && g_ddraw.bnet_active)