r5sdk/r5dev/engine/sys_mainwind.cpp
Kawe Mazidjatari c84622cfd6 DirectX hook refactor
Refactored code to only feature game pointers, this avoids the unnecessary overhead that was previously caused by creating our own device pointers, swapchain, etc.. This commit also fixes the classic 'black screen' problem when the aspect ratio is set to 4:3 - 5:4, however, a similar bug returned for this causing Dear ImGui to not draw at all when the aspect ratio is set to 4:3 - 5:4. This commit also moves the old HwndProc hook to 'CGame::WindowProc'.
2023-01-30 20:18:11 +01:00

96 lines
2.7 KiB
C++
Raw Blame History

//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
//===========================================================================//
#include "core/stdafx.h"
#include "tier0/commandline.h"
#include "windows/id3dx.h"
#include "windows/input.h"
#include "engine/sys_mainwind.h"
#include "gameui/IConsole.h"
#include "gameui/IBrowser.h"
//-----------------------------------------------------------------------------
// Purpose: plays the startup video's
//-----------------------------------------------------------------------------
void CGame::PlayStartupVideos(void)
{
if (!CommandLine()->CheckParm("-novid"))
{
v_CGame__PlayStartupVideos();
}
}
//-----------------------------------------------------------------------------
// Purpose: main windows procedure
//-----------------------------------------------------------------------------
int CGame::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
ImGui_ImplWin32_WndProcHandler(hWnd, uMsg, wParam, lParam);
if (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN)
{
if (wParam == g_pImGuiConfig->m_ConsoleConfig.m_nBind0 || wParam == g_pImGuiConfig->m_ConsoleConfig.m_nBind1)
{
g_pConsole->m_bActivate ^= true;
ResetInput(); // Disable input to game when console is drawn.
}
if (wParam == g_pImGuiConfig->m_BrowserConfig.m_nBind0 || wParam == g_pImGuiConfig->m_BrowserConfig.m_nBind1)
{
g_pBrowser->m_bActivate ^= true;
ResetInput(); // Disable input to game when browser is drawn.
}
}
if (g_pConsole->m_bActivate || g_pBrowser->m_bActivate)
{//////////////////////////////////////////////////////////////////////////////
g_bBlockInput = true;
switch (uMsg)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_RBUTTONDBLCLK:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
case WM_MBUTTONDBLCLK:
case WM_KEYDOWN:
case WM_KEYUP:
case WM_MOUSEACTIVATE:
case WM_MOUSEHOVER:
case WM_MOUSEHWHEEL:
case WM_MOUSELEAVE:
case WM_MOUSEMOVE:
case WM_MOUSEWHEEL:
case WM_SETCURSOR:
uMsg = WM_NULL;
break;
default:
break;
}
}//////////////////////////////////////////////////////////////////////////////
else
{
g_bBlockInput = false;
}
return v_CGame__WindowProc(hWnd, uMsg, wParam, lParam);
}
///////////////////////////////////////////////////////////////////////////////
void VGame::Attach() const
{
DetourAttach(&v_CGame__PlayStartupVideos, &CGame::PlayStartupVideos);
DetourAttach(&v_CGame__WindowProc, &CGame::WindowProc);
}
void VGame::Detach() const
{
DetourDetach(&v_CGame__PlayStartupVideos, &CGame::PlayStartupVideos);
DetourDetach(&v_CGame__WindowProc, &CGame::WindowProc);
}