diff --git a/src/main.cpp b/src/main.cpp index a8d094f..9083830 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -51,6 +51,110 @@ static void setup_menus(PlatformWindow *window) platform_set_menu(window, menus, sizeof(menus) / sizeof(menus[0])); } +static void setup_theme() +{ + ImGuiIO &io = ImGui::GetIO(); + + // Load Segoe UI from Windows system fonts + ImFontConfig font_cfg = {}; + font_cfg.OversampleH = 2; + font_cfg.OversampleV = 1; + font_cfg.PixelSnapH = true; + io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\segoeui.ttf", 15.0f, &font_cfg); + + // DAW-style dark theme + ImGuiStyle &s = ImGui::GetStyle(); + + // Geometry + s.WindowPadding = ImVec2(8, 8); + s.FramePadding = ImVec2(6, 4); + s.ItemSpacing = ImVec2(8, 4); + s.ItemInnerSpacing = ImVec2(4, 4); + s.ScrollbarSize = 12.0f; + s.GrabMinSize = 8.0f; + s.WindowBorderSize = 1.0f; + s.FrameBorderSize = 0.0f; + s.TabBorderSize = 0.0f; + s.WindowRounding = 2.0f; + s.FrameRounding = 2.0f; + s.GrabRounding = 2.0f; + s.TabRounding = 2.0f; + s.ScrollbarRounding = 2.0f; + + ImVec4 *c = s.Colors; + + // Backgrounds + c[ImGuiCol_WindowBg] = ImVec4(0.12f, 0.12f, 0.13f, 1.00f); + c[ImGuiCol_ChildBg] = ImVec4(0.12f, 0.12f, 0.13f, 1.00f); + c[ImGuiCol_PopupBg] = ImVec4(0.15f, 0.15f, 0.16f, 1.00f); + + // Borders + c[ImGuiCol_Border] = ImVec4(0.22f, 0.22f, 0.24f, 1.00f); + c[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + + // Text + c[ImGuiCol_Text] = ImVec4(0.88f, 0.88f, 0.88f, 1.00f); + c[ImGuiCol_TextDisabled] = ImVec4(0.44f, 0.44f, 0.44f, 1.00f); + + // Headers (collapsing headers, menu bar items) + c[ImGuiCol_Header] = ImVec4(0.20f, 0.20f, 0.22f, 1.00f); + c[ImGuiCol_HeaderHovered] = ImVec4(0.28f, 0.28f, 0.30f, 1.00f); + c[ImGuiCol_HeaderActive] = ImVec4(0.24f, 0.24f, 0.26f, 1.00f); + + // Buttons + c[ImGuiCol_Button] = ImVec4(0.22f, 0.22f, 0.24f, 1.00f); + c[ImGuiCol_ButtonHovered] = ImVec4(0.30f, 0.30f, 0.33f, 1.00f); + c[ImGuiCol_ButtonActive] = ImVec4(0.26f, 0.26f, 0.28f, 1.00f); + + // Frame backgrounds (inputs, checkboxes, sliders) + c[ImGuiCol_FrameBg] = ImVec4(0.16f, 0.16f, 0.17f, 1.00f); + c[ImGuiCol_FrameBgHovered] = ImVec4(0.20f, 0.20f, 0.22f, 1.00f); + c[ImGuiCol_FrameBgActive] = ImVec4(0.18f, 0.18f, 0.20f, 1.00f); + + // Tabs + c[ImGuiCol_Tab] = ImVec4(0.16f, 0.16f, 0.17f, 1.00f); + c[ImGuiCol_TabHovered] = ImVec4(0.28f, 0.28f, 0.30f, 1.00f); + c[ImGuiCol_TabSelected] = ImVec4(0.20f, 0.20f, 0.22f, 1.00f); + c[ImGuiCol_TabSelectedOverline] = ImVec4(0.34f, 0.54f, 0.69f, 1.00f); + c[ImGuiCol_TabDimmed] = ImVec4(0.12f, 0.12f, 0.13f, 1.00f); + c[ImGuiCol_TabDimmedSelected] = ImVec4(0.16f, 0.16f, 0.17f, 1.00f); + + // Title bar + c[ImGuiCol_TitleBg] = ImVec4(0.10f, 0.10f, 0.11f, 1.00f); + c[ImGuiCol_TitleBgActive] = ImVec4(0.13f, 0.13f, 0.14f, 1.00f); + c[ImGuiCol_TitleBgCollapsed] = ImVec4(0.10f, 0.10f, 0.11f, 1.00f); + + // Scrollbar + c[ImGuiCol_ScrollbarBg] = ImVec4(0.10f, 0.10f, 0.11f, 1.00f); + c[ImGuiCol_ScrollbarGrab] = ImVec4(0.24f, 0.24f, 0.26f, 1.00f); + c[ImGuiCol_ScrollbarGrabHovered]= ImVec4(0.30f, 0.30f, 0.33f, 1.00f); + c[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.34f, 0.34f, 0.37f, 1.00f); + + // Slider grab + c[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.54f, 0.69f, 1.00f); + c[ImGuiCol_SliderGrabActive] = ImVec4(0.40f, 0.60f, 0.75f, 1.00f); + + // Checkmark, accent + c[ImGuiCol_CheckMark] = ImVec4(0.34f, 0.54f, 0.69f, 1.00f); + + // Separator + c[ImGuiCol_Separator] = ImVec4(0.22f, 0.22f, 0.24f, 1.00f); + c[ImGuiCol_SeparatorHovered] = ImVec4(0.34f, 0.54f, 0.69f, 1.00f); + c[ImGuiCol_SeparatorActive] = ImVec4(0.34f, 0.54f, 0.69f, 1.00f); + + // Resize grip + c[ImGuiCol_ResizeGrip] = ImVec4(0.22f, 0.22f, 0.24f, 0.50f); + c[ImGuiCol_ResizeGripHovered] = ImVec4(0.34f, 0.54f, 0.69f, 0.67f); + c[ImGuiCol_ResizeGripActive] = ImVec4(0.34f, 0.54f, 0.69f, 0.95f); + + // Docking + c[ImGuiCol_DockingPreview] = ImVec4(0.34f, 0.54f, 0.69f, 0.70f); + c[ImGuiCol_DockingEmptyBg] = ImVec4(0.10f, 0.10f, 0.11f, 1.00f); + + // Menu bar + c[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.15f, 1.00f); +} + static void build_default_layout(ImGuiID dockspace_id) { ImGui::DockBuilderRemoveNode(dockspace_id); @@ -93,6 +197,7 @@ int main(int argc, char **argv) return 1; } + setup_theme(); setup_menus(window); int32_t last_w = w, last_h = h;