always run bnet in windowed mode

This commit is contained in:
FunkyFr3sh 2019-08-19 17:02:36 +02:00
parent 45b71311b8
commit 1198cb0e93
3 changed files with 37 additions and 27 deletions

View file

@ -132,6 +132,7 @@ typedef struct IDirectDrawImpl
BOOL resizable; BOOL resizable;
BOOL bnetActive; BOOL bnetActive;
BOOL bnetWasFullscreen; BOOL bnetWasFullscreen;
BOOL bnetWasUpscaled;
RECT bnetWinRect; RECT bnetWinRect;
POINT bnetPos; POINT bnetPos;
SpeedLimiter ticksLimiter; SpeedLimiter ticksLimiter;

View file

@ -700,6 +700,8 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
ddraw->cursor.x = width / 2; ddraw->cursor.x = width / 2;
ddraw->cursor.y = height / 2; ddraw->cursor.y = height / 2;
BOOL border = This->border;
if(This->fullscreen) if(This->fullscreen)
{ {
This->render.width = This->mode.dmPelsWidth; This->render.width = This->mode.dmPelsWidth;
@ -707,7 +709,7 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
if (This->windowed) //windowed-fullscreen aka borderless if (This->windowed) //windowed-fullscreen aka borderless
{ {
This->border = FALSE; border = FALSE;
WindowRect.left = -32000; WindowRect.left = -32000;
WindowRect.top = -32000; WindowRect.top = -32000;
@ -885,7 +887,7 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
MSG msg; // workaround for "Not Responding" window problem in cnc games MSG msg; // workaround for "Not Responding" window problem in cnc games
PeekMessage(&msg, ddraw->hWnd, 0, 0, PM_NOREMOVE); PeekMessage(&msg, ddraw->hWnd, 0, 0, PM_NOREMOVE);
if (!This->border) if (!border)
{ {
real_SetWindowLongA(This->hWnd, GWL_STYLE, GetWindowLong(This->hWnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)); real_SetWindowLongA(This->hWnd, GWL_STYLE, GetWindowLong(This->hWnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU));
} }
@ -1129,13 +1131,21 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (!ddraw->windowed) if (!ddraw->windowed)
ddraw->bnetWasFullscreen = FALSE; ddraw->bnetWasFullscreen = FALSE;
if (!ddraw->bnetActive && ddraw->bnetWasFullscreen) if (!ddraw->bnetActive)
{
if (ddraw->bnetWasFullscreen)
{ {
int ws = WindowState; int ws = WindowState;
ToggleFullscreen(); ToggleFullscreen();
WindowState = ws; WindowState = ws;
ddraw->bnetWasFullscreen = FALSE; ddraw->bnetWasFullscreen = FALSE;
} }
else if (ddraw->bnetWasUpscaled)
{
SetWindowRect(0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
ddraw->bnetWasUpscaled = FALSE;
}
}
return 0; return 0;
} }

View file

@ -436,12 +436,12 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
mouse_lock(); mouse_lock();
if (ddraw->windowed) if (ddraw->windowed)
{
if (!ddraw->fullscreen)
{ {
ddraw->bnetPos.x = ddraw->bnetPos.y = 0; ddraw->bnetPos.x = ddraw->bnetPos.y = 0;
real_ClientToScreen(ddraw->hWnd, &ddraw->bnetPos); real_ClientToScreen(ddraw->hWnd, &ddraw->bnetPos);
if (!ddraw->bnetWasUpscaled)
{
int width = ddraw->bnetWinRect.right - ddraw->bnetWinRect.left; int width = ddraw->bnetWinRect.right - ddraw->bnetWinRect.left;
int height = ddraw->bnetWinRect.bottom - ddraw->bnetWinRect.top; int height = ddraw->bnetWinRect.bottom - ddraw->bnetWinRect.top;
UINT flags = width != ddraw->width || height != ddraw->height ? 0 : SWP_NOMOVE; UINT flags = width != ddraw->width || height != ddraw->height ? 0 : SWP_NOMOVE;
@ -449,10 +449,9 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
SetWindowRect(ddraw->bnetWinRect.left, ddraw->bnetWinRect.top, width, height, flags); SetWindowRect(ddraw->bnetWinRect.left, ddraw->bnetWinRect.top, width, height, flags);
} }
if (ddraw->bnetWasFullscreen) ddraw->fullscreen = ddraw->bnetWasUpscaled;
{
SetTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL); SetTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL);
}
ddraw->resizable = TRUE; ddraw->resizable = TRUE;
} }
@ -470,6 +469,9 @@ HWND WINAPI fake_CreateWindowExA(
{ {
if (!ddraw->bnetActive) if (!ddraw->bnetActive)
{ {
ddraw->bnetWasUpscaled = ddraw->fullscreen;
ddraw->fullscreen = FALSE;
if (!ddraw->windowed && !ddraw->bnetWasFullscreen) if (!ddraw->windowed && !ddraw->bnetWasFullscreen)
{ {
int ws = WindowState; int ws = WindowState;
@ -478,8 +480,6 @@ HWND WINAPI fake_CreateWindowExA(
ddraw->bnetWasFullscreen = TRUE; ddraw->bnetWasFullscreen = TRUE;
} }
if (!ddraw->fullscreen)
{
real_GetClientRect(ddraw->hWnd, &ddraw->bnetWinRect); real_GetClientRect(ddraw->hWnd, &ddraw->bnetWinRect);
MapWindowPoints(ddraw->hWnd, HWND_DESKTOP, (LPPOINT)&ddraw->bnetWinRect, 2); MapWindowPoints(ddraw->hWnd, HWND_DESKTOP, (LPPOINT)&ddraw->bnetWinRect, 2);
@ -491,7 +491,6 @@ HWND WINAPI fake_CreateWindowExA(
SetWindowRect(x, y, ddraw->width, ddraw->height, flags); SetWindowRect(x, y, ddraw->width, ddraw->height, flags);
ddraw->resizable = FALSE; ddraw->resizable = FALSE;
}
ddraw->bnetActive = TRUE; ddraw->bnetActive = TRUE;
mouse_unlock(); mouse_unlock();