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:
parent
57df372da1
commit
9a9e9feead
@ -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;
|
||||||
|
@ -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)
|
||||||
|
46
src/mouse.c
46
src/mouse.c
@ -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;
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user