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

automatically switch between windowed/fullscreen with d3d9 renderer

This commit is contained in:
FunkyFr3sh 2019-08-07 04:40:43 +02:00
parent 57df372da1
commit 9a9e9feead
4 changed files with 32 additions and 21 deletions

View File

@ -37,6 +37,7 @@ extern BOOL ChildWindowExists;
BOOL detect_cutscene(); BOOL detect_cutscene();
void LimitGameTicks(); void LimitGameTicks();
void ToggleFullscreen();
DWORD WINAPI render_main(void); DWORD WINAPI render_main(void);
DWORD WINAPI render_soft_main(void); DWORD WINAPI render_soft_main(void);
BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam); BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam);
@ -127,6 +128,7 @@ typedef struct IDirectDrawImpl
BOOL accurateTimers; BOOL accurateTimers;
int bnetHack; int bnetHack;
BOOL bnetActive; BOOL bnetActive;
BOOL bnetD3d9Fullscreen;
BOOL hotPatch; BOOL hotPatch;
SpeedLimiter ticksLimiter; SpeedLimiter ticksLimiter;
SpeedLimiter flipLimiter; SpeedLimiter flipLimiter;

View File

@ -916,7 +916,7 @@ HRESULT __stdcall ddraw_SetDisplayMode2(IDirectDrawImpl *This, DWORD width, DWOR
void ToggleFullscreen() void ToggleFullscreen()
{ {
if (ddraw->bnetHack && ddraw->renderer == render_d3d9_main) if (ddraw->bnetHack && ddraw->bnetActive && ddraw->renderer == render_d3d9_main)
return; return;
if (ddraw->windowed) if (ddraw->windowed)

View File

@ -19,6 +19,7 @@
#include "main.h" #include "main.h"
#include "surface.h" #include "surface.h"
#include "hook.h" #include "hook.h"
#include "render_d3d9.h"
int yAdjust = 0; int yAdjust = 0;
@ -428,6 +429,12 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
{ {
ddraw->bnetActive = FALSE; ddraw->bnetActive = FALSE;
mouse_lock(); mouse_lock();
if (ddraw->windowed && ddraw->bnetD3d9Fullscreen && ddraw->renderer == render_d3d9_main)
{
ToggleFullscreen();
ddraw->bnetD3d9Fullscreen = FALSE;
}
} }
return result; return result;
@ -437,7 +444,28 @@ HWND WINAPI fake_CreateWindowExA(
DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y,
int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
{ {
HWND hWnd = real_CreateWindowExA( if (lpClassName && _strcmpi(lpClassName, "SDlgDialog") == 0 && ddraw && ddraw->bnetHack)
{
if (!ddraw->bnetActive)
{
if (!ddraw->windowed && !ddraw->bnetD3d9Fullscreen && ddraw->renderer == render_d3d9_main)
{
ToggleFullscreen();
ddraw->bnetD3d9Fullscreen = TRUE;
}
ddraw->bnetActive = TRUE;
mouse_unlock();
}
POINT pt = { 0, 0 };
real_ClientToScreen(ddraw->hWnd, &pt);
X += pt.x;
Y += pt.y;
}
return real_CreateWindowExA(
dwExStyle, dwExStyle,
lpClassName, lpClassName,
lpWindowName, lpWindowName,
@ -450,20 +478,4 @@ HWND WINAPI fake_CreateWindowExA(
hMenu, hMenu,
hInstance, hInstance,
lpParam); lpParam);
if (_strcmpi(lpClassName, "SDlgDialog") == 0 && ddraw && ddraw->bnetHack)
{
if (!ddraw->bnetActive)
{
ddraw->bnetActive = TRUE;
mouse_unlock();
}
POINT pt = { 0, 0 };
real_ClientToScreen(ddraw->hWnd, &pt);
real_SetWindowPos(hWnd, 0, pt.x + X, pt.y + Y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
return hWnd;
} }

View File

@ -104,9 +104,6 @@ void Settings_Load()
GetString("renderer", "opengl", tmp, sizeof(tmp)); GetString("renderer", "opengl", tmp, sizeof(tmp));
printf("Using %s renderer\n", tmp); printf("Using %s renderer\n", tmp);
if (ddraw->bnetHack && tolower(tmp[0]) == 'd')
ddraw->windowed = TRUE;
if (tolower(tmp[0]) == 's' || tolower(tmp[0]) == 'g') //gdi if (tolower(tmp[0]) == 's' || tolower(tmp[0]) == 'g') //gdi
{ {
ddraw->renderer = render_soft_main; ddraw->renderer = render_soft_main;