F4MP/codigos originales/tiltedcode/Code/client/Services/Generic/ImguiService.cpp

97 lines
2.3 KiB
C++
Raw Normal View History

#include <TiltedOnlinePCH.h>
#include <Services/ImguiService.h>
#include <Systems/RenderSystemD3D11.h>
#include <d3d11.h>
#include <imgui/imgui_impl_dx11.h>
#include <imgui/imgui_impl_win32.h>
#include <imgui.h>
// According to imgui documentation we have to do it this way in order to avoid link conflicts with windows.h
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
ImguiService::ImguiService()
: OnDraw(m_drawSignal)
{
}
ImguiService::~ImguiService() noexcept
{
}
void ImguiService::Create(RenderSystemD3D11* apRenderSystem, HWND aHwnd)
{
m_imDriver.Initialize(static_cast<void*>(aHwnd));
// init platform
if (!ImGui_ImplWin32_Init(aHwnd))
spdlog::error("Failed to initialize Imgui-Win32");
ImGui_ImplDX11_Init(apRenderSystem->GetDevice(), apRenderSystem->GetDeviceContext());
}
void ImguiService::Render() const
{
ImGui_ImplDX11_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
m_drawSignal.publish();
ImGui::Render();
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
}
void ImguiService::Reset() const
{
// TODO: idk how imgui handles this
}
LRESULT ImguiService::WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return ImGui_ImplWin32_WndProcHandler(hwnd, msg, wParam, lParam);
}
void ImguiService::RawInputHandler(RAWINPUT& aRawinput)
{
if (ImGui::GetCurrentContext() == NULL)
return;
ImGuiIO& io = ImGui::GetIO();
if (aRawinput.header.dwType == RIM_TYPEMOUSE)
{
const auto mouse = aRawinput.data.mouse;
if (mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_DOWN)
{
io.MouseDown[0] = true;
}
if (mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_UP)
{
io.MouseDown[0] = false;
}
if (mouse.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_DOWN)
{
io.MouseDown[1] = true;
}
if (mouse.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_UP)
{
io.MouseDown[1] = false;
}
if (mouse.usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN)
{
io.MouseDown[2] = true;
}
if (mouse.usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_UP)
{
io.MouseDown[2] = false;
}
}
}