always run bnet in windowed mode
This commit is contained in:
parent
45b71311b8
commit
1198cb0e93
3 changed files with 37 additions and 27 deletions
|
@ -132,6 +132,7 @@ typedef struct IDirectDrawImpl
|
|||
BOOL resizable;
|
||||
BOOL bnetActive;
|
||||
BOOL bnetWasFullscreen;
|
||||
BOOL bnetWasUpscaled;
|
||||
RECT bnetWinRect;
|
||||
POINT bnetPos;
|
||||
SpeedLimiter ticksLimiter;
|
||||
|
|
16
src/main.c
16
src/main.c
|
@ -700,6 +700,8 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
|
|||
ddraw->cursor.x = width / 2;
|
||||
ddraw->cursor.y = height / 2;
|
||||
|
||||
BOOL border = This->border;
|
||||
|
||||
if(This->fullscreen)
|
||||
{
|
||||
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
|
||||
{
|
||||
This->border = FALSE;
|
||||
border = FALSE;
|
||||
WindowRect.left = -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
|
||||
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));
|
||||
}
|
||||
|
@ -1129,13 +1131,21 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
if (!ddraw->windowed)
|
||||
ddraw->bnetWasFullscreen = FALSE;
|
||||
|
||||
if (!ddraw->bnetActive && ddraw->bnetWasFullscreen)
|
||||
if (!ddraw->bnetActive)
|
||||
{
|
||||
if (ddraw->bnetWasFullscreen)
|
||||
{
|
||||
int ws = WindowState;
|
||||
ToggleFullscreen();
|
||||
WindowState = ws;
|
||||
ddraw->bnetWasFullscreen = FALSE;
|
||||
}
|
||||
else if (ddraw->bnetWasUpscaled)
|
||||
{
|
||||
SetWindowRect(0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
ddraw->bnetWasUpscaled = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
15
src/mouse.c
15
src/mouse.c
|
@ -436,12 +436,12 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
|
|||
mouse_lock();
|
||||
|
||||
if (ddraw->windowed)
|
||||
{
|
||||
if (!ddraw->fullscreen)
|
||||
{
|
||||
ddraw->bnetPos.x = ddraw->bnetPos.y = 0;
|
||||
real_ClientToScreen(ddraw->hWnd, &ddraw->bnetPos);
|
||||
|
||||
if (!ddraw->bnetWasUpscaled)
|
||||
{
|
||||
int width = ddraw->bnetWinRect.right - ddraw->bnetWinRect.left;
|
||||
int height = ddraw->bnetWinRect.bottom - ddraw->bnetWinRect.top;
|
||||
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);
|
||||
}
|
||||
|
||||
if (ddraw->bnetWasFullscreen)
|
||||
{
|
||||
ddraw->fullscreen = ddraw->bnetWasUpscaled;
|
||||
|
||||
SetTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL);
|
||||
}
|
||||
|
||||
ddraw->resizable = TRUE;
|
||||
}
|
||||
|
@ -470,6 +469,9 @@ HWND WINAPI fake_CreateWindowExA(
|
|||
{
|
||||
if (!ddraw->bnetActive)
|
||||
{
|
||||
ddraw->bnetWasUpscaled = ddraw->fullscreen;
|
||||
ddraw->fullscreen = FALSE;
|
||||
|
||||
if (!ddraw->windowed && !ddraw->bnetWasFullscreen)
|
||||
{
|
||||
int ws = WindowState;
|
||||
|
@ -478,8 +480,6 @@ HWND WINAPI fake_CreateWindowExA(
|
|||
ddraw->bnetWasFullscreen = TRUE;
|
||||
}
|
||||
|
||||
if (!ddraw->fullscreen)
|
||||
{
|
||||
real_GetClientRect(ddraw->hWnd, &ddraw->bnetWinRect);
|
||||
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);
|
||||
ddraw->resizable = FALSE;
|
||||
}
|
||||
|
||||
ddraw->bnetActive = TRUE;
|
||||
mouse_unlock();
|
||||
|
|
Loading…
Reference in a new issue