mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-13 00:00:54 +01:00
135 lines
4.8 KiB
C++
135 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
|