From 04e2e42a1a397d6b91a04286fb3711dbbed46ae3 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 9 Jun 2026 15:43:36 +0200 Subject: [PATCH] paint: stage fixes --- paint/sources/functions.h | 2 ++ paint/sources/ui/tab_layers.c | 4 +++- paint/sources/ui/tab_meshes.c | 8 +++++--- paint/sources/ui/ui_view2d.c | 6 ++++-- paint/sources/util/util_stage.c | 28 ++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/paint/sources/functions.h b/paint/sources/functions.h index 003e3c0f..551e2e50 100644 --- a/paint/sources/functions.h +++ b/paint/sources/functions.h @@ -409,6 +409,8 @@ char *strings_graphics_api(); stage_t *tab_stages_create_stage(char *name); stage_t *tab_stages_get_stage(); void tab_stages_apply(stage_t *stage); +void tab_stages_rename_object(char *old_name, char *new_name); +void tab_stages_rename_layer(char *old_name, char *new_name); void tab_stages_prune(); void project_open(); void project_save(bool save_and_quit); diff --git a/paint/sources/ui/tab_layers.c b/paint/sources/ui/tab_layers.c index 209d6203..b7e531d2 100644 --- a/paint/sources/ui/tab_layers.c +++ b/paint/sources/ui/tab_layers.c @@ -403,7 +403,9 @@ void tab_layers_draw_layer_slot_full(slot_layer_t *l, i32 i) { g_ui->_w = name_right - name_x; if (tab_layers_layer_name_edit == l->id) { tab_layers_layer_name_handle->text = string_copy(l->name); - l->name = string_copy(ui_text_input(tab_layers_layer_name_handle, "", UI_ALIGN_LEFT, true, false)); + char *new_name = string_copy(ui_text_input(tab_layers_layer_name_handle, "", UI_ALIGN_LEFT, true, false)); + tab_stages_rename_layer(l->name, new_name); + l->name = new_name; if (g_ui->text_selected_handle != tab_layers_layer_name_handle) { tab_layers_layer_name_edit = -1; } diff --git a/paint/sources/ui/tab_meshes.c b/paint/sources/ui/tab_meshes.c index 88523c65..e378bb2a 100644 --- a/paint/sources/ui/tab_meshes.c +++ b/paint/sources/ui/tab_meshes.c @@ -274,9 +274,11 @@ void tab_meshes_draw_context_menu() { 2); ui_row(row); ui_text("Name", UI_ALIGN_LEFT, 0x00000000); - h = ui_handle(__ID__); - h->text = string_copy(o->base->name); - o->base->name = string_copy(ui_text_input(h, "", UI_ALIGN_LEFT, true, false)); + h = ui_handle(__ID__); + h->text = string_copy(o->base->name); + char *new_name = string_copy(ui_text_input(h, "", UI_ALIGN_LEFT, true, false)); + tab_stages_rename_object(o->base->name, new_name); + o->base->name = new_name; o->data->name = string_copy(o->base->name); // Material override diff --git a/paint/sources/ui/ui_view2d.c b/paint/sources/ui/ui_view2d.c index 67e90f8b..2c6b931b 100644 --- a/paint/sources/ui/ui_view2d.c +++ b/paint/sources/ui/ui_view2d.c @@ -512,8 +512,10 @@ void ui_view2d_update(void *_) { ui_text(g_context->node_preview_name, UI_ALIGN_LEFT, 0x00000000); } else if (ui_view2d_type == VIEW_2D_TYPE_LAYER) { - h->text = string_copy(l->name); - l->name = string_copy(ui_text_input(h, "", UI_ALIGN_LEFT, true, false)); + h->text = string_copy(l->name); + char *new_name = string_copy(ui_text_input(h, "", UI_ALIGN_LEFT, true, false)); + tab_stages_rename_layer(l->name, new_name); + l->name = new_name; ui_view2d_text_input_hover = g_ui->is_hovered; } else if (ui_view2d_type == VIEW_2D_TYPE_FONT) { diff --git a/paint/sources/util/util_stage.c b/paint/sources/util/util_stage.c index cedf0d0f..cf1a7351 100644 --- a/paint/sources/util/util_stage.c +++ b/paint/sources/util/util_stage.c @@ -34,6 +34,34 @@ void tab_stages_apply(stage_t *stage) { g_context->ddirty = 2; } +void tab_stages_rename_object(char *old_name, char *new_name) { + if (g_project->stages == NULL || string_equals(old_name, new_name)) { + return; + } + for (i32 i = 0; i < g_project->stages->length; ++i) { + stage_t *s = g_project->stages->buffer[i]; + for (i32 j = 0; j < s->objects->length; ++j) { + if (string_equals(s->objects->buffer[j], old_name)) { + s->objects->buffer[j] = string_copy(new_name); + } + } + } +} + +void tab_stages_rename_layer(char *old_name, char *new_name) { + if (g_project->stages == NULL || string_equals(old_name, new_name)) { + return; + } + for (i32 i = 0; i < g_project->stages->length; ++i) { + stage_t *s = g_project->stages->buffer[i]; + for (i32 j = 0; j < s->layers->length; ++j) { + if (string_equals(s->layers->buffer[j], old_name)) { + s->layers->buffer[j] = string_copy(new_name); + } + } + } +} + void tab_stages_prune() { if (g_project->stages == NULL) { return;