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 resizable;
|
||||||
BOOL bnetActive;
|
BOOL bnetActive;
|
||||||
BOOL bnetWasFullscreen;
|
BOOL bnetWasFullscreen;
|
||||||
|
BOOL bnetWasUpscaled;
|
||||||
RECT bnetWinRect;
|
RECT bnetWinRect;
|
||||||
POINT bnetPos;
|
POINT bnetPos;
|
||||||
SpeedLimiter ticksLimiter;
|
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.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;
|
||||||
}
|
}
|
||||||
|
|
15
src/mouse.c
15
src/mouse.c
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue