// Called when the menu loses focus void CMenuDisplay::OnFocus(DBOOL bFocus) { HCONSOLEVAR hVar; int curMO, oldMO; DBOOL bSet; // Set the render mode if we are losing focus if (!bFocus && m_pRendererCtrl && m_pResolutionCtrl) { hVar = m_pClientDE->GetConsoleVar("MipmapOffset"); oldMO = (int)m_pClientDE->GetVarValueFloat (hVar); UpdateData(); // Save the global detail setting SaveDetailSetting(); bSet = SetRenderer(m_pRendererCtrl->GetSelIndex(), m_pResolutionCtrl->GetSelIndex()); // If we didn't switch resolutions and the mipmap offset changed, rebind textures. if(!bSet) { hVar = m_pClientDE->GetConsoleVar("MipmapOffset"); curMO = (int)m_pClientDE->GetVarValueFloat (hVar); if(curMO != oldMO) { m_pClientDE->RunConsoleString("RebindTextures"); } } } else { // The current render mode RMode currentMode; m_pClientDE->GetRenderMode(¤tMode); // Set the renderer controls so that they match the currently selected renderer unsigned int n; for (n=0; n < m_rendererArray.GetSize(); n++) { unsigned int i; for (i=0; i < m_rendererArray[n].m_resolutionArray.GetSize(); i++) { RMode mode=GetRendererModeStruct(n, i); if (IsRendererEqual(¤tMode, &mode)) { // Set the renderer index m_pRendererCtrl->SetSelIndex(n); // Setup the resolution control SetupResolutionCtrl(); // Set the resolution index m_pResolutionCtrl->SetSelIndex(i); } } } } }
// Sets the renderer DBOOL CMenuDisplay::SetRenderer(int nRendererIndex, int nResolutionIndex) { // Get the new renderer structure RMode newMode=GetRendererModeStruct(nRendererIndex, nResolutionIndex); // If the current renderer is the same as the one we are changing to, then don't set the renderer! RMode currentMode; if (m_pClientDE->GetRenderMode(¤tMode) == LT_OK) { if (IsRendererEqual(&newMode, ¤tMode)) { return DFALSE; } } // Set the renderer mode m_pClientDE->SetRenderMode(&newMode); // Set the menu resolution size if (newMode.m_Width < 512 || newMode.m_Height < 384) { m_pMainMenus->SetLowResolution(DTRUE); } else { m_pMainMenus->SetLowResolution(DFALSE); } // Write the renderer information to the autoexec.cfg file char szTemp[256]; sprintf(szTemp, "++RenderDll %s\0", newMode.m_RenderDLL); m_pClientDE->RunConsoleString(szTemp); sprintf(szTemp, "++CardDesc %s\0", newMode.m_InternalName); m_pClientDE->RunConsoleString(szTemp); sprintf(szTemp, "++screenwidth %d\0", newMode.m_Width); m_pClientDE->RunConsoleString(szTemp); sprintf(szTemp, "++screenheight %d\0", newMode.m_Height); m_pClientDE->RunConsoleString(szTemp); sprintf(szTemp, "++screendepth %d\0", newMode.m_BitDepth); m_pClientDE->RunConsoleString(szTemp); return DTRUE; }
// Sets the renderer LTBOOL CFolderDisplay::SetRenderer(int nRendererIndex, int nResolutionIndex) { // Get the new renderer structure RMode newMode=GetRendererModeStruct(nRendererIndex, nResolutionIndex); // If the current renderer is the same as the one we are changing to, then don't set the renderer! RMode currentMode; if (g_pLTClient->GetRenderMode(¤tMode) == LT_OK) { if (IsRendererEqual(&newMode, ¤tMode)) { return LTFALSE; } } // Set the renderer mode g_pInterfaceMgr->SetSwitchingRenderModes(LTTRUE); g_pLTClient->SetRenderMode(&newMode); g_pInterfaceMgr->SetSwitchingRenderModes(LTFALSE); // Write the renderer information to the autoexec.cfg file char szTemp[256]; sprintf(szTemp, "+RenderDll %s\0", newMode.m_RenderDLL); g_pLTClient->RunConsoleString(szTemp); sprintf(szTemp, "+CardDesc %s\0", newMode.m_InternalName); g_pLTClient->RunConsoleString(szTemp); sprintf(szTemp, "+screenwidth %d\0", newMode.m_Width); g_pLTClient->RunConsoleString(szTemp); sprintf(szTemp, "+screenheight %d\0", newMode.m_Height); g_pLTClient->RunConsoleString(szTemp); sprintf(szTemp, "+bitdepth %d\0", newMode.m_BitDepth); g_pLTClient->RunConsoleString(szTemp); g_pInterfaceMgr->ScreenDimsChanged(); g_pInterfaceMgr->InitCursor(); return LTTRUE; }
// Called when the screen gains or focus void CScreenDisplay::OnFocus(LTBOOL bFocus) { CUserProfile *pProfile = g_pProfileMgr->GetCurrentProfile(); if (bFocus) { m_bEscape = LTFALSE; pProfile->SetDisplay(); m_bHardwareCursor = pProfile->m_bHardwareCursor; m_bVSync = pProfile->m_bVSync; float gamma = pProfile->m_fGamma; m_nGamma = ConvertToSlider(gamma); m_pHardwareCursor->Enable(GetConsoleInt("DisableHardwareCursor",0) == 0); // The current render mode RMode currentMode; g_pLTClient->GetRenderMode(¤tMode); // Set the renderer controls so that they match the currently selected renderer unsigned int i; for (i=0; i < m_rendererData.m_resolutionArray.GetSize(); i++) { RMode mode=GetRendererModeStruct(i); if (IsRendererEqual(¤tMode, &mode)) { // Setup the resolution control SetupResolutionCtrl(); // Set the resolution index m_pResolutionCtrl->SetSelIndex(i); } } UpdateData(LTFALSE); } else { UpdateData(); if (m_bEscape) { pProfile->m_bHardwareCursor = m_bHardwareCursor; pProfile->m_bVSync = m_bVSync; pProfile->m_fGamma = ConvertToGamma(m_nGamma); // Set the render mode if we are losing focus if (m_pResolutionCtrl) { // Get the new renderer structure RMode newMode=GetRendererModeStruct(m_pResolutionCtrl->GetSelIndex()); pProfile->m_nScreenWidth = newMode.m_Width; pProfile->m_nScreenHeight = newMode.m_Height; pProfile->m_nScreenDepth = newMode.m_BitDepth; } pProfile->ApplyDisplay(); //display settings can affect performance sttings so update them here... g_pPerformanceMgr->GetPerformanceOptions(&pProfile->m_sPerformance); pProfile->Save(); } } CBaseScreen::OnFocus(bFocus); }
// Called when the folder gains or focus void CFolderDisplay::OnFocus(LTBOOL bFocus) { CGameSettings *pSettings = g_pInterfaceMgr->GetSettings(); if (bFocus) { m_bEscape = LTFALSE; m_bHardwareCursor = (GetConsoleInt("HardwareCursor",0) > 0 && GetConsoleInt("DisableHardwareCursor",0) == 0); m_pHardwareCursor->Enable(GetConsoleInt("DisableHardwareCursor",0) == 0); // The current render mode RMode currentMode; g_pLTClient->GetRenderMode(¤tMode); // Set the renderer controls so that they match the currently selected renderer unsigned int n; for (n=0; n < m_rendererArray.GetSize(); n++) { unsigned int i; for (i=0; i < m_rendererArray[n].m_resolutionArray.GetSize(); i++) { RMode mode=GetRendererModeStruct(n, i); if (IsRendererEqual(¤tMode, &mode)) { // Set the renderer index m_pRendererCtrl->SetSelIndex(n); // Setup the resolution control SetupResolutionCtrl(); // Set the resolution index m_pResolutionCtrl->SetSelIndex(i); } } } m_bTexture32 = pSettings->GetBoolVar("32BitTextures"); UpdateData(LTFALSE); SetSelection(1); } else { UpdateData(); if (m_bEscape) { LTBOOL bTexture32 = pSettings->GetBoolVar("32BitTextures"); WriteConsoleInt("HardwareCursor",(int)m_bHardwareCursor); pSettings->SetBoolVar("32BitTextures",m_bTexture32); LTBOOL bRebind = (bTexture32 != m_bTexture32); // Set the render mode if we are losing focus if (m_pRendererCtrl && m_pResolutionCtrl) { int oldMO = (int)pSettings->GetFloatVar("MipmapOffset"); LTBOOL bSet = SetRenderer(m_pRendererCtrl->GetSelIndex(), m_pResolutionCtrl->GetSelIndex()); // If we didn't switch resolutions and the mipmap offset changed, rebind textures. if(!bSet) { int curMO = (int)pSettings->GetFloatVar("MipmapOffset"); if(curMO != oldMO) { bRebind = LTTRUE; } } } if (bRebind) { g_pLTClient->Start3D(); g_pLTClient->StartOptimized2D(); g_pInterfaceResMgr->DrawMessage(GetSmallFont(),IDS_REBINDING_TEXTURES); g_pLTClient->EndOptimized2D(); g_pLTClient->End3D(); g_pLTClient->FlipScreen(0); g_pLTClient->RunConsoleString("RebindTextures"); } } if (GetConsoleInt("BitDepth",16) == 16) WriteConsoleInt("DrawPortals",0); else if ((GetConsoleInt("BitDepth",16) == 32) && (GetConsoleInt("PerformanceLevel",1) == 2)) WriteConsoleInt("DrawPortals",1); g_pLTClient->WriteConfigFile("autoexec.cfg"); } CBaseFolder::OnFocus(bFocus); }
// Called when the screen gains or focus void CScreenDisplay::OnFocus(bool bFocus) { CUserProfile *pProfile = g_pProfileMgr->GetCurrentProfile(); if (bFocus) { // clear all warning flags m_dwFlags &= ~eFlagWarningMask; m_bEscape = false; pProfile->SetDisplay(); m_bHardwareCursor = pProfile->m_bHardwareCursor; m_bVSync = pProfile->m_bVSync; m_bRestartRenderBetweenMaps = pProfile->m_bRestartRenderBetweenMaps; m_bUseTextScaling = pProfile->m_bUseTextScaling; float gamma = pProfile->m_fGamma; m_nGamma = ConvertToSlider(gamma); // m_pHardwareCursor->Enable(GetConsoleInt("DisableHardwareCursor",0) == 0); // The current render mode RMode currentMode; g_pLTClient->GetRenderMode(¤tMode); // Set the renderer controls so that they match the currently selected renderer unsigned int i; for (i=0; i < m_rendererData.m_resolutionArray.GetSize(); i++) { RMode mode=GetRendererModeStruct(i); if (IsRendererEqual(¤tMode, &mode)) { // Setup the resolution control SetupResolutionCtrl(); // Set the resolution index m_pResolutionCtrl->SetSelIndex(i); } } UpdateData(false); if( !CPerformanceMgr::Instance().ArePerformanceCapsValid() ) { g_pInterfaceResMgr->DrawMessage("PerformanceMessage_DetectVideoMemory"); CPerformanceMgr::Instance().DetectPerformanceStats( true ); } UpdateResolutionColor(); CheckResolutionMemory(); } else { UpdateData(); if (m_bEscape) { pProfile->m_bHardwareCursor = m_bHardwareCursor; pProfile->m_bVSync = m_bVSync; pProfile->m_bRestartRenderBetweenMaps = m_bRestartRenderBetweenMaps; pProfile->m_bUseTextScaling = m_bUseTextScaling; pProfile->m_fGamma = ConvertToGamma(m_nGamma); // Set the render mode if we are losing focus if (m_pResolutionCtrl) { // Get the new renderer structure RMode newMode=GetRendererModeStruct(m_pResolutionCtrl->GetSelIndex()); pProfile->m_nScreenWidth = newMode.m_Width; pProfile->m_nScreenHeight = newMode.m_Height; pProfile->m_nScreenDepth = newMode.m_BitDepth; } pProfile->ApplyDisplay(); pProfile->Save(); } } CBaseScreen::OnFocus(bFocus); }