1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

forward input to video window during video playback

This commit is contained in:
FunkyFr3sh 2023-10-16 03:35:09 +02:00
parent 94afdc378b
commit c328ae9550
6 changed files with 27 additions and 0 deletions

View File

@ -136,6 +136,7 @@ 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;

View File

@ -541,6 +541,7 @@ DWORD WINAPI d3d9_render_main(void)
if (g_config.fixchilds)
{
g_ddraw->child_window_exists = FALSE;
InterlockedExchangePointer(&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)

View File

@ -84,6 +84,7 @@ DWORD WINAPI gdi_render_main(void)
if (g_config.fixchilds)
{
g_ddraw->child_window_exists = FALSE;
InterlockedExchangePointer(&g_ddraw->video_window_hwnd, NULL);
EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary);
}

View File

@ -770,6 +770,7 @@ static void ogl_render()
if (g_config.fixchilds)
{
g_ddraw->child_window_exists = FALSE;
InterlockedExchangePointer(&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)

View File

@ -475,6 +475,8 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam)
strcmp(class_name, "AVIWnd32") == 0 ||
strcmp(class_name, "MCIWndClass") == 0)
{
InterlockedExchangePointer(&g_ddraw->video_window_hwnd, hwnd);
LONG style = real_GetWindowLongA(hwnd, GWL_EXSTYLE);
if (!(style & WS_EX_TRANSPARENT))

View File

@ -729,6 +729,13 @@ 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:
@ -736,6 +743,13 @@ 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 */
@ -824,6 +838,13 @@ 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: