paint: mesh double-click

This commit is contained in:
luboslenco
2026-05-15 09:53:01 +02:00
parent 97d9614aff
commit eae7b32d19
3 changed files with 46 additions and 22 deletions
+1
View File
@@ -575,6 +575,7 @@ void ui_box_hide();
void tab_meshes_draw(ui_handle_t *htab);
void tab_meshes_reset_preview_map();
void util_particle_init_physics();
void tab_layers_apply_filter(i32 filter);
void tab_layers_draw(ui_handle_t *htab);
void tab_layers_remap_layer_pointers(ui_node_t_array_t *nodes, i32_imap_t *pointer_map);
i32_map_t *tab_layers_init_layer_map();
+36 -22
View File
@@ -1131,6 +1131,41 @@ void tab_layers_button_new(char *text) {
}
}
void tab_layers_apply_filter(i32 filter) {
g_context->layer_filter = filter;
char *filter_name = NULL;
if (filter > 0 && filter <= project_paint_objects->length) {
filter_name = project_paint_objects->buffer[filter - 1]->base->name;
}
else if (filter > project_paint_objects->length) {
string_array_t *atlases = project_get_used_atlases();
if (atlases != NULL) {
filter_name = atlases->buffer[filter - project_paint_objects->length - 1];
}
}
for (i32 i = 0; i < project_paint_objects->length; ++i) {
mesh_object_t *p = project_paint_objects->buffer[i];
p->base->visible = filter == 0 || (filter_name != NULL && string_equals(p->base->name, filter_name)) || project_is_atlas_object(p);
}
if (filter == 0 && g_context->merged_object_is_atlas) {
util_mesh_merge(NULL);
}
else if (filter > project_paint_objects->length) {
mesh_object_t_array_t *visibles = any_array_create_from_raw((void *[]){}, 0);
for (i32 i = 0; i < project_paint_objects->length; ++i) {
mesh_object_t *p = project_paint_objects->buffer[i];
if (p->base->visible) {
any_array_push(visibles, p);
}
}
util_mesh_merge(visibles);
}
layers_set_object_mask();
util_uv_uvmap_cached = false;
g_context->ddirty = 2;
render_path_raytrace_ready = false;
}
void tab_layers_combo_filter() {
string_array_t *ar = any_array_create_from_raw(
(void *[]){
@@ -1152,28 +1187,7 @@ void tab_layers_combo_filter() {
filter_handle->i = g_context->layer_filter;
g_context->layer_filter = ui_combo(filter_handle, ar, tr("Filter"), false, UI_ALIGN_LEFT, true);
if (filter_handle->changed) {
for (i32 i = 0; i < project_paint_objects->length; ++i) {
mesh_object_t *p = project_paint_objects->buffer[i];
char *filter_name = ar->buffer[g_context->layer_filter];
p->base->visible = g_context->layer_filter == 0 || string_equals(p->base->name, filter_name) || project_is_atlas_object(p);
}
if (g_context->layer_filter == 0 && g_context->merged_object_is_atlas) { // All
util_mesh_merge(NULL);
}
else if (g_context->layer_filter > project_paint_objects->length) { // Atlas
mesh_object_t_array_t *visibles = any_array_create_from_raw((void *[]){}, 0);
for (i32 i = 0; i < project_paint_objects->length; ++i) {
mesh_object_t *p = project_paint_objects->buffer[i];
if (p->base->visible) {
any_array_push(visibles, p);
}
}
util_mesh_merge(visibles);
}
layers_set_object_mask();
util_uv_uvmap_cached = false;
g_context->ddirty = 2;
render_path_raytrace_ready = false;
tab_layers_apply_filter(g_context->layer_filter);
}
}
+9
View File
@@ -608,6 +608,15 @@ void tab_meshes_draw(ui_handle_t *htab) {
if (state == UI_STATE_STARTED && ui->input_y > ui->_window_y) {
g_context->paint_object = o;
}
// Double click to show only this mesh
if (state == UI_STATE_RELEASED && ui->input_y > ui->_window_y) {
if (sys_time() - g_context->select_time < 0.2) {
tab_layers_apply_filter(i + 1);
}
if (sys_time() - g_context->select_time > 0.2) {
g_context->select_time = sys_time();
}
}
// Context menu
if (ui->is_hovered && ui->input_released_r) {