mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 02:27:40 -04:00
Merge pull request #62 from Deledrius/windowmodefix
Fix improperly calculated window size in initial Windowed mode.
This commit is contained in:
@ -751,7 +751,7 @@ hsBool plClient::MsgReceive(plMessage* msg)
|
||||
{
|
||||
ISetGraphicsDefaults();
|
||||
ResetDisplayDevice(plPipeline::fDefaultPipeParams.Width, plPipeline::fDefaultPipeParams.Height, plPipeline::fDefaultPipeParams.ColorDepth, plPipeline::fDefaultPipeParams.Windowed,
|
||||
plPipeline::fDefaultPipeParams.AntiAliasingAmount, plPipeline::fDefaultPipeParams.AnisotropicLevel, plPipeline::fDefaultPipeParams.VSync, true);
|
||||
plPipeline::fDefaultPipeParams.AntiAliasingAmount, plPipeline::fDefaultPipeParams.AnisotropicLevel, plPipeline::fDefaultPipeParams.VSync);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -2150,54 +2150,60 @@ hsG3DDeviceModeRecord plClient::ILoadDevMode(const char* devModeFile)
|
||||
return dmr;
|
||||
}
|
||||
|
||||
void plClient::ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync, hsBool windowOnly)
|
||||
void plClient::ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync)
|
||||
{
|
||||
if(!fPipeline) return;
|
||||
int BorderWidth = 0, BorderHeight = 0, CaptionHeight = 0;
|
||||
|
||||
WindowActivate(false);
|
||||
int ActualWidth;
|
||||
int ActualHeight;
|
||||
|
||||
if( Windowed )
|
||||
{
|
||||
BorderWidth = GetSystemMetrics( SM_CXSIZEFRAME );
|
||||
BorderHeight = GetSystemMetrics( SM_CYSIZEFRAME );
|
||||
CaptionHeight = GetSystemMetrics( SM_CYCAPTION );
|
||||
ActualWidth = Width + BorderWidth * 2;
|
||||
ActualHeight = Height + BorderHeight * 2 + CaptionHeight;
|
||||
SetWindowLong( fWindowHndl, GWL_STYLE,
|
||||
WS_POPUP | WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE);
|
||||
SetWindowLong(fWindowHndl, GWL_EXSTYLE, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowLong(fWindowHndl, GWL_STYLE,
|
||||
WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZE | WS_VISIBLE);
|
||||
ResizeDisplayDevice(Width, Height, Windowed);
|
||||
|
||||
SetWindowLong(fWindowHndl, GWL_EXSTYLE, WS_EX_APPWINDOW);
|
||||
}
|
||||
|
||||
if(!windowOnly)
|
||||
fPipeline->ResetDisplayDevice(Width, Height, ColorDepth, Windowed, NumAASamples, MaxAnisotropicSamples, VSync);
|
||||
|
||||
float aspectratio = (float)Width / (float)Height;
|
||||
plMouseDevice::Instance()->SetDisplayResolution((float)Width, (float)Height);
|
||||
pfGameGUIMgr::GetInstance()->SetAspectRatio( aspectratio );
|
||||
|
||||
UINT flags = SWP_NOCOPYBITS | SWP_NOMOVE | SWP_SHOWWINDOW;
|
||||
if(Windowed)
|
||||
{
|
||||
SetWindowPos( fWindowHndl, HWND_NOTOPMOST, 0, 0, ActualWidth, ActualHeight, flags );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPos( fWindowHndl, HWND_TOP, 0, 0, Width, Height, flags );
|
||||
}
|
||||
fPipeline->ResetDisplayDevice(Width, Height, ColorDepth, Windowed, NumAASamples, MaxAnisotropicSamples, VSync);
|
||||
|
||||
WindowActivate(true);
|
||||
}
|
||||
|
||||
void plClient::ResizeDisplayDevice(int Width, int Height, hsBool Windowed)
|
||||
{
|
||||
|
||||
if (plMouseDevice::Instance())
|
||||
plMouseDevice::Instance()->SetDisplayResolution((float)Width, (float)Height);
|
||||
|
||||
float aspectratio = (float)Width / (float)Height;
|
||||
if (pfGameGUIMgr::GetInstance())
|
||||
pfGameGUIMgr::GetInstance()->SetAspectRatio( aspectratio );
|
||||
|
||||
|
||||
UInt32 winStyle, winExStyle;
|
||||
if( Windowed )
|
||||
{
|
||||
winStyle = WS_OVERLAPPEDWINDOW;
|
||||
winExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||
} else {
|
||||
winStyle = WS_POPUP;
|
||||
winExStyle = WS_EX_APPWINDOW;
|
||||
}
|
||||
SetWindowLong(fWindowHndl, GWL_STYLE, winStyle);
|
||||
SetWindowLong(fWindowHndl, GWL_EXSTYLE, winExStyle);
|
||||
|
||||
|
||||
UInt32 flags = SWP_NOCOPYBITS | SWP_SHOWWINDOW | SWP_FRAMECHANGED;
|
||||
UInt32 OutsideWidth, OutsideHeight;
|
||||
HWND insertAfter;
|
||||
if( Windowed )
|
||||
{
|
||||
RECT winRect = { 0, 0, Width, Height };
|
||||
AdjustWindowRectEx(&winRect, winStyle, false, winExStyle);
|
||||
OutsideWidth = winRect.right - winRect.left;
|
||||
OutsideHeight = winRect.bottom - winRect.top;
|
||||
insertAfter = HWND_NOTOPMOST;
|
||||
} else {
|
||||
OutsideWidth = Width;
|
||||
OutsideHeight = Height;
|
||||
insertAfter = HWND_TOP;
|
||||
}
|
||||
SetWindowPos( fWindowHndl, insertAfter, 0, 0, OutsideWidth, OutsideHeight, flags );
|
||||
}
|
||||
|
||||
void WriteBool(hsStream *stream, char *name, hsBool on )
|
||||
{
|
||||
|
@ -276,7 +276,8 @@ public:
|
||||
virtual hsBool WindowActive() const { return fWindowActive; }
|
||||
|
||||
void SetMessagePumpProc( plMessagePumpProc proc ) { fMessagePumpProc = proc; }
|
||||
void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false, hsBool windowOnly = false);
|
||||
void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false);
|
||||
void ResizeDisplayDevice(int Width, int Height, hsBool Windowed);
|
||||
void IDetectAudioVideoSettings();
|
||||
void IWriteDefaultGraphicsSettings(const wchar* destFile);
|
||||
|
||||
|
@ -769,11 +769,6 @@ bool InitClient( HWND hWnd )
|
||||
|
||||
#ifdef DETACH_EXE
|
||||
hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
|
||||
#endif
|
||||
// If in fullscreen mode, get rid of the window borders. Note: this won't take
|
||||
// effect until the next SetWindowPos call
|
||||
|
||||
#ifdef DETACH_EXE
|
||||
|
||||
// This Function loads the EXE into Virtual memory...supposedly
|
||||
HRESULT hr = DetachFromMedium(hInstance, DMDFM_ALWAYS | DMDFM_ALLPAGES);
|
||||
@ -783,34 +778,7 @@ bool InitClient( HWND hWnd )
|
||||
gClient->SetDone(true);
|
||||
else
|
||||
{
|
||||
if( gClient->GetPipeline()->IsFullScreen() )
|
||||
{
|
||||
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);
|
||||
SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_TOPMOST);
|
||||
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
gWinBorderDX = gWinBorderDY = gWinMenuDY = 0;
|
||||
}
|
||||
else {
|
||||
SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPED | WS_CAPTION);
|
||||
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
|
||||
int goodWidth = gClient->GetPipeline()->Width() + gWinBorderDX * 2;
|
||||
int goodHeight = gClient->GetPipeline()->Height() + gWinBorderDY * 2 + gWinMenuDY;
|
||||
|
||||
SetWindowPos(
|
||||
hWnd,
|
||||
nil,
|
||||
0,
|
||||
0,
|
||||
goodWidth,
|
||||
goodHeight,
|
||||
SWP_NOCOPYBITS
|
||||
| SWP_NOMOVE
|
||||
| SWP_NOOWNERZORDER
|
||||
| SWP_NOZORDER
|
||||
| SWP_FRAMECHANGED
|
||||
);
|
||||
gClient->ResizeDisplayDevice(gClient->GetPipeline()->Width(), gClient->GetPipeline()->Height(), !gClient->GetPipeline()->IsFullScreen());
|
||||
}
|
||||
|
||||
if( gPendingActivate )
|
||||
|
@ -136,8 +136,7 @@ void ErrorMinimizeAppWindow () {
|
||||
// If the application's topmost window is a fullscreen
|
||||
// popup window, minimize it before displaying an error
|
||||
HWND appWindow = GetActiveWindow();
|
||||
if ( ((GetWindowLong(appWindow, GWL_STYLE) & WS_POPUP) != 0) &&
|
||||
((GetWindowLong(appWindow, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0) )
|
||||
if ( ((GetWindowLong(appWindow, GWL_STYLE) & WS_POPUP) != 0) )
|
||||
SetWindowPos(
|
||||
appWindow,
|
||||
HWND_NOTOPMOST,
|
||||
|
Reference in New Issue
Block a user