diff --git a/base/sources/iron_ui_nodes.c b/base/sources/iron_ui_nodes.c index 5534ca6b..355d9737 100644 --- a/base/sources/iron_ui_nodes.c +++ b/base/sources/iron_ui_nodes.c @@ -19,8 +19,6 @@ static bool ui_box_select = false; static int ui_box_select_x = 0; static int ui_box_select_y = 0; static const int ui_max_buttons = 9; -static void (*ui_on_header_released)(ui_node_t *) = NULL; -static void (*ui_nodes_on_node_remove)(ui_node_t *) = NULL; static int ui_node_id = -1; static ui_node_t *node_resize = NULL; @@ -34,6 +32,7 @@ ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void) = NULL; void (*ui_nodes_on_canvas_released)(void) = NULL; void (*ui_nodes_on_socket_released)(int) = NULL; void (*ui_nodes_on_link_drag)(int, bool) = NULL; +void (*ui_nodes_on_node_remove)(ui_node_t *) = NULL; bool ui_nodes_grid_snap = true; int ui_nodes_grid_snap_w = 40; @@ -1011,9 +1010,6 @@ void ui_node_canvas(ui_nodes_t *nodes, ui_node_canvas_t *canvas) { // No drag performed, select single node current_nodes->nodes_selected_id->length = 0; i32_array_push(current_nodes->nodes_selected_id, node->id); - if (ui_on_header_released != NULL) { - ui_on_header_released(node); - } } } diff --git a/base/sources/iron_ui_nodes.h b/base/sources/iron_ui_nodes.h index 8e8bd4ee..f024b5ab 100644 --- a/base/sources/iron_ui_nodes.h +++ b/base/sources/iron_ui_nodes.h @@ -137,6 +137,7 @@ extern ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void); extern void (*ui_nodes_on_canvas_released)(void); extern void (*ui_nodes_on_socket_released)(int); extern void (*ui_nodes_on_link_drag)(int, bool); +extern void (*ui_nodes_on_node_remove)(ui_node_t *); extern bool ui_nodes_grid_snap; void ui_node_canvas_encode(ui_node_canvas_t *canvas); diff --git a/base/sources/ts/iron.ts b/base/sources/ts/iron.ts index d0de8acd..4f638845 100644 --- a/base/sources/ts/iron.ts +++ b/base/sources/ts/iron.ts @@ -687,6 +687,7 @@ declare let ui_touch_tooltip: bool; declare let ui_on_border_hover: any; declare let ui_on_tab_drop: any; declare let ui_nodes_on_link_drag: any; +declare let ui_nodes_on_node_remove: any; declare let ui_nodes_on_socket_released: any; declare let ui_nodes_on_canvas_released: any; declare let ui_nodes_on_canvas_control: any; diff --git a/paint/sources/tab_materials.ts b/paint/sources/tab_materials.ts index 24d6aaaf..93a1c5f0 100644 --- a/paint/sources/tab_materials.ts +++ b/paint/sources/tab_materials.ts @@ -369,4 +369,8 @@ function tab_materials_delete_material(m: slot_material_t) { let m: slot_material_t = project_materials[i]; tab_materials_update_material_pointers(m.canvas.nodes, i); } + for (let i: i32 = 0; i < m.canvas.nodes.length; ++i) { + let n: ui_node_t = m.canvas.nodes[i]; + ui_viewnodes_on_node_remove(n); + } } diff --git a/paint/sources/ui_nodes.ts b/paint/sources/ui_nodes.ts index 0d8d96b6..fb54861a 100644 --- a/paint/sources/ui_nodes.ts +++ b/paint/sources/ui_nodes.ts @@ -55,6 +55,7 @@ let _ui_nodes_node_search_done: ()=>void; function ui_viewnodes_init() { ui_nodes_preview_image = ui_nodes_get_node_preview_image; ui_nodes_on_link_drag = ui_viewnodes_on_link_drag; + ui_nodes_on_node_remove = ui_viewnodes_on_node_remove; ui_nodes_on_socket_released = ui_viewnodes_on_socket_released; ui_nodes_on_canvas_released = ui_viewnodes_on_canvas_released; ui_nodes_on_canvas_control = ui_viewnodes_on_canvas_control; @@ -62,6 +63,14 @@ function ui_viewnodes_init() { nodes_material_init(); } +function ui_viewnodes_on_node_remove(n: ui_node_t) { + let img: gpu_texture_t = map_get(context_raw.node_preview_map, n); + if (img != null) { + iron_delete_texture(img); + map_delete(context_raw.node_preview_map, n); + } +} + function ui_viewnodes_on_link_drag(link_drag_id: i32, is_new_link: bool) { if (!is_new_link) { return;