From e30e1df2da0e8b57bfffc37bb6dd667469d4f483 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Wed, 10 Jun 2026 18:38:00 +0200 Subject: [PATCH] paint: improve mesh rename --- paint/sources/globals.h | 1 + paint/sources/main.c | 3 ++ paint/sources/ui/tab_meshes.c | 83 +++++++++++++++++++---------------- 3 files changed, 50 insertions(+), 37 deletions(-) diff --git a/paint/sources/globals.h b/paint/sources/globals.h index 2233052f..065c80ca 100644 --- a/paint/sources/globals.h +++ b/paint/sources/globals.h @@ -317,6 +317,7 @@ bool ui_box_click_to_hide = true; i32 ui_box_modalw = 400; i32 ui_box_modalh = 170; ui_handle_t *tab_layers_layer_name_handle; +ui_handle_t *tab_meshes_mesh_name_handle; slot_layer_t *tab_layers_l; gpu_texture_t *util_uv_uvmap = NULL; bool util_uv_uvmap_cached = false; diff --git a/paint/sources/main.c b/paint/sources/main.c index 58b494e5..2f3b1147 100644 --- a/paint/sources/main.c +++ b/paint/sources/main.c @@ -528,6 +528,9 @@ void _kickstart() { tab_layers_layer_name_handle = ui_handle_create(); gc_root(tab_layers_layer_name_handle); + tab_meshes_mesh_name_handle = ui_handle_create(); + gc_root(tab_meshes_mesh_name_handle); + render_path_raytrace_f32a = f32_array_create(24); gc_root(render_path_raytrace_f32a); render_path_raytrace_help_mat = mat4_identity(); diff --git a/paint/sources/ui/tab_meshes.c b/paint/sources/ui/tab_meshes.c index 78e604a7..f6442ba4 100644 --- a/paint/sources/ui/tab_meshes.c +++ b/paint/sources/ui/tab_meshes.c @@ -4,8 +4,9 @@ extern buffer_t *slot_material_default_canvas; i32 _tab_meshes_draw_i; -any_map_t *tab_meshes_preview_map = NULL; -any_map_t *tab_meshes_override_map = NULL; // object uid -> overridden material index +i32 tab_meshes_mesh_name_edit = -1; +any_map_t *tab_meshes_preview_map = NULL; +any_map_t *tab_meshes_override_map = NULL; // object uid -> overridden material index void tab_meshes_set_override(mesh_object_t *o, i32 mat_index) { // Render an object with a chosen material instead of the painted layers @@ -266,21 +267,6 @@ void tab_meshes_draw_context_menu() { // script = string_copy(hscript->text); // any_map_set(sim_object_script_map, g_context->selected_object, script); - f32_array_t *row = f32_array_create_from_raw( - (f32[]){ - 1 / 4.0, - 3 / 4.0, - }, - 2); - ui_row(row); - ui_text("Name", UI_ALIGN_LEFT, 0x00000000); - 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 string_array_t *mat_combo = string_array_create(0); string_array_push(mat_combo, ""); // Empty = use painted layers @@ -701,30 +687,53 @@ void tab_meshes_draw_mesh_slot(mesh_object_t *o, i32 i) { g_ui->_x = name_x; g_ui->_y = uiy + center; g_ui->_w = name_right - name_x; - ui_text(o->base->name, UI_ALIGN_LEFT, 0x00000000); - // Row interaction - f32 row_left = uix + uiw * 0.08; - bool hovered = g_ui->enabled && g_ui->input_enabled && g_ui->input_x > g_ui->_window_x + row_left && g_ui->input_x < g_ui->_window_x + uix + uiw && - g_ui->input_y > g_ui->_window_y + uiy && g_ui->input_y < g_ui->_window_y + uiy + step * 2 * UI_SCALE(); - if (hovered) { - ui_tooltip(o->base->name); - if (g_ui->input_started) { - g_context->paint_object = o; + bool over_name = g_ui->input_x > g_ui->_window_x + name_x && g_ui->input_x < g_ui->_window_x + name_right; + + if (tab_meshes_mesh_name_edit == o->base->uid) { + tab_meshes_mesh_name_handle->text = string_copy(o->base->name); + char *new_name = string_copy(ui_text_input(tab_meshes_mesh_name_handle, "", 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); + if (g_ui->text_selected_handle != tab_meshes_mesh_name_handle) { + tab_meshes_mesh_name_edit = -1; } - // Double click to show only this mesh - if (g_ui->input_released) { - if (sys_time() - g_context->select_time < 0.2) { - tab_layers_apply_filter(i + 1); + } + else { + ui_text(o->base->name, UI_ALIGN_LEFT, 0x00000000); + + // Row interaction + f32 row_left = uix + uiw * 0.08; + bool hovered = g_ui->enabled && g_ui->input_enabled && g_ui->input_x > g_ui->_window_x + row_left && g_ui->input_x < g_ui->_window_x + uix + uiw && + g_ui->input_y > g_ui->_window_y + uiy && g_ui->input_y < g_ui->_window_y + uiy + step * 2 * UI_SCALE(); + if (hovered) { + ui_tooltip(o->base->name); + if (g_ui->input_started) { + g_context->paint_object = o; } - if (sys_time() - g_context->select_time > 0.2) { - g_context->select_time = sys_time(); + if (g_ui->input_released) { + if (sys_time() - g_context->select_time < 0.2) { + if (over_name) { + // Double click name to rename + tab_meshes_mesh_name_edit = o->base->uid; + tab_meshes_mesh_name_handle->text = string_copy(o->base->name); + ui_start_text_edit(tab_meshes_mesh_name_handle, UI_ALIGN_LEFT); + } + else { + // Double click to show only this mesh + tab_layers_apply_filter(i + 1); + } + } + if (sys_time() - g_context->select_time > 0.2) { + g_context->select_time = sys_time(); + } + } + if (g_ui->input_released_r) { + g_context->paint_object = o; + _tab_meshes_draw_i = i; + ui_menu_draw(&tab_meshes_draw_context_menu, -1, -1); } - } - if (g_ui->input_released_r) { - g_context->paint_object = o; - _tab_meshes_draw_i = i; - ui_menu_draw(&tab_meshes_draw_context_menu, -1, -1); } }