From 53d8ecbfcdaed5267a59b8928aed6dfc701ecf38 Mon Sep 17 00:00:00 2001 From: Nexoniarz Date: Tue, 20 Oct 2026 16:56:20 +0200 Subject: [PATCH] The Niveus look in the app: bevelled keys and inset wells (a hook in ImGui's RenderFrame), warm graphite and paper appearances made from one brand colour, Instrument Sans and JetBrains Mono; View > Appearance Co-Authored-By: Claude Opus 5.5 --- cmake/Dependencies.cmake | 12 + content/engine/fonts/InstrumentSans-Bold.ttf | Bin 0 -> 68740 bytes .../engine/fonts/InstrumentSans-Regular.ttf | Bin 0 -> 68708 bytes .../engine/fonts/InstrumentSans-SemiBold.ttf | Bin 0 -> 68920 bytes .../engine/fonts/JetBrainsMono-Regular.ttf | Bin 0 -> 115180 bytes content/engine/fonts/OFL-InstrumentSans.txt | 93 +++++ content/engine/fonts/OFL-JetBrainsMono.txt | 93 +++++ engine/ui/ui.cpp | 332 +++++++++++++++--- engine/ui/ui.h | 41 ++- src/app.cpp | 120 +++---- 10 files changed, 569 insertions(+), 122 deletions(-) create mode 100644 content/engine/fonts/InstrumentSans-Bold.ttf create mode 100644 content/engine/fonts/InstrumentSans-Regular.ttf create mode 100644 content/engine/fonts/InstrumentSans-SemiBold.ttf create mode 100644 content/engine/fonts/JetBrainsMono-Regular.ttf create mode 100644 content/engine/fonts/OFL-InstrumentSans.txt create mode 100644 content/engine/fonts/OFL-JetBrainsMono.txt diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index be1f667..a643005 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -79,6 +79,18 @@ target_link_libraries(volk PUBLIC Vulkan::Headers) # Dear ImGui and YAPF have no CMake of their own; build them here. FetchContent_MakeAvailable(imgui yapf) +# One hook in ImGui: RenderFrame (the frame behind buttons, fields, checkboxes, combos) asks the +# engine's UI first, which draws Niveus's keys and wells instead (engine/ui/ui.cpp). +file(READ ${imgui_SOURCE_DIR}/imgui.cpp _imgui_cpp) +if(NOT _imgui_cpp MATCHES "GImRenderFrameHook") + set(_from "void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool borders, float rounding)\n{\n ImGuiContext& g = *GImGui;\n ImGuiWindow* window = g.CurrentWindow;\n") + string(FIND "${_imgui_cpp}" "${_from}" _at) + if(_at EQUAL -1) + message(FATAL_ERROR "ImGui's RenderFrame has changed: update the hook in cmake/Dependencies.cmake") + endif() + string(REPLACE "${_from}" "bool (*GImRenderFrameHook)(ImDrawList*, ImVec2, ImVec2, ImU32, bool, float) = nullptr;\n${_from} if (GImRenderFrameHook && GImRenderFrameHook(window->DrawList, p_min, p_max, fill_col, borders, rounding))\n return;\n" _imgui_cpp "${_imgui_cpp}") + file(WRITE ${imgui_SOURCE_DIR}/imgui.cpp "${_imgui_cpp}") +endif() add_library(imgui STATIC ${imgui_SOURCE_DIR}/imgui.cpp ${imgui_SOURCE_DIR}/imgui_draw.cpp ${imgui_SOURCE_DIR}/imgui_tables.cpp ${imgui_SOURCE_DIR}/imgui_widgets.cpp diff --git a/content/engine/fonts/InstrumentSans-Bold.ttf b/content/engine/fonts/InstrumentSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a55c17e2f9a944a75af27905e75c09763126406 GIT binary patch literal 68740 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 j$xX7MTCq5*o?OeQ#e}1Ud$6OQ@_7FXKPKEV literal 0 HcmV?d00001 diff --git a/content/engine/fonts/InstrumentSans-Regular.ttf b/content/engine/fonts/InstrumentSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0eb2260680c88dcb401d38af211258346657fa4b GIT binary patch literal 68708 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 C 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 literal 0 HcmV?d00001 diff --git a/content/engine/fonts/InstrumentSans-SemiBold.ttf b/content/engine/fonts/InstrumentSans-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5c3a09212ff8264368da174b3e8df278636090a5 GIT binary patch literal 68920 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

FMIF={1=Q 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 literal 0 HcmV?d00001 diff --git a/content/engine/fonts/JetBrainsMono-Regular.ttf b/content/engine/fonts/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..660323e2f72054ffdbd803f58d92a3e63005e42a GIT binary patch literal 115180 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 #include +#include + #include +#include #include +// ImGui's RenderFrame asks this first (patched in by cmake/Dependencies.cmake). +extern bool (*GImRenderFrameHook)(ImDrawList*, ImVec2, ImVec2, ImU32, bool, float); + namespace keel::ui { namespace { -ImFont* g_fonts[3] = {}; +ImFont* g_fonts[4] = {}; float g_scale = 1.0f; -ImFont* loadFont(const char* path, float size) { +ImFont* loadFont(const char* path, float size, const char* fallback = nullptr) { auto data = fs::read(path); if (!data) { log::warn("Font {} not found, using the built-in one", path); @@ -21,74 +27,285 @@ ImFont* loadFont(const char* path, float size) { } void* owned = IM_ALLOC(data->size()); // the atlas frees it std::memcpy(owned, data->data(), data->size()); - return ImGui::GetIO().Fonts->AddFontFromMemoryTTF(owned, int(data->size()), size); + ImFont* f = ImGui::GetIO().Fonts->AddFontFromMemoryTTF(owned, int(data->size()), size); + if (auto more = fallback ? fs::read(fallback) : std::nullopt) { // what the face hasn't got (arrows, symbols): from another + ImFontConfig cfg; + cfg.MergeMode = true; + void* o = IM_ALLOC(more->size()); + std::memcpy(o, more->data(), more->size()); + ImGui::GetIO().Fonts->AddFontFromMemoryTTF(o, int(more->size()), size, &cfg); + } + return f; } -void theme() { - ImGuiStyle& s = ImGui::GetStyle(); - s = ImGuiStyle(); - s.WindowRounding = 2; - s.FrameRounding = 1; - s.GrabRounding = 1; - s.TabRounding = 1; - s.ScrollbarRounding = 1; - s.WindowBorderSize = 1; - s.FrameBorderSize = 1; - s.WindowPadding = ImVec2(14, 12); - s.FramePadding = ImVec2(8, 5); - s.ItemSpacing = ImVec2(10, 8); - s.WindowTitleAlign = ImVec2(0.0f, 0.5f); - ImVec4* c = s.Colors; +// ── Colour: Niveus's derivation (tokens/color.css, themes/*.css), in OKLab ── +struct Lab { + float L, a, b, alpha = 1.0f; +}; +float toLinear(float c) { return c <= 0.04045f ? c / 12.92f : std::pow((c + 0.055f) / 1.055f, 2.4f); } +float toSrgb(float c) { return c <= 0.0031308f ? 12.92f * c : 1.055f * std::pow(c, 1.0f / 2.4f) - 0.055f; } +Lab lab(uint32_t rgb, float alpha = 1.0f) { + const float r = toLinear(float((rgb >> 16) & 255) / 255.0f), g = toLinear(float((rgb >> 8) & 255) / 255.0f), b = toLinear(float(rgb & 255) / 255.0f); + const float l = std::cbrt(0.4122214708f * r + 0.5363325363f * g + 0.0514459929f * b); + const float m = std::cbrt(0.2119034982f * r + 0.6806995451f * g + 0.1073969566f * b); + const float s = std::cbrt(0.0883024619f * r + 0.2817188376f * g + 0.6299787005f * b); + return {0.2104542553f * l + 0.7936177850f * m - 0.0040720468f * s, 1.9779984951f * l - 2.4285922050f * m + 0.4505937099f * s, + 0.0259040371f * l + 0.7827717662f * m - 0.8086757660f * s, alpha}; +} +ImVec4 rgba(const Lab& c) { + const float l = std::pow(c.L + 0.3963377774f * c.a + 0.2158037573f * c.b, 3.0f); + const float m = std::pow(c.L - 0.1055613458f * c.a - 0.0638541728f * c.b, 3.0f); + const float s = std::pow(c.L - 0.0894841775f * c.a - 1.2914855480f * c.b, 3.0f); + auto out = [](float v) { return std::clamp(toSrgb(std::max(v, 0.0f)), 0.0f, 1.0f); }; + return ImVec4(out(4.0767416621f * l - 3.3077115913f * m + 0.2309699292f * s), out(-1.2684380046f * l + 2.6097574011f * m - 0.3413193965f * s), + out(-0.0041960863f * l - 0.7034186147f * m + 1.7076147010f * s), c.alpha); +} +Lab mix(const Lab& x, const Lab& y, float t) { return {x.L + (y.L - x.L) * t, x.a + (y.a - x.a) * t, x.b + (y.b - x.b) * t, 1.0f}; } +float chroma(const Lab& c) { return std::hypot(c.a, c.b); } +// The same hue with lightness L and chroma C (oklch(from c L C h)). +Lab lch(const Lab& c, float L, float C, float alpha = 1.0f) { + const float k = chroma(c) > 1e-6f ? C / chroma(c) : 0.0f; + return {L, c.a * k, c.b * k, alpha}; +} +// A fill pushed out of the mid-tones until its label reads (--nv-contrast-*). +Lab fill(const Lab& c) { return lch(c, c.L < 0.7f ? std::min(c.L, 0.53f) : std::max(c.L, 0.78f), std::clamp(chroma(c), 0.02f, 0.25f)); } +Lab onFill(const Lab& f) { return lch(f, 0.14f + std::clamp((0.68f - f.L) * 100.0f, 0.0f, 1.0f) * 0.84f, chroma(f) * 0.2f); } + +uint32_t g_brand = 0xff7828; // Fry3DX's hot orange +Appearance g_appearance = Appearance::System; +bool g_dark = true, g_styled = false; +ImVec4 g_role[size_t(Role::Count)]; + +void derive(bool darkLook) { + const Lab brand = lab(g_brand); + auto tint = [&](uint32_t grey, float t = 0.04f) { return rgba(mix(lab(grey), brand, t)); }; auto rgb = [](int r, int g, int b, float a = 1.0f) { return ImVec4(r / 255.0f, g / 255.0f, b / 255.0f, a); }; - // Source 2013 GameUI's charcoal panels, grey frames and near-white text, with a red - // where Source has its orange. - const ImVec4 red = rgb(kAccent[0], kAccent[1], kAccent[2]), redLight = rgb(245, 70, 76), redDark = rgb(150, 24, 32); - c[ImGuiCol_Text] = rgb(235, 230, 220); - c[ImGuiCol_TextDisabled] = rgb(140, 136, 128); - c[ImGuiCol_WindowBg] = rgb(40, 40, 38, 0.94f); - c[ImGuiCol_ChildBg] = rgb(30, 30, 29, 0.6f); - c[ImGuiCol_PopupBg] = rgb(36, 36, 34, 0.98f); - c[ImGuiCol_Border] = rgb(90, 88, 82, 0.8f); - c[ImGuiCol_FrameBg] = rgb(28, 28, 27); - c[ImGuiCol_FrameBgHovered] = rgb(50, 49, 46); - c[ImGuiCol_FrameBgActive] = rgb(60, 58, 54); - c[ImGuiCol_TitleBg] = rgb(52, 51, 48); - c[ImGuiCol_TitleBgActive] = rgb(70, 30, 32); - c[ImGuiCol_Button] = rgb(70, 68, 63); - c[ImGuiCol_ButtonHovered] = rgb(95, 92, 84); - c[ImGuiCol_ButtonActive] = red; - c[ImGuiCol_Header] = rgb(70, 68, 63); - c[ImGuiCol_HeaderHovered] = rgb(95, 92, 84); - c[ImGuiCol_HeaderActive] = red; - c[ImGuiCol_Tab] = rgb(55, 54, 50); - c[ImGuiCol_TabHovered] = rgb(95, 92, 84); - c[ImGuiCol_TabSelected] = redDark; - c[ImGuiCol_TabSelectedOverline] = red; - c[ImGuiCol_SliderGrab] = red; - c[ImGuiCol_SliderGrabActive] = redLight; - c[ImGuiCol_CheckMark] = redLight; - c[ImGuiCol_TextSelectedBg] = rgb(kAccent[0], kAccent[1], kAccent[2], 0.45f); - c[ImGuiCol_NavCursor] = red; - c[ImGuiCol_Separator] = rgb(90, 88, 82, 0.6f); - c[ImGuiCol_ScrollbarBg] = rgb(28, 28, 27, 0.6f); - c[ImGuiCol_ScrollbarGrab] = rgb(80, 78, 72); + auto set = [](Role r, ImVec4 v) { g_role[size_t(r)] = v; }; + const Lab accent = fill(brand); + const Lab success = fill(mix(lab(0x189a60), brand, 0.12f)), warning = fill(mix(lab(0xeda520), brand, 0.12f)), danger = fill(mix(lab(0xe2334a), brand, 0.12f)); + set(Role::OnAccent, rgba(onFill(accent))); + set(Role::OnDanger, rgba(onFill(danger))); + set(Role::Success, rgba(success)), set(Role::Warning, rgba(warning)), set(Role::Danger, rgba(danger)); + if (darkLook) { + set(Role::Background, tint(0x121214)), set(Role::BackgroundSubtle, tint(0x18181b)), set(Role::Surface, tint(0x1f1f22)); + set(Role::SurfaceElevated, tint(0x2a2a2e)), set(Role::SurfaceInset, tint(0x111113)), set(Role::SurfaceHover, tint(0x313136)); + set(Role::SurfaceActive, tint(0x39393f)), set(Role::Scrim, rgb(6, 6, 8, 0.62f)); + set(Role::Text, rgb(0xec, 0xeb, 0xe8)), set(Role::TextSecondary, tint(0xa9a8a3, 0.08f)), set(Role::TextTertiary, tint(0x7d7c77, 0.08f)); + set(Role::TextDisabled, rgb(0x58, 0x58, 0x5c)); + set(Role::BorderSubtle, rgb(255, 255, 255, 0.06f)), set(Role::Border, rgb(255, 255, 255, 0.1f)), set(Role::BorderStrong, rgb(255, 255, 255, 0.2f)); + set(Role::Accent, rgba(accent)), set(Role::AccentHover, rgba(lch(accent, accent.L + 0.05f, chroma(accent)))); + set(Role::AccentActive, rgba(lch(accent, accent.L + 0.09f, chroma(accent)))); + set(Role::AccentSubtle, rgba({accent.L, accent.a, accent.b, 0.2f})), set(Role::AccentSubtleHover, rgba({accent.L, accent.a, accent.b, 0.28f})); + set(Role::AccentText, rgba(lch(accent, std::clamp(accent.L + 0.2f, 0.74f, 0.9f), chroma(accent) * 0.9f))); + auto text = [](const Lab& c) { return rgba(lch(c, std::clamp(c.L + 0.2f, 0.76f, 0.9f), chroma(c) * 0.9f)); }; + set(Role::SuccessText, text(success)), set(Role::WarningText, text(warning)), set(Role::DangerText, text(danger)); + set(Role::Highlight, rgb(255, 255, 255, 0.11f)), set(Role::Lowlight, rgb(0, 0, 0, 0.42f)), set(Role::Outline, rgb(0, 0, 0, 0.72f)); + set(Role::Shadow, rgb(0, 0, 0, 0.5f)), set(Role::ShadowInset, rgb(0, 0, 0, 0.65f)); + set(Role::SheenTop, rgb(255, 255, 255, 0.06f)), set(Role::SheenBottom, rgb(0, 0, 0, 0.09f)); + set(Role::SheenStrongTop, rgb(255, 255, 255, 0.2f)), set(Role::SheenStrongBottom, rgb(0, 0, 0, 0.12f)); + } else { + set(Role::Background, tint(0xe8e5de)), set(Role::BackgroundSubtle, tint(0xeeece6)), set(Role::Surface, rgb(0xfb, 0xfb, 0xfa)); + set(Role::SurfaceElevated, rgb(0xf8, 0xf8, 0xf6)), set(Role::SurfaceInset, tint(0xe3e2dd)), set(Role::SurfaceHover, tint(0xf1f0ec)); + set(Role::SurfaceActive, tint(0xe6e5e0)), set(Role::Scrim, rgb(28, 24, 18, 0.34f)); + set(Role::Text, rgb(0x1d, 0x1d, 0x20)), set(Role::TextSecondary, tint(0x63625d, 0.08f)), set(Role::TextTertiary, tint(0x87867f, 0.08f)); + set(Role::TextDisabled, rgb(0xae, 0xad, 0xa7)); + set(Role::BorderSubtle, rgb(28, 24, 18, 0.07f)), set(Role::Border, rgb(28, 24, 18, 0.13f)), set(Role::BorderStrong, rgb(28, 24, 18, 0.22f)); + set(Role::Accent, rgba(accent)), set(Role::AccentHover, rgba(lch(accent, accent.L - 0.045f, chroma(accent)))); + set(Role::AccentActive, rgba(lch(accent, accent.L - 0.09f, chroma(accent)))); + set(Role::AccentSubtle, rgba(lch(accent, 0.965f, chroma(accent) * 0.16f))), set(Role::AccentSubtleHover, rgba(lch(accent, 0.93f, chroma(accent) * 0.22f))); + set(Role::AccentText, rgba(lch(accent, std::clamp(accent.L - 0.12f, 0.3f, 0.5f), chroma(accent)))); + auto text = [](const Lab& c) { return rgba(lch(c, std::clamp(c.L - 0.1f, 0.3f, 0.48f), chroma(c))); }; + set(Role::SuccessText, text(success)), set(Role::WarningText, text(warning)), set(Role::DangerText, text(danger)); + set(Role::Highlight, rgb(255, 255, 255, 0.9f)), set(Role::Lowlight, rgb(40, 32, 20, 0.07f)), set(Role::Outline, rgb(40, 32, 20, 0.05f)); + set(Role::Shadow, rgb(40, 32, 20, 0.12f)), set(Role::ShadowInset, rgb(40, 32, 20, 0.17f)); + set(Role::SheenTop, rgb(255, 255, 255, 0.75f)), set(Role::SheenBottom, rgb(40, 32, 20, 0.04f)); + set(Role::SheenStrongTop, rgb(255, 255, 255, 0.24f)), set(Role::SheenStrongBottom, rgb(20, 16, 10, 0.1f)); + } +} +ImVec4 role(Role r) { return g_role[size_t(r)]; } +ImVec4 withAlpha(ImVec4 c, float a) { return c.w = a, c; } + +void theme() { + derive(g_dark); + ImGuiStyle& s = ImGui::GetStyle(); + const float fontScale = s.FontScaleMain, fontDpi = s.FontScaleDpi; + s = ImGuiStyle(); + s.FontScaleMain = fontScale, s.FontScaleDpi = fontDpi; + // Niveus's radii and 4px rhythm. Frames have no border of ImGui's: their edges are the + // keys' and wells' own (drawn by frameHook). + s.WindowRounding = 8, s.ChildRounding = 6, s.PopupRounding = 8, s.FrameRounding = 6, s.GrabRounding = 5, s.TabRounding = 6; + s.ScrollbarRounding = 8, s.ScrollbarSize = 11, s.GrabMinSize = 12; + s.WindowBorderSize = 1, s.PopupBorderSize = 1, s.FrameBorderSize = 0, s.TabBorderSize = 0, s.DockingSeparatorSize = 2; + s.WindowPadding = ImVec2(10, 10), s.FramePadding = ImVec2(8, 5), s.ItemSpacing = ImVec2(8, 6), s.ItemInnerSpacing = ImVec2(6, 4); + s.SeparatorTextBorderSize = 1, s.SeparatorTextPadding = ImVec2(10, 3); + s.WindowTitleAlign = ImVec2(0.0f, 0.5f); + s.WindowMenuButtonPosition = ImGuiDir_None; + ImVec4* c = s.Colors; + c[ImGuiCol_Text] = role(Role::Text); + c[ImGuiCol_TextDisabled] = role(Role::TextTertiary); + c[ImGuiCol_WindowBg] = role(Role::Surface); + c[ImGuiCol_ChildBg] = ImVec4(0, 0, 0, 0); + c[ImGuiCol_PopupBg] = role(Role::SurfaceElevated); + c[ImGuiCol_Border] = role(Role::Border); + c[ImGuiCol_BorderShadow] = ImVec4(0, 0, 0, 0); + c[ImGuiCol_FrameBg] = role(Role::SurfaceInset); + c[ImGuiCol_FrameBgHovered] = g_dark ? role(Role::Background) : role(Role::SurfaceActive); + c[ImGuiCol_FrameBgActive] = c[ImGuiCol_FrameBgHovered]; + c[ImGuiCol_TitleBg] = c[ImGuiCol_TitleBgActive] = c[ImGuiCol_TitleBgCollapsed] = role(Role::BackgroundSubtle); + c[ImGuiCol_MenuBarBg] = role(Role::BackgroundSubtle); + c[ImGuiCol_ScrollbarBg] = ImVec4(0, 0, 0, 0); + c[ImGuiCol_ScrollbarGrab] = role(Role::BorderStrong); + c[ImGuiCol_ScrollbarGrabHovered] = role(Role::TextTertiary); + c[ImGuiCol_ScrollbarGrabActive] = role(Role::TextSecondary); + c[ImGuiCol_CheckMark] = role(Role::Accent); + c[ImGuiCol_SliderGrab] = role(Role::Accent); + c[ImGuiCol_SliderGrabActive] = role(Role::AccentHover); + c[ImGuiCol_Button] = role(Role::SurfaceElevated); + c[ImGuiCol_ButtonHovered] = role(Role::SurfaceHover); + c[ImGuiCol_ButtonActive] = role(Role::SurfaceActive); + c[ImGuiCol_Header] = role(Role::AccentSubtle); + c[ImGuiCol_HeaderHovered] = role(Role::SurfaceHover); + c[ImGuiCol_HeaderActive] = role(Role::AccentSubtleHover); + c[ImGuiCol_Separator] = role(Role::BorderSubtle); + c[ImGuiCol_SeparatorHovered] = c[ImGuiCol_SeparatorActive] = role(Role::Accent); + c[ImGuiCol_ResizeGrip] = ImVec4(0, 0, 0, 0); + c[ImGuiCol_ResizeGripHovered] = c[ImGuiCol_ResizeGripActive] = role(Role::AccentSubtleHover); + c[ImGuiCol_InputTextCursor] = role(Role::Accent); + c[ImGuiCol_Tab] = c[ImGuiCol_TabDimmed] = role(Role::BackgroundSubtle); + c[ImGuiCol_TabHovered] = role(Role::SurfaceHover); + c[ImGuiCol_TabSelected] = c[ImGuiCol_TabDimmedSelected] = role(Role::Surface); + c[ImGuiCol_TabSelectedOverline] = role(Role::Accent); + c[ImGuiCol_TabDimmedSelectedOverline] = ImVec4(0, 0, 0, 0); + c[ImGuiCol_DockingPreview] = withAlpha(role(Role::Accent), 0.4f); + c[ImGuiCol_DockingEmptyBg] = role(Role::Background); + c[ImGuiCol_PlotLines] = c[ImGuiCol_PlotHistogram] = role(Role::Accent); + c[ImGuiCol_PlotLinesHovered] = c[ImGuiCol_PlotHistogramHovered] = role(Role::AccentHover); + c[ImGuiCol_TableHeaderBg] = role(Role::BackgroundSubtle); + c[ImGuiCol_TableBorderStrong] = role(Role::Border); + c[ImGuiCol_TableBorderLight] = role(Role::BorderSubtle); + c[ImGuiCol_TableRowBg] = ImVec4(0, 0, 0, 0); + c[ImGuiCol_TableRowBgAlt] = withAlpha(role(Role::Text), 0.03f); + c[ImGuiCol_TextLink] = role(Role::AccentText); + c[ImGuiCol_TextSelectedBg] = withAlpha(role(Role::Accent), 0.3f); + c[ImGuiCol_TreeLines] = role(Role::BorderSubtle); + c[ImGuiCol_DragDropTarget] = role(Role::Accent); + c[ImGuiCol_NavCursor] = withAlpha(role(Role::Accent), 0.6f); + c[ImGuiCol_NavWindowingHighlight] = role(Role::Accent); + c[ImGuiCol_NavWindowingDimBg] = c[ImGuiCol_ModalWindowDimBg] = withAlpha(role(Role::Scrim), role(Role::Scrim).w * 0.5f); // (an editor: the work stays readable behind) +} + +ImU32 u32(ImVec4 c) { return ImGui::ColorConvertFloat4ToU32(c); } +ImVec4 over(ImVec4 base, ImVec4 top) { // `top` laid over `base` + const float a = top.w; + return ImVec4(base.x + (top.x - base.x) * a, base.y + (top.y - base.y) * a, base.z + (top.z - base.z) * a, base.w); +} +bool saturated(ImVec4 c) { return std::max({c.x, c.y, c.z}) - std::min({c.x, c.y, c.z}) > 0.3f; } + +// A key with `fillCol` as its face: contact shadow, the face with light falling down it, a lit top +// edge and a shaded bottom one; pressed, it sinks: flat, with the shade inside along its top. +void key(ImDrawList* dl, ImVec2 a, ImVec2 b, float r, ImVec4 face, bool pressed) { + const bool filled = saturated(face); + if (pressed) { + dl->AddRectFilled(a, b, u32(face), r); + dl->AddRect(a, b, u32(role(Role::Border)), r); + dl->PushClipRect(a, b, true); + dl->AddRect(ImVec2(a.x, a.y), ImVec2(b.x, b.y + 4), u32(withAlpha(role(Role::ShadowInset), role(Role::ShadowInset).w * 0.6f)), r, 0, 2.0f); + dl->PopClipRect(); + return; + } + dl->AddRectFilled(ImVec2(a.x, a.y + 1), ImVec2(b.x, b.y + 2), u32(withAlpha(role(Role::Shadow), role(Role::Shadow).w * 0.7f)), r); // its shadow + if (g_dark) dl->AddRect(ImVec2(a.x - 0.5f, a.y - 0.5f), ImVec2(b.x + 0.5f, b.y + 0.5f), u32(role(Role::Outline)), r + 0.5f); // the contact line + const ImVec4 top = over(face, role(filled ? Role::SheenStrongTop : Role::SheenTop)), bottom = over(face, role(filled ? Role::SheenStrongBottom : Role::SheenBottom)); + const int v0 = dl->VtxBuffer.Size; + dl->AddRectFilled(a, b, u32(face), r); + ImGui::ShadeVertsLinearColorGradientKeepAlpha(dl, v0, dl->VtxBuffer.Size, a, ImVec2(a.x, b.y), u32(top), u32(bottom)); + if (!filled) dl->AddRect(a, b, u32(role(Role::Border)), r); + const float in = std::min(r * 0.7f, (b.x - a.x) * 0.3f); + dl->AddLine(ImVec2(a.x + in, a.y + 1.0f), ImVec2(b.x - in, a.y + 1.0f), u32(filled ? withAlpha(role(Role::Highlight), 0.35f) : role(Role::Highlight))); + dl->AddLine(ImVec2(a.x + in, b.y - 1.0f), ImVec2(b.x - in, b.y - 1.0f), u32(role(Role::Lowlight))); +} + +// ImGui's RenderFrame (patched in, see cmake/Dependencies.cmake): buttons become keys and fields wells. +bool frameHook(ImDrawList* dl, ImVec2 a, ImVec2 b, ImU32 col, bool, float r) { + if (!g_styled) return false; + const ImU32 normal = ImGui::GetColorU32(ImGuiCol_Button), hovered = ImGui::GetColorU32(ImGuiCol_ButtonHovered), held = ImGui::GetColorU32(ImGuiCol_ButtonActive); + if (col == normal || col == hovered || col == held) { + key(dl, a, b, r, ImGui::ColorConvertU32ToFloat4(col), col == held && held != normal); + return true; + } + if (col == ImGui::GetColorU32(ImGuiCol_FrameBg) || col == ImGui::GetColorU32(ImGuiCol_FrameBgHovered) || col == ImGui::GetColorU32(ImGuiCol_FrameBgActive)) { + drawWell(dl, a, b, r, col != ImGui::GetColorU32(ImGuiCol_FrameBg)); + return true; + } + return false; +} + +Appearance fromSystem() { return SDL_GetSystemTheme() == SDL_SYSTEM_THEME_LIGHT ? Appearance::Light : Appearance::Dark; } +void restyle() { + g_dark = (g_appearance == Appearance::System ? fromSystem() : g_appearance) != Appearance::Light; + theme(); + g_styled = true; } } // namespace void init() { ImGuiIO& io = ImGui::GetIO(); - g_fonts[0] = loadFont("fonts/DejaVuSans.ttf", 16.0f); - g_fonts[1] = loadFont("fonts/DejaVuSans-Bold.ttf", 16.0f); - g_fonts[2] = loadFont("fonts/DejaVuSans-Bold.ttf", 48.0f); + g_fonts[0] = loadFont("fonts/InstrumentSans-Regular.ttf", 16.0f, "fonts/DejaVuSans.ttf"); + g_fonts[1] = loadFont("fonts/InstrumentSans-SemiBold.ttf", 16.0f, "fonts/DejaVuSans-Bold.ttf"); + g_fonts[2] = loadFont("fonts/InstrumentSans-Bold.ttf", 48.0f); + g_fonts[3] = loadFont("fonts/JetBrainsMono-Regular.ttf", 15.0f, "fonts/DejaVuSans.ttf"); + if (!g_fonts[0]) g_fonts[0] = loadFont("fonts/DejaVuSans.ttf", 16.0f); // (an older content folder) if (g_fonts[0]) io.FontDefault = g_fonts[0]; - theme(); + GImRenderFrameHook = frameHook; + restyle(); +} + +void setAppearance(Appearance a) { + g_appearance = a; + restyle(); +} +Appearance appearance() { return g_appearance; } +bool dark() { return g_dark; } +void setBrand(uint8_t r, uint8_t g, uint8_t b) { + g_brand = uint32_t(r) << 16 | uint32_t(g) << 8 | b; + restyle(); +} + +uint32_t color(Role r, float alpha) { + ImVec4 c = role(r); + c.w *= alpha; + return u32(c); } uint32_t accent(float alpha, float brightness) { - return ImGui::ColorConvertFloat4ToU32(ImVec4(std::min(kAccent[0] / 255.0f * brightness, 1.0f), std::min(kAccent[1] / 255.0f * brightness, 1.0f), - std::min(kAccent[2] / 255.0f * brightness, 1.0f), alpha)); + const ImVec4 c = role(Role::Accent); + return u32(ImVec4(std::min(c.x * brightness, 1.0f), std::min(c.y * brightness, 1.0f), std::min(c.z * brightness, 1.0f), alpha)); } +void drawKey(ImDrawList* dl, const ImVec2& a, const ImVec2& b, float rounding, KeyState state) { + switch (state) { + case KeyState::Normal: return key(dl, a, b, rounding, role(Role::SurfaceElevated), false); + case KeyState::Hovered: return key(dl, a, b, rounding, role(Role::SurfaceHover), false); + case KeyState::Pressed: return key(dl, a, b, rounding, role(Role::SurfaceActive), true); + case KeyState::On: return key(dl, a, b, rounding, role(Role::Accent), false); + } +} + +void drawWell(ImDrawList* dl, const ImVec2& a, const ImVec2& b, float r, bool hovered) { + dl->AddRectFilled(a, b, ImGui::GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), r); + // Shade inside along the top (the light's blocked by the rim), light along the bottom lip. + dl->PushClipRect(a, b, true); + const ImVec4 sh = role(Role::ShadowInset); + dl->AddRect(a, ImVec2(b.x, b.y + 6), u32(withAlpha(sh, sh.w * 0.55f)), r, 0, 1.5f); + dl->AddRect(ImVec2(a.x, a.y + 1), ImVec2(b.x, b.y + 6), u32(withAlpha(sh, sh.w * 0.2f)), r, 0, 1.5f); + dl->PopClipRect(); + dl->AddRect(a, b, u32(role(Role::BorderSubtle)), r); + const float in = std::min(r, (b.x - a.x) * 0.3f); + dl->AddLine(ImVec2(a.x + in, b.y + 0.5f), ImVec2(b.x - in, b.y + 0.5f), u32(withAlpha(role(Role::Highlight), role(Role::Highlight).w * 0.6f))); +} + +uint32_t keyText(KeyState state) { return u32(role(state == KeyState::On ? Role::OnAccent : Role::Text)); } + ImFont* font(Font f) { ImFont* r = g_fonts[int(f)]; return r ? r : ImGui::GetFont(); @@ -122,6 +339,7 @@ void applyPixelScale() { void beginFrame(float windowHeight) { g_scale = std::clamp(windowHeight / 1080.0f, 0.75f, 2.5f); ImGui::GetStyle().FontScaleMain = g_scale; + if (g_appearance == Appearance::System && g_styled && (fromSystem() != Appearance::Light) != g_dark) restyle(); // (the desktop changed) } namespace { @@ -162,7 +380,7 @@ void drawPopups() { // focus cancels the press, so OK would never click. const bool refocus = !ImGui::IsAnyMouseDown(); if (refocus) ImGui::SetNextWindowFocus(); - ImGui::PushStyleColor(ImGuiCol_WindowBg, IM_COL32(0, 0, 0, 120)); + ImGui::PushStyleColor(ImGuiCol_WindowBg, color(Role::Scrim)); ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); ImGui::Begin("##popupdim", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoMove); ImGui::End(); diff --git a/engine/ui/ui.h b/engine/ui/ui.h index 3130928..e2e2f47 100644 --- a/engine/ui/ui.h +++ b/engine/ui/ui.h @@ -1,16 +1,19 @@ #pragma once -// Game UI look: fonts from the game folder and a Source-like theme (dark -// translucent panels, flat buttons, light text, red highlights) on top of Dear ImGui. +// The UI's look: Niveus (github.com/Nexoniarz/niveus) on top of Dear ImGui. Buttons are keys, +// bevelled with light falling across them; fields are wells cut into the surface; warm +// graphite in dark, soft paper in light, and one brand colour that every accent is made from. #include #include #include #include struct ImFont; +struct ImDrawList; +struct ImVec2; namespace keel::ui { -enum class Font { Regular, Bold, Title }; +enum class Font { Regular, Bold, Title, Mono }; // After the renderer (ImGui context) and the VFS are up. void init(); @@ -25,10 +28,38 @@ float pixelScale(); // The backends call this between the platform's NewFrame and ImGui::NewFrame. void applyPixelScale(); -// The highlight colour: highlights, the logo. -inline constexpr uint8_t kAccent[3] = {227, 34, 45}; +// ── Appearance ── +enum class Appearance { System, Dark, Light }; +void setAppearance(Appearance a); // System: follows the desktop's (and changes with it) +Appearance appearance(); +bool dark(); // what's showing now +// The brand colour (sRGB): the accent and its states, the text on it and the tint in the greys +// are all made from it, in both appearances. +void setBrand(uint8_t r, uint8_t g, uint8_t b); + +// Niveus's semantic roles. +enum class Role { + Background, BackgroundSubtle, Surface, SurfaceElevated, SurfaceInset, SurfaceHover, SurfaceActive, Scrim, + Text, TextSecondary, TextTertiary, TextDisabled, + BorderSubtle, Border, BorderStrong, + Accent, AccentHover, AccentActive, AccentSubtle, AccentSubtleHover, AccentText, OnAccent, + Success, SuccessText, Warning, WarningText, Danger, DangerText, OnDanger, + Highlight, Lowlight, Outline, Shadow, ShadowInset, SheenTop, SheenBottom, SheenStrongTop, SheenStrongBottom, + Count +}; +uint32_t color(Role r, float alpha = 1.0f); // ImU32 +// The accent (alpha, and brighter or darker by `brightness`). uint32_t accent(float alpha = 1.0f, float brightness = 1.0f); // ImU32 +// The materials, for widgets drawn by hand. +enum class KeyState { Normal, Hovered, Pressed, On }; +// A raised key; `on` keys are filled with the accent. +void drawKey(ImDrawList* dl, const ImVec2& a, const ImVec2& b, float rounding, KeyState state); +// A well cut into the surface (fields, tracks). +void drawWell(ImDrawList* dl, const ImVec2& a, const ImVec2& b, float rounding, bool hovered = false); +// The text/icon colour that goes on a key in that state. +uint32_t keyText(KeyState state); + // ── Popups: modal messages over everything (disconnects, errors, questions) ── struct PopupButton { std::string label; diff --git a/src/app.cpp b/src/app.cpp index 2d4b924..4ccf238 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -206,7 +206,18 @@ glm::vec3 fromFrame(const Axes& a, const glm::vec3& c) { return a[0] * c.x + a[1 const ImU32 kAxisCol[3] = {IM_COL32(235, 70, 70, 255), IM_COL32(110, 210, 80, 255), IM_COL32(70, 130, 245, 255)}; const ImU32 kHot = IM_COL32(255, 225, 90, 255); constexpr ImU32 kAccent = IM_COL32(255, 120, 40, 255); -const ImVec4 kAccentText(1.0f, 0.6f, 0.3f, 1.0f); +// The UI's colours: Niveus's roles, in the appearance that's showing (keel/ui). +ImVec4 roleColor(keel::ui::Role r) { return ImGui::ColorConvertU32ToFloat4(keel::ui::color(r)); } +ImVec4 accentText() { return roleColor(keel::ui::Role::AccentText); } +// The one button that does it, filled with the accent (until popAccent). +void pushAccent() { + using keel::ui::Role; + ImGui::PushStyleColor(ImGuiCol_Button, roleColor(Role::Accent)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, roleColor(Role::AccentHover)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, roleColor(Role::AccentActive)); + ImGui::PushStyleColor(ImGuiCol_Text, roleColor(Role::OnAccent)); +} +void popAccent() { ImGui::PopStyleColor(4); } // An object as it'll be printed: where it stands, with its finish, checked (kept until it changes). struct PrintInfo { @@ -229,6 +240,7 @@ keel::Cvar fry_touch("fry_touch", "0", keel::CVAR_ARCHIVE, "Fry3DX: the phone la #endif keel::Cvar fry_uiscale("fry_uiscale", "0", 0, "Fry3DX: draw the UI this many times bigger (0: by the screen)"); keel::Cvar fry_uisize("fry_uisize", "1", keel::CVAR_ARCHIVE, "Fry3DX: the phone layout's size, times"); +keel::Cvar fry_theme("fry_theme", "0", keel::CVAR_ARCHIVE, "Fry3DX: how it looks: 0 like the desktop, 1 dark, 2 light"); keel::Cvar fry_autosave("fry_autosave", "2", keel::CVAR_ARCHIVE, "Fry3DX: autosave every this many minutes while there are changes (0: off)"); class App : public keel::Game { @@ -752,6 +764,7 @@ private: bool logoTried_ = false, haveLogo_ = false; // ── UI ── + int appliedTheme_ = -1; bool styled_ = false, layoutDone_ = false, showHelp_ = false, showAbout_ = false; std::string iniPath_, message_; double messageAt_ = -100.0; @@ -1062,9 +1075,9 @@ private: ImGui::Spacing(); const float bw = 150.0f; const int action = askSave_; - ImGui::PushStyleColor(ImGuiCol_Button, kAccent); + pushAccent(); const bool save = ImGui::Button("Save", ImVec2(bw, 0)) || ImGui::IsKeyPressed(ImGuiKey_Enter) || ImGui::IsKeyPressed(ImGuiKey_KeypadEnter); - ImGui::PopStyleColor(); + popAccent(); ImGui::SameLine(); const bool drop = ImGui::Button(action == 1 ? "Don't save, close" : "Don't save", ImVec2(bw, 0)); ImGui::SameLine(); @@ -2466,7 +2479,7 @@ private: void layoutProperties(float w) { Object* o = selected_.empty() ? nullptr : find(active_); if (!o) return void(ImGui::TextWrapped("Click an object: its picture's layout shows in the Picture panel.")); - ImGui::TextColored(kAccentText, "%s", o->name.c_str()); + ImGui::TextColored(accentText(), "%s", o->name.c_str()); if (!o->picture || !o->uvsFit()) { if (ImGui::Button("Lay it out", ImVec2(w, 0))) readyToPaint(o->id); return; @@ -2683,8 +2696,8 @@ private: } } void printProperties(float w) { - auto good = [](const char* t) { ImGui::TextColored(ImVec4(0.45f, 0.85f, 0.4f, 1), "%s", t); }; - auto bad = [](const std::string& t) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.45f, 0.3f, 1)), ImGui::TextWrapped("%s", t.c_str()), ImGui::PopStyleColor(); }; + auto good = [](const char* t) { ImGui::TextColored(roleColor(keel::ui::Role::SuccessText), "%s", t); }; + auto bad = [](const std::string& t) { ImGui::PushStyleColor(ImGuiCol_Text, roleColor(keel::ui::Role::DangerText)), ImGui::TextWrapped("%s", t.c_str()), ImGui::PopStyleColor(); }; ImGui::SeparatorText("Printer"); int printer = std::clamp(fry_printer.i(), 0, int(std::size(kPrinters)) - 1); ImGui::SetNextItemWidth(w); @@ -2965,7 +2978,7 @@ private: } if (ImGui::IsItemDeactivated()) renamingFolder_ = 0; } else { - ImGui::PushStyleColor(ImGuiCol_Text, kAccentText); + ImGui::PushStyleColor(ImGuiCol_Text, accentText()); const std::string label = std::format("{} ({})", f->name, inside.size()); if (ImGui::Selectable(label.c_str(), picked, ImGuiSelectableFlags_AllowDoubleClick)) { // a folder is a group: all of it picked if (mode_ == Mode::Edit) leaveEdit(); @@ -3179,9 +3192,9 @@ private: } ImGui::Checkbox("Joined into one object", &c.joined); ImGui::Spacing(); - ImGui::PushStyleColor(ImGuiCol_Button, kAccent); + pushAccent(); if (ImGui::Button("Make them", ImVec2(w, 0))) makeCopies(), showCopies_ = false; - ImGui::PopStyleColor(); + popAccent(); ImGui::End(); } void thickenActive() { @@ -3206,9 +3219,9 @@ private: ImGui::SetNextItemWidth(w); if (ImGui::Combo("##dir", &out, "Inwards (a closed shape: hollow)\0Outwards\0")) thicknessOut_ = out == 1; ImGui::TextWrapped("A flat or open surface gets a back and edges: a solid you can print. A closed shape becomes hollow, walls this thick (to save material or make a box)."); - ImGui::PushStyleColor(ImGuiCol_Button, kAccent); + pushAccent(); if (ImGui::Button("Make it thick", ImVec2(w, 0))) thickenActive(), showThicken_ = false; - ImGui::PopStyleColor(); + popAccent(); ImGui::End(); } void cleanFlatFaces() { @@ -3293,7 +3306,7 @@ private: ImGui::SetNextWindowBgAlpha(0.8f); ImGui::Begin("##touchbar", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoDocking); - if (now() - messageAt_ < 4.0) ImGui::PushTextWrapPos(maxW), ImGui::TextColored(kAccentText, "%s", message_.c_str()), ImGui::PopTextWrapPos(); + if (now() - messageAt_ < 4.0) ImGui::PushTextWrapPos(maxW), ImGui::TextColored(accentText(), "%s", message_.c_str()), ImGui::PopTextWrapPos(); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(12, 8)); const ImGuiStyle& st = ImGui::GetStyle(); float x = 0; // (where the row's got to) @@ -3302,9 +3315,9 @@ private: if (x > 0 && x + st.ItemSpacing.x + w <= maxW) ImGui::SameLine(), x += st.ItemSpacing.x; else x = 0; x += w; - if (on) ImGui::PushStyleColor(ImGuiCol_Button, kAccent); + if (on) pushAccent(); const bool pressed = ImGui::Button(label); - if (on) ImGui::PopStyleColor(); + if (on) popAccent(); if (tip && ImGui::IsItemHovered()) ImGui::SetTooltip("%s", tip); return pressed; }; @@ -4872,38 +4885,10 @@ private: ImGui::GetIO().IniFilename = iniPath_.c_str(); if (stdfs::exists(iniPath_)) ImGui::LoadIniSettingsFromDisk(iniPath_.c_str()); } + if (fry_theme.i() != appliedTheme_) appliedTheme_ = fry_theme.i(), keel::ui::setAppearance(keel::ui::Appearance(std::clamp(appliedTheme_, 0, 2))); if (styled_) return; styled_ = true; - ImGuiStyle& st = ImGui::GetStyle(); - st.FramePadding = ImVec2(7, 5), st.ItemSpacing = ImVec2(7, 6), st.WindowPadding = ImVec2(9, 9); - st.WindowRounding = 5, st.FrameRounding = 4, st.TabRounding = 4, st.GrabRounding = 4, st.ScrollbarSize = 12; - st.FontScaleDpi = 0.9f; - ImVec4* c = st.Colors; // dark, with Fry3DX's hot orange - const ImVec4 orange(1.0f, 0.47f, 0.16f, 1.0f), dim(0.75f, 0.33f, 0.1f, 1.0f); - c[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.11f, 0.12f, 0.97f); - c[ImGuiCol_ChildBg] = ImVec4(0, 0, 0, 0); - c[ImGuiCol_PopupBg] = ImVec4(0.12f, 0.12f, 0.13f, 0.98f); - c[ImGuiCol_MenuBarBg] = ImVec4(0.09f, 0.09f, 0.1f, 1.0f); - c[ImGuiCol_TitleBg] = c[ImGuiCol_TitleBgActive] = c[ImGuiCol_TitleBgCollapsed] = ImVec4(0.09f, 0.09f, 0.1f, 1.0f); - c[ImGuiCol_FrameBg] = ImVec4(0.18f, 0.18f, 0.2f, 1.0f); - c[ImGuiCol_FrameBgHovered] = ImVec4(0.24f, 0.24f, 0.27f, 1.0f); - c[ImGuiCol_FrameBgActive] = ImVec4(0.28f, 0.28f, 0.31f, 1.0f); - c[ImGuiCol_Button] = ImVec4(0.2f, 0.2f, 0.22f, 1.0f); - c[ImGuiCol_ButtonHovered] = ImVec4(0.3f, 0.3f, 0.33f, 1.0f); - c[ImGuiCol_ButtonActive] = dim; - c[ImGuiCol_Header] = ImVec4(0.22f, 0.22f, 0.25f, 1.0f); - c[ImGuiCol_HeaderHovered] = ImVec4(0.3f, 0.3f, 0.33f, 1.0f); - c[ImGuiCol_HeaderActive] = dim; - c[ImGuiCol_CheckMark] = c[ImGuiCol_SliderGrabActive] = orange; - c[ImGuiCol_SliderGrab] = dim; - c[ImGuiCol_Tab] = ImVec4(0.14f, 0.14f, 0.15f, 1.0f); - c[ImGuiCol_TabHovered] = ImVec4(0.3f, 0.3f, 0.33f, 1.0f); - c[ImGuiCol_TabSelected] = ImVec4(0.2f, 0.2f, 0.22f, 1.0f); - c[ImGuiCol_TabSelectedOverline] = orange; - c[ImGuiCol_TabDimmedSelected] = ImVec4(0.17f, 0.17f, 0.19f, 1.0f); - c[ImGuiCol_SeparatorHovered] = c[ImGuiCol_SeparatorActive] = c[ImGuiCol_ResizeGripActive] = orange; - c[ImGuiCol_DockingPreview] = ImVec4(1.0f, 0.47f, 0.16f, 0.5f); - c[ImGuiCol_TextSelectedBg] = ImVec4(1.0f, 0.47f, 0.16f, 0.35f); + ImGui::GetStyle().FontScaleDpi = 0.92f; // (the look itself: keel/ui, Niveus) } void defaultLayout(ImGuiID dock) { @@ -5046,6 +5031,12 @@ private: ImGui::MenuItem("X-ray (see and pick through)", "Alt+Z", &xray_); ImGui::MenuItem("Grid", nullptr, &showGrid_); ImGui::MenuItem("Ground (in Rendered)", nullptr, &scene_.look.ground); + if (ImGui::BeginMenu("Appearance")) { + const char* looks[] = {"Like the desktop", "Dark", "Light"}; + for (int i = 0; i < 3; ++i) + if (ImGui::MenuItem(looks[i], nullptr, fry_theme.i() == i)) keel::execute(std::format("fry_theme {}", i)); + ImGui::EndMenu(); + } ImGui::Separator(); if (ImGui::MenuItem("Perspective", "Numpad 5", view_ == View::Perspective)) leaveFlatView(); if (ImGui::MenuItem("Front", "Numpad 1", view_ == View::Front)) setView(View::Front); @@ -5072,7 +5063,7 @@ private: ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 1); logoImage(h); } - ImGui::TextColored(ImVec4(1.0f, 0.47f, 0.16f, 1.0f), "Fry3DX"); + ImGui::PushFont(keel::ui::font(keel::ui::Font::Bold), 0.0f), ImGui::TextColored(accentText(), "Fry3DX"), ImGui::PopFont(); if (!touch()) menus(); else if (ImGui::BeginMenu("Menu")) { // (a phone: one menu, the others inside it) menus(); @@ -5115,14 +5106,21 @@ private: if (ImGui::MenuItem("Reference picture...")) dialog(4); } - // A square button with a picture on it (orange when it's the one in use). + // How the last item's key looks: filled when it's the one in use, sunk while held. + static keel::ui::KeyState keyState(bool on) { + using keel::ui::KeyState; + return on ? KeyState::On : ImGui::IsItemActive() ? KeyState::Pressed : ImGui::IsItemHovered() ? KeyState::Hovered : KeyState::Normal; + } + // A square button with a picture on it (the accent when it's the one in use). bool iconButton(const char* id, Icon icon, bool on, const char* tip, float size = 38.0f) { const ImVec2 p = ImGui::GetCursorScreenPos(); const bool hit = ImGui::InvisibleButton(id, ImVec2(size, size)); - const bool hov = ImGui::IsItemHovered(); + const keel::ui::KeyState k = keyState(on); ImDrawList* dl = ImGui::GetWindowDrawList(); - dl->AddRectFilled(p, ImVec2(p.x + size, p.y + size), on ? IM_COL32(196, 86, 26, 255) : hov ? IM_COL32(68, 68, 76, 255) : IM_COL32(40, 40, 46, 255), 6.0f); - drawIcon(dl, icon, ImVec2(p.x + size * 0.14f, p.y + size * 0.14f), size * 0.72f, on ? IM_COL32(255, 255, 255, 255) : IM_COL32(215, 215, 222, 255)); + keel::ui::drawKey(dl, p, ImVec2(p.x + size, p.y + size), 7.0f, k); + const float sink = k == keel::ui::KeyState::Pressed ? 1.0f : 0.0f; + drawIcon(dl, icon, ImVec2(p.x + size * 0.14f, p.y + size * 0.14f + sink), size * 0.72f, keel::ui::keyText(k)); + const bool hov = ImGui::IsItemHovered(); if (hov && tip) ImGui::SetTooltip("%s", tip); return hit; } @@ -5130,11 +5128,13 @@ private: bool wideButton(const char* id, Icon icon, const char* label, bool on, float width, const char* tip = nullptr, float h = 30.0f) { const ImVec2 p = ImGui::GetCursorScreenPos(); const bool hit = ImGui::InvisibleButton(id, ImVec2(width, h)); - const bool hov = ImGui::IsItemHovered(); + const keel::ui::KeyState k = keyState(on); ImDrawList* dl = ImGui::GetWindowDrawList(); - dl->AddRectFilled(p, ImVec2(p.x + width, p.y + h), on ? IM_COL32(196, 86, 26, 255) : hov ? IM_COL32(68, 68, 76, 255) : IM_COL32(40, 40, 46, 255), 6.0f); - drawIcon(dl, icon, ImVec2(p.x + h * 0.15f, p.y + h * 0.13f), h * 0.74f, IM_COL32(235, 235, 240, 255)); - dl->AddText(ImVec2(p.x + h + 2, p.y + (h - ImGui::GetFontSize()) * 0.5f), IM_COL32(235, 235, 240, 255), label); + keel::ui::drawKey(dl, p, ImVec2(p.x + width, p.y + h), 7.0f, k); + const float sink = k == keel::ui::KeyState::Pressed ? 1.0f : 0.0f; + drawIcon(dl, icon, ImVec2(p.x + h * 0.15f, p.y + h * 0.13f + sink), h * 0.74f, keel::ui::keyText(k)); + dl->AddText(ImVec2(p.x + h + 2, p.y + (h - ImGui::GetFontSize()) * 0.5f + sink), keel::ui::keyText(k), label); + const bool hov = ImGui::IsItemHovered(); if (hov && tip) ImGui::SetTooltip("%s", tip); return hit; } @@ -5209,7 +5209,7 @@ private: } ImGui::Spacing(); for (const ToolInfo& t : kTools) - if (t.tool == tool_) ImGui::TextColored(kAccentText, "%s", t.name); + if (t.tool == tool_) ImGui::TextColored(accentText(), "%s", t.name); ImGui::End(); } @@ -5230,7 +5230,7 @@ private: ImGui::PopID(); }); for (const PaintToolInfo& t : kPaintTools) - if (t.tool == paintTool_) ImGui::TextColored(kAccentText, "%s", t.name); + if (t.tool == paintTool_) ImGui::TextColored(accentText(), "%s", t.name); } void paintOptions(float w) { @@ -5565,7 +5565,7 @@ private: "or put pictures onto: copy one in any app and press Ctrl+V."); return; } - ImGui::TextColored(kAccentText, "%s", o->name.c_str()); + ImGui::TextColored(accentText(), "%s", o->name.c_str()); if (!o->picture) { int size = pictureSize_ <= 512 ? 0 : pictureSize_ <= 1024 ? 1 : pictureSize_ <= 2048 ? 2 : 3; ImGui::SetNextItemWidth(w); @@ -5992,7 +5992,7 @@ private: void statusBar() { ImGui::Begin("Status", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar); - if (now() - messageAt_ < 4.0) ImGui::TextColored(kAccentText, "%s", message_.c_str()); + if (now() - messageAt_ < 4.0) ImGui::TextColored(accentText(), "%s", message_.c_str()); else if (tab_ == Tab::Layout) { for (const LayToolInfo& t : kLayTools) if (t.tool == layTool_) @@ -6019,7 +6019,7 @@ private: ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoDocking); static const char* names[] = {"Perspective", "Front", "Back", "Left", "Right", "Top", "Bottom"}; static const char* shadings[] = {"Solid", "Rendered", "Wireframe"}; - ImGui::TextColored(kAccentText, "%s", names[int(view_)]); + ImGui::TextColored(accentText(), "%s", names[int(view_)]); ImGui::SameLine(); ImGui::TextDisabled("%s%s", shadings[int(shading_)], xray_ ? ", X-ray" : ""); for (int i = 1; i < 7; ++i) { @@ -6058,7 +6058,7 @@ private: for (auto [k, what] : list) { ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::TextColored(kAccentText, "%s", k); + ImGui::TextColored(accentText(), "%s", k); ImGui::TableNextColumn(); ImGui::TextWrapped("%s", what); } @@ -6097,7 +6097,7 @@ private: logoImage(160); const char* title = "Fry3DX — Frying 3D Extreme"; ImGui::SetCursorPosX((ImGui::GetWindowWidth() - ImGui::CalcTextSize(title).x) * 0.5f); - ImGui::TextColored(ImVec4(1.0f, 0.47f, 0.16f, 1.0f), "%s", title); + ImGui::TextColored(accentText(), "%s", title); ImGui::TextWrapped("A 3D modeller that does what you'd expect: pick a tool, click and drag. Made by Nexoniarz; open source (Apache License 2.0)."); ImGui::End(); }