mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
automatically switch between windowed/fullscreen with d3d9 renderer
This commit is contained in:
parent
57df372da1
commit
9a9e9feead
@ -37,6 +37,7 @@ extern BOOL ChildWindowExists;
|
||||
|
||||
BOOL detect_cutscene();
|
||||
void LimitGameTicks();
|
||||
void ToggleFullscreen();
|
||||
DWORD WINAPI render_main(void);
|
||||
DWORD WINAPI render_soft_main(void);
|
||||
BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam);
|
||||
@ -127,6 +128,7 @@ typedef struct IDirectDrawImpl
|
||||
BOOL accurateTimers;
|
||||
int bnetHack;
|
||||
BOOL bnetActive;
|
||||
BOOL bnetD3d9Fullscreen;
|
||||
BOOL hotPatch;
|
||||
SpeedLimiter ticksLimiter;
|
||||
SpeedLimiter flipLimiter;
|
||||
|
@ -916,7 +916,7 @@ HRESULT __stdcall ddraw_SetDisplayMode2(IDirectDrawImpl *This, DWORD width, DWOR
|
||||
|
||||
void ToggleFullscreen()
|
||||
{
|
||||
if (ddraw->bnetHack && ddraw->renderer == render_d3d9_main)
|
||||
if (ddraw->bnetHack && ddraw->bnetActive && ddraw->renderer == render_d3d9_main)
|
||||
return;
|
||||
|
||||
if (ddraw->windowed)
|
||||
|
46
src/mouse.c
46
src/mouse.c
@ -19,6 +19,7 @@
|
||||
#include "main.h"
|
||||
#include "surface.h"
|
||||
#include "hook.h"
|
||||
#include "render_d3d9.h"
|
||||
|
||||
int yAdjust = 0;
|
||||
|
||||
@ -428,6 +429,12 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
|
||||
{
|
||||
ddraw->bnetActive = FALSE;
|
||||
mouse_lock();
|
||||
|
||||
if (ddraw->windowed && ddraw->bnetD3d9Fullscreen && ddraw->renderer == render_d3d9_main)
|
||||
{
|
||||
ToggleFullscreen();
|
||||
ddraw->bnetD3d9Fullscreen = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -437,7 +444,28 @@ HWND WINAPI fake_CreateWindowExA(
|
||||
DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y,
|
||||
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,
|
||||
lpClassName,
|
||||
lpWindowName,
|
||||
@ -450,20 +478,4 @@ HWND WINAPI fake_CreateWindowExA(
|
||||
hMenu,
|
||||
hInstance,
|
||||
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;
|
||||
}
|
||||
|
@ -104,9 +104,6 @@ void Settings_Load()
|
||||
GetString("renderer", "opengl", tmp, sizeof(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
|
||||
{
|
||||
ddraw->renderer = render_soft_main;
|
||||
|
Loading…
x
Reference in New Issue
Block a user