// Copyright (C) 2022 TiltedPhoques SRL. // For licensing information see LICENSE at the root of this distribution. #include "imgui.h" #include #include #include #include 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