Files
fn_registry/cpp/functions/core/tokens.cpp
T
egutierrez 53402d84d5 docs(issues): marcar 0025 y 0026 como completados + WIP master
Wave 1 de parallel-fix-issues integrada a master:
- 0025: text_editor_cpp_core + file_watcher_cpp_core
- 0026: gl_texture_load_cpp_gfx (vendor: stb_image v2.30)

Ademas se commitea WIP previo de master que estaba sin commitear (cambios
en shaders_lab, dag_*, framework, tokens, kpi_card, gl_loader.md, etc.)
para dejar HEAD buildable.

Notas:
- Algunos deps del gallery (button.cpp, toolbar.cpp, modal_dialog.cpp...)
  siguen UNTRACKED — gating con FN_BUILD_GALLERY=ON (default OFF) para
  que master build (sin flag) no los necesite.
- Build OK con y sin flag. fn index registra 904 functions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:14:15 +02:00

143 lines
6.1 KiB
C++

#include "tokens.h"
#if __has_include("implot.h")
#include "implot.h"
#define FN_HAS_IMPLOT 1
#endif
namespace fn_tokens {
void apply_dark_theme() {
ImGuiStyle& s = ImGui::GetStyle();
// ---------- Colors ----------
auto& c = s.Colors;
c[ImGuiCol_WindowBg] = colors::bg;
c[ImGuiCol_ChildBg] = colors::surface;
c[ImGuiCol_PopupBg] = colors::surface;
c[ImGuiCol_MenuBarBg] = colors::surface;
c[ImGuiCol_FrameBg] = colors::surface;
c[ImGuiCol_FrameBgHovered] = colors::surface_hover;
c[ImGuiCol_FrameBgActive] = colors::surface_active;
c[ImGuiCol_TitleBg] = colors::bg;
c[ImGuiCol_TitleBgActive] = colors::surface;
c[ImGuiCol_TitleBgCollapsed] = colors::bg;
c[ImGuiCol_Border] = colors::border;
c[ImGuiCol_BorderShadow] = ImVec4(0, 0, 0, 0);
c[ImGuiCol_Text] = colors::text;
c[ImGuiCol_TextDisabled] = colors::text_dim;
c[ImGuiCol_TextSelectedBg] = ImVec4(colors::primary.x, colors::primary.y, colors::primary.z, 0.35f);
c[ImGuiCol_Button] = colors::primary;
c[ImGuiCol_ButtonHovered] = colors::primary_hover;
c[ImGuiCol_ButtonActive] = colors::primary_active;
c[ImGuiCol_CheckMark] = colors::primary_light;
c[ImGuiCol_SliderGrab] = colors::primary;
c[ImGuiCol_SliderGrabActive] = colors::primary_hover;
c[ImGuiCol_Header] = colors::surface_hover;
c[ImGuiCol_HeaderHovered] = colors::primary;
c[ImGuiCol_HeaderActive] = colors::primary_hover;
c[ImGuiCol_Tab] = colors::surface;
c[ImGuiCol_TabHovered] = colors::primary_hover;
c[ImGuiCol_TabActive] = colors::primary;
c[ImGuiCol_TabUnfocused] = colors::bg;
c[ImGuiCol_TabUnfocusedActive] = colors::surface_hover;
c[ImGuiCol_Separator] = colors::border;
c[ImGuiCol_SeparatorHovered] = colors::primary_light;
c[ImGuiCol_SeparatorActive] = colors::primary;
c[ImGuiCol_ResizeGrip] = ImVec4(colors::primary.x, colors::primary.y, colors::primary.z, 0.25f);
c[ImGuiCol_ResizeGripHovered] = colors::primary_hover;
c[ImGuiCol_ResizeGripActive] = colors::primary_active;
c[ImGuiCol_ScrollbarBg] = colors::bg;
c[ImGuiCol_ScrollbarGrab] = colors::surface_hover;
c[ImGuiCol_ScrollbarGrabHovered] = colors::surface_active;
c[ImGuiCol_ScrollbarGrabActive] = colors::border_strong;
c[ImGuiCol_TableHeaderBg] = colors::surface_hover;
c[ImGuiCol_TableBorderLight] = colors::border;
c[ImGuiCol_TableBorderStrong] = colors::border;
c[ImGuiCol_TableRowBg] = ImVec4(0, 0, 0, 0);
c[ImGuiCol_TableRowBgAlt] = ImVec4(colors::surface.x, colors::surface.y, colors::surface.z, 0.40f);
c[ImGuiCol_DockingPreview] = ImVec4(colors::primary.x, colors::primary.y, colors::primary.z, 0.60f);
c[ImGuiCol_DockingEmptyBg] = colors::bg;
c[ImGuiCol_PlotLines] = colors::primary_light;
c[ImGuiCol_PlotLinesHovered] = colors::primary;
c[ImGuiCol_PlotHistogram] = colors::primary_light;
c[ImGuiCol_PlotHistogramHovered] = colors::primary;
c[ImGuiCol_DragDropTarget] = colors::primary_light;
c[ImGuiCol_NavHighlight] = colors::primary_light;
c[ImGuiCol_NavWindowingHighlight]= ImVec4(1, 1, 1, 0.70f);
c[ImGuiCol_NavWindowingDimBg] = ImVec4(0, 0, 0, 0.40f);
c[ImGuiCol_ModalWindowDimBg] = ImVec4(0, 0, 0, 0.55f);
// ---------- Radius ----------
s.WindowRounding = radius::md;
s.ChildRounding = radius::md;
s.PopupRounding = radius::md;
s.FrameRounding = radius::md;
s.GrabRounding = radius::sm;
s.ScrollbarRounding = radius::md;
s.TabRounding = radius::sm;
// ---------- Spacing & padding ----------
s.WindowPadding = ImVec2(spacing::md, spacing::md);
s.FramePadding = ImVec2(spacing::sm, spacing::xs + 2.0f);
s.CellPadding = ImVec2(spacing::sm, spacing::xs);
s.ItemSpacing = ImVec2(spacing::sm, spacing::sm);
s.ItemInnerSpacing = ImVec2(spacing::xs, spacing::xs);
s.IndentSpacing = spacing::lg;
s.ScrollbarSize = 14.0f;
s.GrabMinSize = 12.0f;
// ---------- Borders ----------
s.WindowBorderSize = 1.0f;
s.ChildBorderSize = 1.0f;
s.PopupBorderSize = 1.0f;
s.FrameBorderSize = 0.0f; // Mantine no pinta borde en frames (usa bg sutil)
s.TabBorderSize = 0.0f;
// ---------- Viewports (multi-OS-window) ----------
// Cuando ImGuiConfigFlags_ViewportsEnable esta activo las ventanas pueden
// salirse del monitor principal; en ese caso WindowRounding debe ser 0
// y alpha 1.0 para que los compositors no muestren esquinas raras.
// app_base gestiona este caso; aqui dejamos los valores para single-viewport.
// ---------- ImPlot ----------
#ifdef FN_HAS_IMPLOT
if (ImPlot::GetCurrentContext() != nullptr) {
ImPlotStyle& p = ImPlot::GetStyle();
p.Colors[ImPlotCol_FrameBg] = colors::surface;
p.Colors[ImPlotCol_PlotBg] = colors::bg;
p.Colors[ImPlotCol_PlotBorder] = colors::border;
p.Colors[ImPlotCol_LegendBg] = colors::surface;
p.Colors[ImPlotCol_LegendBorder] = colors::border;
p.Colors[ImPlotCol_LegendText] = colors::text;
p.Colors[ImPlotCol_TitleText] = colors::text;
p.Colors[ImPlotCol_InlayText] = colors::text_muted;
p.Colors[ImPlotCol_AxisText] = colors::text_muted;
p.Colors[ImPlotCol_AxisGrid] = colors::border;
p.Colors[ImPlotCol_AxisTick] = colors::border;
p.Colors[ImPlotCol_AxisBg] = ImVec4(0, 0, 0, 0);
p.Colors[ImPlotCol_Selection] = colors::primary_light;
p.Colors[ImPlotCol_Crosshairs] = colors::text_muted;
p.PlotPadding = ImVec2(spacing::sm, spacing::sm);
p.LabelPadding = ImVec2(spacing::xs, spacing::xs);
p.LegendPadding = ImVec2(spacing::sm, spacing::sm);
}
#endif
}
} // namespace fn_tokens