F4MP/codigos originales/tiltedcode/Code/components/imgui/ImGuiDriver.cpp
2026-01-06 18:53:59 +01:00

134 lines
4.8 KiB
C++

// Copyright (C) 2022 TiltedPhoques SRL.
// For licensing information see LICENSE at the root of this distribution.
#include "imgui.h"
#include <imgui/ImGuiClipboard_Win32.h>
#include <imgui/ImGuiDriver.h>
#include <imgui/ImguiFont.inl>
#include <imgui/imgui_impl_win32.h>
namespace ImGuiImpl
{
namespace
{
void SetTiltedImStyle()
{
// cherry colors, 3 intensities
#define HI(v) ImVec4(0.502f, 0.075f, 0.256f, v)
#define MED(v) ImVec4(0.455f, 0.198f, 0.301f, v)
#define LOW(v) ImVec4(0.232f, 0.201f, 0.271f, v)
// backgrounds (@todo: complete with BG_MED, BG_LOW)
#define BG(v) ImVec4(0.200f, 0.220f, 0.270f, v)
// text
#define TEXT(v) ImVec4(0.860f, 0.930f, 0.890f, v)
auto& style = ImGui::GetStyle();
style.Colors[ImGuiCol_Text] = TEXT(0.78f);
style.Colors[ImGuiCol_TextDisabled] = TEXT(0.28f);
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.13f, 0.14f, 0.17f, 1.00f);
style.Colors[ImGuiCol_ChildBg] = BG(0.58f);
style.Colors[ImGuiCol_PopupBg] = BG(0.9f);
style.Colors[ImGuiCol_Border] = ImVec4(0.31f, 0.31f, 1.00f, 0.00f);
style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
style.Colors[ImGuiCol_FrameBg] = BG(1.00f);
style.Colors[ImGuiCol_FrameBgHovered] = MED(0.78f);
style.Colors[ImGuiCol_FrameBgActive] = MED(1.00f);
style.Colors[ImGuiCol_TitleBg] = LOW(1.00f);
style.Colors[ImGuiCol_TitleBgActive] = HI(1.00f);
style.Colors[ImGuiCol_TitleBgCollapsed] = BG(0.75f);
style.Colors[ImGuiCol_MenuBarBg] = BG(0.47f);
style.Colors[ImGuiCol_ScrollbarBg] = BG(1.00f);
style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.09f, 0.15f, 0.16f, 1.00f);
style.Colors[ImGuiCol_ScrollbarGrabHovered] = MED(0.78f);
style.Colors[ImGuiCol_ScrollbarGrabActive] = MED(1.00f);
style.Colors[ImGuiCol_CheckMark] = ImVec4(0.71f, 0.22f, 0.27f, 1.00f);
style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.47f, 0.77f, 0.83f, 0.14f);
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.71f, 0.22f, 0.27f, 1.00f);
style.Colors[ImGuiCol_Button] = ImVec4(0.47f, 0.77f, 0.83f, 0.14f);
style.Colors[ImGuiCol_ButtonHovered] = MED(0.86f);
style.Colors[ImGuiCol_ButtonActive] = MED(1.00f);
style.Colors[ImGuiCol_Header] = MED(0.76f);
style.Colors[ImGuiCol_HeaderHovered] = MED(0.86f);
style.Colors[ImGuiCol_HeaderActive] = HI(1.00f);
style.Colors[ImGuiCol_ResizeGrip] = ImVec4(0.47f, 0.77f, 0.83f, 0.04f);
style.Colors[ImGuiCol_ResizeGripHovered] = MED(0.78f);
style.Colors[ImGuiCol_ResizeGripActive] = MED(1.00f);
style.Colors[ImGuiCol_PlotLines] = TEXT(0.63f);
style.Colors[ImGuiCol_PlotLinesHovered] = MED(1.00f);
style.Colors[ImGuiCol_PlotHistogram] = TEXT(0.63f);
style.Colors[ImGuiCol_PlotHistogramHovered] = MED(1.00f);
style.Colors[ImGuiCol_TextSelectedBg] = MED(0.43f);
style.Colors[ImGuiCol_ModalWindowDimBg] = BG(0.73f);
style.WindowPadding = ImVec2(6, 4);
style.WindowRounding = 0.0f;
style.FramePadding = ImVec2(5, 2);
style.FrameRounding = 3.0f;
style.ItemSpacing = ImVec2(7, 1);
style.ItemInnerSpacing = ImVec2(1, 1);
style.TouchExtraPadding = ImVec2(0, 0);
style.IndentSpacing = 6.0f;
style.ScrollbarSize = 12.0f;
style.ScrollbarRounding = 16.0f;
style.GrabMinSize = 20.0f;
style.GrabRounding = 2.0f;
style.WindowTitleAlign.x = 0.50f;
style.Colors[ImGuiCol_Border] = ImVec4(0.539f, 0.479f, 0.255f, 0.162f);
style.FrameBorderSize = 0.0f;
style.WindowBorderSize = 1.0f;
}
} // namespace
ImGuiDriver::ImGuiDriver()
{
// create imgui
ImGui::CreateContext();
auto& io = ImGui::GetIO();
InstallClipboardHandlers(io);
// io.IniFilename = nullptr;
auto& st = ImGui::GetStyle();
#if 0
st.FrameBorderSize = 1.0f;
st.FramePadding = ImVec2(4.0f, 2.0f);
st.ItemSpacing = ImVec2(8.0f, 2.0f);
st.WindowBorderSize = 1.0f;
st.TabBorderSize = 1.0f;
#endif
// make everything have smooth edges
st.WindowRounding = 2.0f;
st.ChildRounding = 2.0f;
st.FrameRounding = 3.0f;
st.ScrollbarRounding = 3.0f;
st.GrabRounding = 2.f;
st.TabRounding = 1.0f;
SetTiltedImStyle();
}
ImGuiDriver::~ImGuiDriver()
{
ImGui::DestroyContext();
}
void ImGuiDriver::Initialize(void* apHandle)
{
float scaleFactor = ImGui_ImplWin32_GetDpiScaleForHwnd(apHandle);
// 3260 = 3x
// 1920 =
// https://github.com/ocornut/imgui/blob/master/docs/FAQ.md#q-how-should-i-handle-dpi-in-my-application
auto& io = ImGui::GetIO();
auto* extraGlyphRanges = io.Fonts->GetGlyphRangesCyrillic(); // Includes Latin
io.Fonts->AddFontFromMemoryCompressedBase85TTF(Roboto_compressed_data_base85,
20.f * scaleFactor, //->Scale = scaleFactor;
nullptr, extraGlyphRanges);
ImGui::GetStyle().ScaleAllSizes(scaleFactor);
}
} // namespace ImGuiImpl