#pragma once #include #include // Forward declarations para evitar incluir headers pesados aqui. Las // definiciones reales viven en cpp/functions/core/*.h y se incluyen desde // app_base.cpp. namespace fn_ui { struct PanelToggle; struct LayoutCallbacks; // Info estatica para la ventana About. Si name != nullptr, fn::run_app // llama about_window_set_info(name, version, description) tras settings_load(). struct AppAboutInfo { const char* name = nullptr; const char* version = nullptr; const char* description = nullptr; }; } namespace fn { // Modos de tema para run_app. enum class ThemeMode { FnDark, // Identidad del registry (Mantine v9 dark + indigo). DEFAULT. ImGuiDark, // Tema estandar de ImGui (ImGui::StyleColorsDark). ImGuiLight, None, // No tocar el ImGuiStyle — la app lo configura. }; struct AppConfig { const char* title = "fn_registry"; int width = 1280; int height = 720; bool vsync = true; bool viewports = true; // Multi-viewport ON por defecto: ventanas ImGui arrastrables fuera del main window ThemeMode theme = ThemeMode::FnDark; // Identidad visual unificada por defecto float bg_r = 0.102f; // fn_tokens::colors::bg (dark.7 #1A1B1E) float bg_g = 0.106f; float bg_b = 0.118f; // About window. Si about.name != nullptr, run_app llama // fn_ui::about_window_set_info(name, version, description) tras settings_load(). fn_ui::AppAboutInfo about{}; // Paneles toggleables del menubar. Si panels != nullptr y panel_count > 0, // run_app llama fn_ui::app_menubar(panels, panel_count, layouts_cb) cada frame // ANTES de render_fn(). const fn_ui::PanelToggle* panels = nullptr; std::size_t panel_count = 0; // Callbacks de layouts persistentes. Si layouts_cb != nullptr, run_app // llama fn_ui::app_menubar(panels, panel_count, layouts_cb) cada frame. fn_ui::LayoutCallbacks* layouts_cb = nullptr; // Si true, run_app llama fn::gfx::gl_loader_init() tras crear el contexto // GL y antes del primer frame. Necesario para apps que llaman gl* directo // en Windows (en Linux es no-op). bool init_gl_loader = false; }; // Run an ImGui application. The render_fn is called every frame // between ImGui::NewFrame() and ImGui::Render(). // Returns 0 on clean exit, 1 on error. int run_app(AppConfig config, std::function render_fn); // Convenience: run with default config int run_app(std::function render_fn); } // namespace fn