ed1ffd07b5
- demos_text_editor.cpp: split horizontal con editor GLSL precargado a la izquierda (boton Save to /tmp/fn_demo.glsl + dirty indicator) y panel de eventos a la derecha (path, active flag, lista scrollable, boton clear). Watcher activo sobre /tmp/fn_demo.glsl; reintenta el add() tras el primer Save si el archivo no existia al iniciar. - demos.h: declaracion de gallery::demo_text_editor() - main.cpp: entry "text_editor"/"text_editor + watcher" en categoria Core - CMakeLists.txt: anade demos_text_editor.cpp + sources de text_editor, file_watcher y vendor TextEditor.cpp + include path de imgui_text_edit Nota: la primitives_gallery NO se construye en este branch (sus deps — button.cpp, toolbar.cpp, etc. — son untracked en master). El subdirectorio se anade pero protegido por FN_BUILD_GALLERY=OFF para no romper builds. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
#include "demo.h"
|
|
#include "core/tokens.h"
|
|
#include <cstdio>
|
|
|
|
namespace gallery {
|
|
|
|
void demo_header(const char* name, const char* version, const char* description) {
|
|
using namespace fn_tokens;
|
|
|
|
ImGui::SetWindowFontScale(1.4f);
|
|
ImGui::TextUnformatted(name);
|
|
ImGui::SetWindowFontScale(1.0f);
|
|
|
|
ImGui::SameLine();
|
|
ImGui::PushStyleColor(ImGuiCol_Text, colors::text_dim);
|
|
ImGui::Text(" %s", version);
|
|
ImGui::PopStyleColor();
|
|
|
|
if (description && *description) {
|
|
ImGui::PushStyleColor(ImGuiCol_Text, colors::text_muted);
|
|
ImGui::TextWrapped("%s", description);
|
|
ImGui::PopStyleColor();
|
|
}
|
|
ImGui::Separator();
|
|
ImGui::Dummy(ImVec2(0, spacing::sm));
|
|
}
|
|
|
|
void section(const char* title) {
|
|
using namespace fn_tokens;
|
|
ImGui::Dummy(ImVec2(0, spacing::sm));
|
|
ImGui::PushStyleColor(ImGuiCol_Text, colors::text_muted);
|
|
ImGui::TextUnformatted(title);
|
|
ImGui::PopStyleColor();
|
|
ImGui::Separator();
|
|
ImGui::Dummy(ImVec2(0, spacing::xs));
|
|
}
|
|
|
|
void variant_label(const char* text) {
|
|
ImGui::PushStyleColor(ImGuiCol_Text, fn_tokens::colors::text_dim);
|
|
ImGui::TextUnformatted(text);
|
|
ImGui::PopStyleColor();
|
|
}
|
|
|
|
void code_block(const char* code) {
|
|
using namespace fn_tokens;
|
|
ImGui::Dummy(ImVec2(0, spacing::sm));
|
|
ImGui::PushStyleColor(ImGuiCol_Text, colors::text_dim);
|
|
ImGui::TextUnformatted("// example");
|
|
ImGui::PopStyleColor();
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_ChildBg, colors::bg);
|
|
ImGui::PushStyleColor(ImGuiCol_Border, colors::border);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, radius::sm);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_ChildBorderSize, 1.0f);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(spacing::md, spacing::sm));
|
|
|
|
// Altura: aprox lineas * line-height
|
|
int lines = 1;
|
|
for (const char* p = code; *p; ++p) if (*p == '\n') ++lines;
|
|
float h = lines * ImGui::GetTextLineHeightWithSpacing() + spacing::md;
|
|
|
|
char id[32];
|
|
std::snprintf(id, sizeof(id), "##code_%p", (const void*)code);
|
|
ImGui::BeginChild(id, ImVec2(0, h),
|
|
ImGuiChildFlags_Borders,
|
|
ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
|
|
ImGui::PushStyleColor(ImGuiCol_Text, colors::text);
|
|
ImGui::TextUnformatted(code);
|
|
ImGui::PopStyleColor();
|
|
ImGui::EndChild();
|
|
|
|
ImGui::PopStyleVar(3);
|
|
ImGui::PopStyleColor(2);
|
|
}
|
|
|
|
} // namespace gallery
|