From 60cbb43966e982f510890a40ba8ea43793b016ec Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Fri, 1 May 2026 16:45:32 +0200 Subject: [PATCH] fix(main): reaplica types.yaml + atlas tras cualquier mutacion reload_after_mutation reconstruye g_graph.types[] con defaults via reload_graph, pero NO reaplica el types.yaml ni reconstruye el icon atlas. Resultado: cualquier mutacion (add/delete/duplicate/change_type/ promote/demote/import) hacia que los tipos perdiesen shape/color/icon y todos los nodos volvieran a renderizarse como circulos grises. Caso reproducible: doble-click en fila de tabla expandida -> promote -> reload -> el nodo Table dejaba de ser cuadrado y se renderizaba como circulo. Fix: tras reload_graph + entity_index_build, si parsed_types tiene contenido, reaplicar types.yaml y reconstruir el atlas con un graph_icons_destroy + build_icon_atlas + g_atlas_bound=false + g_gpu_dirty=true para que el viewport rebincie en el siguiente frame. --- main.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/main.cpp b/main.cpp index e64c3ca..23e1c46 100644 --- a/main.cpp +++ b/main.cpp @@ -728,6 +728,19 @@ static void render() { ge::views_reset_visibility(g_app); ge::views_apply_visibility(g_app); + // Reaplica types.yaml + atlas. Sin esto, despues de cualquier + // mutacion los tipos pierden color/shape/icon (todo nodo vuelve a + // circulo gris). Issue: al promover desde tableview el Table + // dejaba de ser cuadrado. + if (!g_app.parsed_types.entities.empty() || + !g_app.parsed_types.relations.empty()) { + std::vector cps = ge::apply_types_yaml(g_graph, g_app.parsed_types); + if (g_atlas) { graph_icons_destroy(g_atlas); g_atlas = nullptr; } + g_atlas = ge::build_icon_atlas(cps); + g_atlas_bound = false; + g_gpu_dirty = true; + } + // Refresh Table node counts (issue 0010). ge::tableview_refresh_counts(g_input.uri, &g_app.table_node_counts);