Files
OpenVulkano/openVulkanoCpp/Host/ImGuiImplOpenVulkano.cpp

94 lines
3.0 KiB
C++

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "ImGuiImplOpenVulkano.hpp"
#include "Base/FrameMetadata.hpp"
#include "Input/InputManager.hpp"
#include "Base/Logger.hpp"
#include <imgui.h>
namespace OpenVulkano
{
ImGuiImplOpenVulkano ImGuiImplOpenVulkano::INSTANCE{};
namespace {
Input::InputAction pressed("ImGuiMousePressed");
Input::InputAction positionX("ImGuiMousePositionX");
Input::InputAction positionY("ImGuiMousePositionY");
}
void ImGuiImplOpenVulkano::Init(OpenVulkano::IWindow* window)
{
ImGuiIO& io = ImGui::GetIO();
IM_ASSERT(io.BackendPlatformUserData == nullptr && "Already initialized a platform backend!");
m_window = window;
io.BackendPlatformUserData = this;
io.BackendPlatformName = "imgui_impl_ios";
/*io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText;
io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText;
io.ClipboardUserData = bd->Window;*/
ImGuiViewport* mainViewport = ImGui::GetMainViewport();
mainViewport->PlatformHandle = m_window;
pressed.BindKey(Input::InputKey::Mouse::BUTTON_1);
pressed.BindKey(Input::InputKey::Touch::BUTTON_TAP);
pressed.BindKey(Input::InputKey::Touch::BUTTON_PAN);
positionX.BindKey(Input::InputKey::Mouse::AXIS_X_ABS);
positionX.BindKey(Input::InputKey::Touch::AXIS_TAP_X_ABS);
positionX.BindKey(Input::InputKey::Touch::AXIS_PAN_X_ABS);
positionY.BindKey(Input::InputKey::Mouse::AXIS_Y_ABS);
positionY.BindKey(Input::InputKey::Touch::AXIS_TAP_Y_ABS);
positionY.BindKey(Input::InputKey::Touch::AXIS_PAN_Y_ABS);
}
void ImGuiImplOpenVulkano::NewFrame()
{
ImGuiIO& io = ImGui::GetIO();
IM_ASSERT(m_window != nullptr && "Did you call Init?");
// Setup display size (every frame to accommodate for window resizing)
/*int w, h;
int display_w, display_h;
glfwGetWindowSize(bd->Window, &w, &h);
glfwGetFramebufferSize(bd->Window, &display_w, &display_h);
io.DisplaySize = ImVec2((float)w, (float)h);
if (w > 0 && h > 0)
io.DisplayFramebufferScale = ImVec2((float)display_w / (float)w, (float)display_h / (float)h);*/
io.DisplaySize = { static_cast<float>(m_window->GetWidth()), static_cast<float>(m_window->GetHeight()) };
io.DisplayFramebufferScale = { m_window->GetContentScale(), m_window->GetContentScale() };
//if (bd->WantUpdateMonitors)
//ImGui_ImplGlfw_UpdateMonitors();
// Setup time step
io.DeltaTime = CURRENT_FRAME.frameTime;
//TODO handle inputs
auto input = Input::InputManager::GetInstance();
auto p = io.MousePos = { input->GetAxis(&positionX) / io.DisplayFramebufferScale.x, input->GetAxis(&positionY) / io.DisplayFramebufferScale.y };
io.MouseDown[0] = input->GetButton(&pressed);
}
void ImGuiImplOpenVulkano::Close()
{
ImGuiIO& io = ImGui::GetIO();
#ifndef __APPLE__
ImGui::DestroyPlatformWindows();
#endif
io.BackendPlatformName = nullptr;
io.BackendPlatformUserData = nullptr;
io.BackendFlags = ImGuiBackendFlags_None;
}
}