mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-13 00:20:54 +01:00
97 lines
2.3 KiB
C++
97 lines
2.3 KiB
C++
|
|
#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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|