paint: mesh double-click
This commit is contained in:
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user