Files
fn_registry/cpp/framework/app_base.h
T

72 lines
2.5 KiB
C++

#pragma once
#include <cstddef>
#include <functional>
// 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 = false; // Enable multi-viewport: ImGui windows become real OS windows
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<void()> render_fn);
// Convenience: run with default config
int run_app(std::function<void()> render_fn);
} // namespace fn