diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/HammerVGui.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/HammerVGui.cpp')
| -rw-r--r-- | hammer/HammerVGui.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/hammer/HammerVGui.cpp b/hammer/HammerVGui.cpp new file mode 100644 index 0000000..2e5c73c --- /dev/null +++ b/hammer/HammerVGui.cpp @@ -0,0 +1,132 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +#include "stdafx.h" +#include "hammer.h" +#include "hammervgui.h" +#include <vgui/IVGui.h> +#include <vgui/ISurface.h> +#include <vgui/ISystem.h> +#include "vgui/IInput.h" +#include <VGuiMatSurface/IMatSystemSurface.h> +#include <matsys_controls/matsyscontrols.h> +#include "material.h" +#include "vgui_controls/AnimationController.h" +#include "inputsystem/iinputsystem.h" +#include "VGuiWnd.h" + +//----------------------------------------------------------------------------- +// Purpose: singleton accessor +//----------------------------------------------------------------------------- +static CHammerVGui s_HammerVGui; + +CHammerVGui *HammerVGui() +{ + return &s_HammerVGui; +} + +CHammerVGui::CHammerVGui(void) +{ + m_pActiveWindow = NULL; + m_hMainWindow = NULL; +} + +//----------------------------------------------------------------------------- +// Setup the base vgui panels +//----------------------------------------------------------------------------- +bool CHammerVGui::Init( HWND hWindow ) +{ + // initialize vgui_control interfaces + if (!vgui::VGui_InitInterfacesList( "HAMMER", &g_Factory, 1 )) + return false; + + if ( !vgui::VGui_InitMatSysInterfacesList( "HAMMER", &g_Factory, 1 ) ) + return false; + + if ( !g_pMatSystemSurface ) + return false; + + // configuration settings + vgui::system()->SetUserConfigFile("hammer.vdf", "EXECUTABLE_PATH"); + + // Are we trapping input? + g_pMatSystemSurface->EnableWindowsMessages( true ); + + // Need to be able to play sounds through vgui + // g_pMatSystemSurface->InstallPlaySoundFunc( VGui_PlaySound ); + + // load scheme + if (!vgui::scheme()->LoadSchemeFromFile("Resource/SourceScheme.res", "Hammer")) + { + return false; + } + + m_hMainWindow = hWindow; + + // Start the App running + vgui::ivgui()->Start(); + vgui::ivgui()->SetSleep(false); + + return true; +} + +void CHammerVGui::SetFocus( CVGuiWnd *pVGuiWnd ) +{ + if ( pVGuiWnd == m_pActiveWindow ) + return; + + g_pInputSystem->PollInputState(); + vgui::ivgui()->RunFrame(); + + g_pMatSystemSurface->AttachToWindow( NULL, false ); + g_pInputSystem->DetachFromWindow( ); + + if ( pVGuiWnd ) + { + m_pActiveWindow = pVGuiWnd; + g_pInputSystem->AttachToWindow( pVGuiWnd->GetParentWnd()->GetSafeHwnd() ); + g_pMatSystemSurface->AttachToWindow( pVGuiWnd->GetParentWnd()->GetSafeHwnd(), false ); + vgui::ivgui()->ActivateContext( pVGuiWnd->GetVGuiContext() ); + } + else + { + m_pActiveWindow = NULL; + vgui::ivgui()->ActivateContext( vgui::DEFAULT_VGUI_CONTEXT ); + } +} + +bool CHammerVGui::HasFocus( CVGuiWnd *pWnd ) +{ + return m_pActiveWindow == pWnd; +} + +void CHammerVGui::Simulate() +{ +// VPROF( "CHammerVGui::Simulate" ); + + if ( !IsInitialized() ) + return; + + g_pInputSystem->PollInputState(); + vgui::ivgui()->RunFrame(); + + // run vgui animations + vgui::GetAnimationController()->UpdateAnimations( vgui::system()->GetCurrentTime() ); +} + +void CHammerVGui::Shutdown() +{ + // Give panels a chance to settle so things + // Marked for deletion will actually get deleted + + if ( !IsInitialized() ) + return; + + g_pInputSystem->PollInputState(); + vgui::ivgui()->RunFrame(); + + // stop the App running + vgui::ivgui()->Stop(); +} + +CHammerVGui::~CHammerVGui(void) +{ +} |