diff options
Diffstat (limited to 'src/skel/glfw')
-rw-r--r-- | src/skel/glfw/glfw.cpp | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index 2813c823..13b41fcb 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -49,7 +49,13 @@ static RwInt32 GcurSel = 0, GcurSelVM = 0; static RwBool useDefault; +// What is that for anyway? +#ifndef IMPROVED_VIDEOMODE static RwBool defaultFullscreenRes = TRUE; +#else +static RwBool defaultFullscreenRes = FALSE; +static RwInt32 bestWndMode = -1; +#endif static psGlobalType PsGlobal; @@ -421,11 +427,7 @@ RwChar **_psGetVideoModeList() _VMList[i] = nil; } else -#ifdef IMPROVED_VIDEOMODE - _VMList[i] = strdup("WINDOW"); -#else _VMList[i] = nil; -#endif } return _VMList; @@ -440,7 +442,7 @@ void _psSelectScreenVM(RwInt32 videoMode) FrontEndMenuManager.UnloadTextures(); - if ( !_psSetVideoMode(RwEngineGetCurrentSubSystem(), videoMode) ) + if (!_psSetVideoMode(RwEngineGetCurrentSubSystem(), videoMode)) { RsGlobal.quit = TRUE; } @@ -607,18 +609,16 @@ psSelectDevice() } // Find the videomode that best fits what we got from the settings file - RwInt32 bestMode = -1; + RwInt32 bestFsMode = -1; RwInt32 bestWidth = -1; RwInt32 bestHeight = -1; RwInt32 bestDepth = -1; for(GcurSelVM = 0; GcurSelVM < RwEngineGetNumVideoModes(); GcurSelVM++){ RwEngineGetVideoModeInfo(&vm, GcurSelVM); - if(!(vm.flags & rwVIDEOMODEEXCLUSIVE) != FrontEndMenuManager.m_nPrefsWindowed) - continue; - if(FrontEndMenuManager.m_nPrefsWindowed){ - bestMode = GcurSelVM; - }else{ + if (!(vm.flags & rwVIDEOMODEEXCLUSIVE)){ + bestWndMode = GcurSelVM; + } else { // try the largest one that isn't larger than what we wanted if(vm.width >= bestWidth && vm.width <= FrontEndMenuManager.m_nPrefsWidth && vm.height >= bestHeight && vm.height <= FrontEndMenuManager.m_nPrefsHeight && @@ -626,32 +626,34 @@ psSelectDevice() bestWidth = vm.width; bestHeight = vm.height; bestDepth = vm.depth; - bestMode = GcurSelVM; + bestFsMode = GcurSelVM; } } } - if(bestMode < 0){ + if(bestFsMode < 0){ MessageBox(nil, "Cannot find desired video mode", "GTA3", MB_OK); return FALSE; } - GcurSelVM = bestMode; + GcurSelVM = bestFsMode; FrontEndMenuManager.m_nDisplayVideoMode = GcurSelVM; FrontEndMenuManager.m_nPrefsVideoMode = FrontEndMenuManager.m_nDisplayVideoMode; - GcurSelVM = FrontEndMenuManager.m_nDisplayVideoMode; + + FrontEndMenuManager.m_nSelectedScreenMode = FrontEndMenuManager.m_nPrefsWindowed; } #endif - + RwEngineGetVideoModeInfo(&vm, GcurSelVM); #ifdef IMPROVED_VIDEOMODE - if(vm.flags & rwVIDEOMODEEXCLUSIVE){ - FrontEndMenuManager.m_nPrefsWidth = vm.width; - FrontEndMenuManager.m_nPrefsHeight = vm.height; - FrontEndMenuManager.m_nPrefsDepth = vm.depth; - } - FrontEndMenuManager.m_nPrefsWindowed = !(vm.flags & rwVIDEOMODEEXCLUSIVE); + if (FrontEndMenuManager.m_nPrefsWindowed) + GcurSelVM = bestWndMode; + + // Now GcurSelVM is 0 but vm has sizes(and fullscreen flag) of the video mode we want, that's why we changed the rwVIDEOMODEEXCLUSIVE conditions below + FrontEndMenuManager.m_nPrefsWidth = vm.width; + FrontEndMenuManager.m_nPrefsHeight = vm.height; + FrontEndMenuManager.m_nPrefsDepth = vm.depth; #endif FrontEndMenuManager.m_nCurrOption = 0; @@ -677,6 +679,7 @@ psSelectDevice() } } */ +#ifndef IMPROVED_VIDEOMODE if (vm.flags & rwVIDEOMODEEXCLUSIVE) { RsGlobal.maximumWidth = vm.width; @@ -686,15 +689,13 @@ psSelectDevice() PSGLOBAL(fullScreen) = TRUE; } -#ifdef IMPROVED_VIDEOMODE - else{ +#else RsGlobal.maximumWidth = FrontEndMenuManager.m_nPrefsWidth; RsGlobal.maximumHeight = FrontEndMenuManager.m_nPrefsHeight; RsGlobal.width = FrontEndMenuManager.m_nPrefsWidth; RsGlobal.height = FrontEndMenuManager.m_nPrefsHeight; - PSGLOBAL(fullScreen) = FALSE; - } + PSGLOBAL(fullScreen) = !FrontEndMenuManager.m_nPrefsWindowed; #endif return TRUE; @@ -1023,6 +1024,8 @@ void resizeCB(GLFWwindow* window, int width, int height) { if (RwInitialised && height > 0 && width > 0) { RwRect r; + // TODO support resizing with mouse. Now enabling this makes weird things to trails and CameraSize messing with sizes + r.x = 0; r.y = 0; r.w = RsGlobal.maximumWidth; |