Add all the files

This commit is contained in:
Exzap 2022-08-22 22:21:23 +02:00
parent e3db07a16a
commit d60742f52b
1445 changed files with 430238 additions and 0 deletions

View file

@ -0,0 +1,166 @@
#include "imgui_extension.h"
#include "gui/guiWrapper.h"
#include "Cafe/HW/Latte/Renderer/Renderer.h"
#include "resource/IconsFontAwesome5.h"
#include "imgui_impl_opengl3.h"
#include "resource/resource.h"
#include "imgui_impl_vulkan.h"
#include "input/InputManager.h"
// <imgui_internal.h>
template<typename T> static T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; }
template<typename T> static T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; }
static ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
int rotation_start_index;
void ImRotateStart()
{
rotation_start_index = ImGui::GetWindowDrawList()->VtxBuffer.Size;
}
ImVec2 ImRotationCenter()
{
ImVec2 l(FLT_MAX, FLT_MAX), u(-FLT_MAX, -FLT_MAX); // bounds
const auto& buf = ImGui::GetWindowDrawList()->VtxBuffer;
for (int i = rotation_start_index; i < buf.Size; i++)
l = ImMin(l, buf[i].pos), u = ImMax(u, buf[i].pos);
return ImVec2((l.x + u.x) / 2, (l.y + u.y) / 2); // or use _ClipRectStack?
}
void ImRotateEnd(float rad, ImVec2 center)
{
const float s = sin(rad);
const float c = cos(rad);
center = ImRotate(center, s, c) - center;
auto& buf = ImGui::GetWindowDrawList()->VtxBuffer;
for (int i = rotation_start_index; i < buf.Size; i++)
buf[i].pos = ImRotate(buf[i].pos, s, c) - center;
}
uint8* extractCafeDefaultFont(sint32* size);
sint32 g_font_size = 0;
uint8* g_font_data = nullptr;
std::unordered_map<int, ImFont*> g_imgui_fonts;
std::stack<int> g_font_requests;
void ImGui_PrecacheFonts()
{
while (!g_font_requests.empty())
{
const int size = g_font_requests.top();
g_font_requests.pop();
auto& io = ImGui::GetIO();
cemu_assert(io.Fonts->Locked == false);
if (g_font_size == 0)
g_font_data = extractCafeDefaultFont(&g_font_size);
ImFontConfig cfg{};
cfg.FontDataOwnedByAtlas = false;
//cfg.FontData = g_font_data;
//cfg.FontDataSize = g_font_size;
//cfg.SizePixels = size;
ImFont* font = io.Fonts->AddFontFromMemoryTTF(g_font_data, g_font_size, (float)size, &cfg);
#if BOOST_OS_WINDOWS
const auto hinstance = GetModuleHandle(nullptr);
const HRSRC res = FindResource(hinstance, MAKEINTRESOURCE(IDR_FONTAWESOME), RT_RCDATA);
if (res)
{
const HGLOBAL mem = ::LoadResource(hinstance, res);
if (mem)
{
void* data = LockResource(mem);
const size_t len = SizeofResource(hinstance, res);
ImFontConfig cfgmerge{};
cfgmerge.FontDataOwnedByAtlas = false;
cfgmerge.MergeMode = true;
cfgmerge.GlyphMinAdvanceX = 20.0f;
//cfgmerge.GlyphOffset = { 2,2 };
static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 };
io.Fonts->AddFontFromMemoryTTF(data, (int)len, (float)size, &cfgmerge, icon_ranges);
}
}
#endif
g_imgui_fonts[(int)size] = font;
// Vulkan doesn't let us destroy resources that are still being used, so we flush here
g_renderer->Flush(true);
g_renderer->DeleteFontTextures();
}
}
ImFont* ImGui_GetFont(float size)
{
const auto it = g_imgui_fonts.find((int)size);
if (it != g_imgui_fonts.cend())
return it->second;
g_font_requests.emplace((int)size);
return nullptr; // will create the font in next precache call
}
void ImGui_UpdateWindowInformation(bool mainWindow)
{
extern WindowInfo g_window_info;
ImGuiIO& io = ImGui::GetIO();
io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;
#if BOOST_OS_WINDOWS
io.ImeWindowHandle = mainWindow ? g_window_info.window_main.hwnd : g_window_info.window_pad.hwnd;
#else
io.ImeWindowHandle = nullptr;
#endif
io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
auto& instance = InputManager::instance();
const auto mousePos = instance.get_mouse_position(!mainWindow);
io.MousePos = { (float)mousePos.x, (float)mousePos.y };
bool padDown;
const auto pos = instance.get_left_down_mouse_info(&padDown);
io.MouseDown[0] = padDown != mainWindow && pos.has_value();
std::fill_n(io.KeysDown, std::size(io.KeysDown), false);
std::copy(std::cbegin(g_window_info.keydown), std::cend(g_window_info.keydown), io.KeysDown);
// printf("%f %f %d\n", io.MousePos.x, io.MousePos.y, io.MouseDown[0]);
for (auto i = 0; i < InputManager::kMaxController; ++i)
{
const auto controller = instance.get_controller(i);
if (!controller)
continue;
if (controller->is_start_down())
io.NavInputs[ImGuiNavInput_Input] = 1.0f;
if (controller->is_a_down())
io.NavInputs[ImGuiNavInput_Activate] = 1.0f;
if (controller->is_b_down())
io.NavInputs[ImGuiNavInput_Cancel] = 1.0f;
if (controller->is_left_down())
io.NavInputs[ImGuiNavInput_DpadLeft] = 1.0f;
if (controller->is_right_down())
io.NavInputs[ImGuiNavInput_DpadRight] = 1.0f;
if (controller->is_up_down())
io.NavInputs[ImGuiNavInput_DpadUp] = 1.0f;
if (controller->is_down_down())
io.NavInputs[ImGuiNavInput_DpadDown] = 1.0f;
}
}