paint: debug tab

This commit is contained in:
luboslenco
2026-05-05 10:42:22 +02:00
parent ec3d2a23da
commit fb552e0e21
10 changed files with 99 additions and 193 deletions
+4
View File
@@ -2063,6 +2063,10 @@ tab_draw_array_t_array_t *ui_base_init_hwnd_tabs() {
} }
#endif #endif
if (g_config->experimental) {
any_array_push(a0, _draw_callback_create(tab_debug_draw));
}
tab_draw_array_t_array_t *r = any_array_create_from_raw((void *[]){}, 0); tab_draw_array_t_array_t *r = any_array_create_from_raw((void *[]){}, 0);
any_array_push(r, a0); any_array_push(r, a0);
any_array_push(r, a1); any_array_push(r, a1);
+1 -3
View File
@@ -274,6 +274,7 @@ void history_delete_material_group(node_group_t *group);
void tab_scripts_set(char *s); void tab_scripts_set(char *s);
void tab_scripts_draw(ui_handle_t *htab); void tab_scripts_draw(ui_handle_t *htab);
ui_text_coloring_t *tab_scripts_get_text_coloring(); ui_text_coloring_t *tab_scripts_get_text_coloring();
void tab_debug_draw(ui_handle_t *htab);
void render_path_preview_init(); void render_path_preview_init();
void render_path_preview_commands_preview(); void render_path_preview_commands_preview();
void render_path_preview_commands_decal(); void render_path_preview_commands_decal();
@@ -562,9 +563,6 @@ void ui_box_show_custom(void (*commands)(void), i32 mw,
void ui_box_hide(); void ui_box_hide();
void tab_meshes_draw(ui_handle_t *htab); void tab_meshes_draw(ui_handle_t *htab);
void tab_meshes_reset_preview_map(); void tab_meshes_reset_preview_map();
void tab_scene_select_object(mesh_object_t *mo);
void tab_scene_sort();
void tab_scene_import_mesh_done();
void util_particle_init(); void util_particle_init();
void util_particle_init_physics(); void util_particle_init_physics();
void tab_layers_draw(ui_handle_t *htab); void tab_layers_draw(ui_handle_t *htab);
-1
View File
@@ -406,7 +406,6 @@ ui_handle_t *ui_box_hwnd;
bool ui_box_click_to_hide = true; bool ui_box_click_to_hide = true;
i32 ui_box_modalw = 400; i32 ui_box_modalw = 400;
i32 ui_box_modalh = 170; i32 ui_box_modalh = 170;
i32 _tab_scene_paint_object_length = 1;
ui_handle_t *tab_layers_layer_name_handle; ui_handle_t *tab_layers_layer_name_handle;
gpu_texture_t *util_uv_uvmap = NULL; gpu_texture_t *util_uv_uvmap = NULL;
bool util_uv_uvmap_cached = false; bool util_uv_uvmap_cached = false;
+1 -1
View File
@@ -168,13 +168,13 @@
#include "tab_browser.c" #include "tab_browser.c"
#include "tab_brushes.c" #include "tab_brushes.c"
#include "tab_console.c" #include "tab_console.c"
#include "tab_debug.c"
#include "tab_fonts.c" #include "tab_fonts.c"
#include "tab_history.c" #include "tab_history.c"
#include "tab_layers.c" #include "tab_layers.c"
#include "tab_materials.c" #include "tab_materials.c"
#include "tab_meshes.c" #include "tab_meshes.c"
#include "tab_plugins.c" #include "tab_plugins.c"
#include "tab_scene.c"
#include "tab_scripts.c" #include "tab_scripts.c"
#include "tab_swatches.c" #include "tab_swatches.c"
#include "tab_textures.c" #include "tab_textures.c"
-5
View File
@@ -121,9 +121,6 @@ void sim_duplicate() {
pbdup->mass = pb->mass; pbdup->mass = pb->mass;
physics_body_init(pbdup, dup->base); physics_body_init(pbdup, dup->base);
} }
_tab_scene_paint_object_length++;
tab_scene_sort();
} }
void sim_delete() { void sim_delete() {
@@ -131,6 +128,4 @@ void sim_delete() {
array_remove(project_paint_objects, so); array_remove(project_paint_objects, so);
mesh_object_remove(so); mesh_object_remove(so);
sim_remove_body(so->base->uid); sim_remove_body(so->base->uid);
_tab_scene_paint_object_length--;
tab_scene_sort();
} }
-2
View File
@@ -309,8 +309,6 @@ void render_path_paint_commands_paint(bool dilation) {
#endif #endif
i32 index = r_byte - 1; i32 index = r_byte - 1;
if (index >= 0 && index < project_paint_objects->length) { if (index >= 0 && index < project_paint_objects->length) {
// tab_scene_select_object(project_paint_objects->buffer[index]);
g_context->paint_object = project_paint_objects->buffer[index]; g_context->paint_object = project_paint_objects->buffer[index];
// g_context->layer->object_mask = index + 1; // g_context->layer->object_mask = index + 1;
+93
View File
@@ -0,0 +1,93 @@
#include "global.h"
i32 tab_debug_line_counter = 0;
void tab_debug_draw_list(ui_handle_t *list_handle, object_t *current_object) {
if (string_equals(char_at(current_object->name, 0), ".")) {
return; // Hidden
}
bool b = false;
// Highlight every other line
if (tab_debug_line_counter % 2 == 0) {
draw_set_color(ui->ops->theme->SEPARATOR_COL);
draw_filled_rect(0, ui->_y, ui->_window_w, UI_ELEMENT_H());
draw_set_color(0xffffffff);
}
if (current_object->children->length > 0) {
f32_array_t *row = f32_array_create_from_raw(
(f32[]){
1 / 13.0,
12 / 13.0,
},
2);
ui_row(row);
ui_handle_t *h = ui_nest(list_handle, tab_debug_line_counter);
if (h->init) {
h->b = true;
}
b = ui_panel(h, "", true, false, false);
ui_text(current_object->name, UI_ALIGN_LEFT, 0x00000000);
}
else {
ui->_x += 18; // Sign offset
// Draw line that shows parent relations
draw_set_color(ui->ops->theme->BUTTON_COL);
draw_line(ui->_x - 10, ui->_y + UI_ELEMENT_H() / 2.0, ui->_x, ui->_y + UI_ELEMENT_H() / 2.0, 1.0);
draw_set_color(0xffffffff);
ui_text(current_object->name, UI_ALIGN_LEFT, 0x00000000);
ui->_x -= 18;
}
tab_debug_line_counter++;
// Undo applied offset for row drawing caused by end_element()
ui->_y -= UI_ELEMENT_OFFSET();
if (b) {
i32 current_y = ui->_y;
for (i32 i = 0; i < current_object->children->length; ++i) {
object_t *child = current_object->children->buffer[i];
ui->_x += 8;
tab_debug_draw_list(list_handle, child);
ui->_x -= 8;
}
// Draw line that shows parent relations
draw_set_color(ui->ops->theme->BUTTON_COL);
draw_line(ui->_x + 14, current_y, ui->_x + 14, ui->_y - UI_ELEMENT_H() / 2.0, 1.0);
draw_set_color(0xffffffff);
}
}
void tab_debug_draw(ui_handle_t *htab) {
if (ui_tab(htab, tr("Debug"), false, -1, false)) {
ui_handle_t *h0 = ui_handle(__ID__);
if (ui_panel(h0, "Render Targets", false, false, false)) {
string_array_t *rt_keys = map_keys(render_path_render_targets);
array_sort(rt_keys, NULL);
for (i32 i = 0; i < rt_keys->length; ++i) {
render_target_t *rt = any_map_get(render_path_render_targets, rt_keys->buffer[i]);
ui_text(rt_keys->buffer[i], UI_ALIGN_LEFT, 0x00000000);
ui_image(rt->_image, 0xffffffff, -1.0);
}
}
ui_handle_t *h1 = ui_handle(__ID__);
if (ui_panel(h1, "Scene", false, false, false)) {
tab_debug_line_counter = 0;
object_t *scene = _scene_root->children->buffer[0];
for (i32 i = 0; i < scene->children->length; ++i) {
object_t *c = scene->children->buffer[i];
tab_debug_draw_list(ui_handle(__ID__), c);
}
}
}
}
-5
View File
@@ -335,11 +335,6 @@ void tab_meshes_append_shape(char *mesh_name) {
mo->base->raw = o; mo->base->raw = o;
any_map_set(data_cached_meshes, md->_->handle, md); any_map_set(data_cached_meshes, md->_->handle, md);
any_array_push(project_paint_objects, mo); any_array_push(project_paint_objects, mo);
// tab_scene_import_mesh_done();
// sys_notify_on_next_frame(function(mo: mesh_object_t) {
// tab_scene_select_object(mo);
// }, mo);
} }
void tab_meshes_draw_append_shape() { void tab_meshes_draw_append_shape() {
-10
View File
@@ -27,16 +27,6 @@ void tab_plugins_draw(ui_handle_t *htab) {
minic_ctx_call_fn(p->ctx, p->on_ui, NULL, 0); minic_ctx_call_fn(p->ctx, p->on_ui, NULL, 0);
} }
} }
#ifdef is_debug
string_array_t *rt_keys = map_keys(render_path_render_targets);
array_sort(rt_keys, NULL);
for (i32 i = 0; i < rt_keys->length; ++i) {
render_target_t *rt = any_map_get(render_path_render_targets, rt_keys->buffer[i]);
ui_text(rt_keys->buffer[i], UI_ALIGN_LEFT, 0x00000000);
ui_image(rt->_image, 0xffffffff, -1.0);
}
#endif
} }
} }
-166
View File
@@ -1,166 +0,0 @@
#include "global.h"
i32 tab_scene_line_counter = 0;
void tab_scene_select_object(mesh_object_t *mo) {
if (mo == NULL) {
return;
}
g_context->selected_object = mo->base;
if (!string_equals(mo->base->ext_type, "mesh_object_t")) {
return;
}
g_context->paint_object = mo;
if (g_context->merged_object != NULL) {
g_context->merged_object->base->visible = false;
}
context_select_paint_object(mo);
}
i32 tab_scene_sort_compare(void **pa, void **pb) {
object_t *a = *(pa);
object_t *b = *(pb);
return strcmp(a->name, b->name);
}
void tab_scene_sort() {
object_t *scene = _scene_root->children->buffer[0];
array_sort(scene->children, &tab_scene_sort_compare);
}
void tab_scene_import_mesh_done_on_next_frame(void *_) {
util_mesh_merge(NULL);
tab_scene_select_object(g_context->selected_object->ext);
tab_scene_sort();
}
void tab_scene_import_mesh_done() {
i32 count = project_paint_objects->length - _tab_scene_paint_object_length;
_tab_scene_paint_object_length = project_paint_objects->length;
for (i32 i = 0; i < count; ++i) {
mesh_object_t *mo = project_paint_objects->buffer[project_paint_objects->length - 1 - i];
object_set_parent(mo->base, NULL);
tab_scene_select_object(mo);
}
sys_notify_on_next_frame(&tab_scene_import_mesh_done_on_next_frame, NULL);
}
void tab_scene_draw_list_context_menu() {
if (ui_menu_button(tr("Duplicate"), "ctrl+d", ICON_DUPLICATE)) {
sim_duplicate();
}
if (ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) {
sim_delete();
}
}
void tab_scene_draw_list(ui_handle_t *list_handle, object_t *current_object) {
if (string_equals(char_at(current_object->name, 0), ".")) {
return; // Hidden
}
bool b = false;
// Highlight every other line
if (tab_scene_line_counter % 2 == 0) {
draw_set_color(ui->ops->theme->SEPARATOR_COL);
draw_filled_rect(0, ui->_y, ui->_window_w, UI_ELEMENT_H());
draw_set_color(0xffffffff);
}
// Highlight selected line
if (current_object == g_context->selected_object) {
draw_set_color(0xff205d9c);
draw_filled_rect(0, ui->_y, ui->_window_w, UI_ELEMENT_H());
draw_set_color(0xffffffff);
}
if (current_object->children->length > 0) {
f32_array_t *row = f32_array_create_from_raw(
(f32[]){
1 / 13.0,
12 / 13.0,
},
2);
ui_row(row);
ui_handle_t *h = ui_nest(list_handle, tab_scene_line_counter);
if (h->init) {
h->b = true;
}
b = ui_panel(h, "", true, false, false);
ui_text(current_object->name, UI_ALIGN_LEFT, 0x00000000);
}
else {
ui->_x += 18; // Sign offset
// Draw line that shows parent relations
draw_set_color(ui->ops->theme->BUTTON_COL);
draw_line(ui->_x - 10, ui->_y + UI_ELEMENT_H() / 2.0, ui->_x, ui->_y + UI_ELEMENT_H() / 2.0, 1.0);
draw_set_color(0xffffffff);
ui_text(current_object->name, UI_ALIGN_LEFT, 0x00000000);
ui->_x -= 18;
}
tab_scene_line_counter++;
// Undo applied offset for row drawing caused by end_element()
ui->_y -= UI_ELEMENT_OFFSET();
if (ui->is_released) {
tab_scene_select_object(current_object->ext);
}
if (ui->is_hovered && ui->input_released_r) {
tab_scene_select_object(current_object->ext);
ui_menu_draw(&tab_scene_draw_list_context_menu, -1, -1);
}
if (b) {
i32 current_y = ui->_y;
for (i32 i = 0; i < current_object->children->length; ++i) {
object_t *child = current_object->children->buffer[i];
ui->_x += 8;
tab_scene_draw_list(list_handle, child);
ui->_x -= 8;
}
// Draw line that shows parent relations
draw_set_color(ui->ops->theme->BUTTON_COL);
draw_line(ui->_x + 14, current_y, ui->_x + 14, ui->_y - UI_ELEMENT_H() / 2.0, 1.0);
draw_set_color(0xffffffff);
}
}
void tab_scene_draw(ui_handle_t *htab) {
if (ui_tab(htab, tr("Scene"), false, -1, false)) {
tab_scene_line_counter = 0;
object_t *scene = _scene_root->children->buffer[0];
for (i32 i = 0; i < scene->children->length; ++i) {
object_t *c = scene->children->buffer[i];
tab_scene_draw_list(ui_handle(__ID__), c);
}
// Select object with arrow keys
if (ui->is_key_pressed && ui->key_code == KEY_CODE_DOWN) {
i32 i = array_index_of(project_paint_objects, g_context->selected_object->ext);
if (i < project_paint_objects->length - 1) {
tab_scene_select_object(project_paint_objects->buffer[i + 1]);
}
}
if (ui->is_key_pressed && ui->key_code == KEY_CODE_UP) {
i32 i = array_index_of(project_paint_objects, g_context->selected_object->ext);
if (i > 1) {
tab_scene_select_object(project_paint_objects->buffer[i - 1]);
}
}
}
}