paint: meshes tab drag and drop
This commit is contained in:
+24
-3
@@ -170,6 +170,18 @@ gpu_texture_t *base_get_drag_image() {
|
|||||||
if (base_drag_layer != NULL) {
|
if (base_drag_layer != NULL) {
|
||||||
return base_drag_layer->fill_material != NULL ? base_drag_layer->fill_material->image_icon : base_drag_layer->texpaint_preview;
|
return base_drag_layer->fill_material != NULL ? base_drag_layer->fill_material->image_icon : base_drag_layer->texpaint_preview;
|
||||||
}
|
}
|
||||||
|
if (base_drag_mesh != NULL) {
|
||||||
|
gpu_texture_t *preview = tab_meshes_preview_map != NULL ? any_map_get(tab_meshes_preview_map, i32_to_string(base_drag_mesh->base->uid)) : NULL;
|
||||||
|
if (preview != NULL) {
|
||||||
|
return preview;
|
||||||
|
}
|
||||||
|
gpu_texture_t *icons = resource_get("icons.k");
|
||||||
|
gc_unroot(base_drag_rect);
|
||||||
|
base_drag_rect = resource_tile50(icons, ICON_CUBE);
|
||||||
|
gc_root(base_drag_rect);
|
||||||
|
base_drag_tint = g_theme->BUTTON_COL;
|
||||||
|
return icons;
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +213,7 @@ void base_update(void *_) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool has_drag = base_drag_asset != NULL || base_drag_material != NULL || base_drag_layer != NULL || base_drag_file != NULL || base_drag_swatch != NULL ||
|
bool has_drag = base_drag_asset != NULL || base_drag_material != NULL || base_drag_layer != NULL || base_drag_file != NULL || base_drag_swatch != NULL ||
|
||||||
base_drag_brush != NULL || base_drag_font != NULL;
|
base_drag_brush != NULL || base_drag_font != NULL || base_drag_mesh != NULL;
|
||||||
|
|
||||||
if (g_config->touch_ui) {
|
if (g_config->touch_ui) {
|
||||||
// Touch and hold to activate dragging
|
// Touch and hold to activate dragging
|
||||||
@@ -232,6 +244,8 @@ void base_update(void *_) {
|
|||||||
base_drag_material = NULL;
|
base_drag_material = NULL;
|
||||||
gc_unroot(base_drag_layer);
|
gc_unroot(base_drag_layer);
|
||||||
base_drag_layer = NULL;
|
base_drag_layer = NULL;
|
||||||
|
gc_unroot(base_drag_mesh);
|
||||||
|
base_drag_mesh = NULL;
|
||||||
gc_unroot(base_drag_brush);
|
gc_unroot(base_drag_brush);
|
||||||
base_drag_brush = NULL;
|
base_drag_brush = NULL;
|
||||||
gc_unroot(base_drag_font);
|
gc_unroot(base_drag_font);
|
||||||
@@ -320,6 +334,13 @@ void base_update(void *_) {
|
|||||||
gc_unroot(base_drag_layer);
|
gc_unroot(base_drag_layer);
|
||||||
base_drag_layer = NULL;
|
base_drag_layer = NULL;
|
||||||
}
|
}
|
||||||
|
else if (base_drag_mesh != NULL) {
|
||||||
|
if (context_in_meshes() && base_is_dragging) {
|
||||||
|
tab_meshes_accept_mesh_drop(base_drag_mesh);
|
||||||
|
}
|
||||||
|
gc_unroot(base_drag_mesh);
|
||||||
|
base_drag_mesh = NULL;
|
||||||
|
}
|
||||||
else if (base_drag_brush != NULL) {
|
else if (base_drag_brush != NULL) {
|
||||||
if (context_in_brushes()) {
|
if (context_in_brushes()) {
|
||||||
tab_brushes_accept_brush_drop(base_drag_brush);
|
tab_brushes_accept_brush_drop(base_drag_brush);
|
||||||
@@ -349,7 +370,7 @@ void base_update(void *_) {
|
|||||||
g_context->ddirty = 0;
|
g_context->ddirty = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_context->tool == TOOL_TYPE_CURSOR) {
|
if (g_context->tool == TOOL_TYPE_CURSOR && context_in_3d_view()) {
|
||||||
if (keyboard_down("control") && keyboard_started("d")) {
|
if (keyboard_down("control") && keyboard_started("d")) {
|
||||||
sim_duplicate();
|
sim_duplicate();
|
||||||
}
|
}
|
||||||
@@ -904,7 +925,7 @@ void base_update_workspace() {
|
|||||||
ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]->i = 2; // Script
|
ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]->i = 2; // Script
|
||||||
g_config->layout_tabs->buffer[TAB_AREA_SIDEBAR0] = 2;
|
g_config->layout_tabs->buffer[TAB_AREA_SIDEBAR0] = 2;
|
||||||
|
|
||||||
g_config->layout->buffer[LAYOUT_SIZE_STATUS_H] = iron_window_height() * 0.3;
|
g_config->layout->buffer[LAYOUT_SIZE_STATUS_H] = iron_window_height() * 0.2;
|
||||||
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] = iron_window_width() * 0.52;
|
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] = iron_window_width() * 0.52;
|
||||||
float h = UI_ELEMENT_H() + UI_ELEMENT_OFFSET() + 2;
|
float h = UI_ELEMENT_H() + UI_ELEMENT_OFFSET() + 2;
|
||||||
h += UI_ELEMENT_H() * 3.5; // Small material panel
|
h += UI_ELEMENT_H() * 3.5; // Small material panel
|
||||||
|
|||||||
@@ -362,6 +362,11 @@ bool context_in_materials() {
|
|||||||
return string_equals(tab, tr("Materials"));
|
return string_equals(tab, tr("Materials"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool context_in_meshes() {
|
||||||
|
char *tab = ui_hovered_tab_name();
|
||||||
|
return string_equals(tab, tr("Meshes"));
|
||||||
|
}
|
||||||
|
|
||||||
bool context_in_swatches() {
|
bool context_in_swatches() {
|
||||||
char *tab = ui_hovered_tab_name();
|
char *tab = ui_hovered_tab_name();
|
||||||
return string_equals(tab, tr("Swatches"));
|
return string_equals(tab, tr("Swatches"));
|
||||||
|
|||||||
@@ -242,6 +242,7 @@ bool context_in_3d_view();
|
|||||||
bool context_in_paint_area();
|
bool context_in_paint_area();
|
||||||
bool context_in_layers();
|
bool context_in_layers();
|
||||||
bool context_in_materials();
|
bool context_in_materials();
|
||||||
|
bool context_in_meshes();
|
||||||
bool context_in_2d_view(view_2d_type_t type);
|
bool context_in_2d_view(view_2d_type_t type);
|
||||||
bool context_in_nodes();
|
bool context_in_nodes();
|
||||||
bool context_in_swatches();
|
bool context_in_swatches();
|
||||||
@@ -338,6 +339,8 @@ void import_mesh_run(char *path, bool _clear_layers, bool r
|
|||||||
void import_mesh_finish_import(void *_);
|
void import_mesh_finish_import(void *_);
|
||||||
void import_mesh_make_mesh(raw_mesh_t *mesh);
|
void import_mesh_make_mesh(raw_mesh_t *mesh);
|
||||||
void import_mesh_add_mesh(raw_mesh_t *mesh);
|
void import_mesh_add_mesh(raw_mesh_t *mesh);
|
||||||
|
bool _import_mesh_is_unique_name(char *s);
|
||||||
|
char *_import_mesh_number_ext(i32 i);
|
||||||
mesh_data_t *import_mesh_raw_mesh(raw_mesh_t *mesh);
|
mesh_data_t *import_mesh_raw_mesh(raw_mesh_t *mesh);
|
||||||
void ui_menubar_init();
|
void ui_menubar_init();
|
||||||
i32 ui_menu_top_y();
|
i32 ui_menu_top_y();
|
||||||
@@ -665,8 +668,11 @@ 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_meshes_accept_mesh_drop(mesh_object_t *mesh);
|
||||||
void tab_meshes_set_override(mesh_object_t *o, i32 mat_index);
|
void tab_meshes_set_override(mesh_object_t *o, i32 mat_index);
|
||||||
i32 tab_meshes_get_override(mesh_object_t *o);
|
i32 tab_meshes_get_override(mesh_object_t *o);
|
||||||
|
void tab_meshes_on_material_deleted(i32 deleted_index);
|
||||||
|
void tab_meshes_on_material_reordered(i32 old_index, i32 new_index);
|
||||||
void util_particle_init_physics();
|
void util_particle_init_physics();
|
||||||
void util_particle_update();
|
void util_particle_update();
|
||||||
void tab_layers_apply_filter(i32 filter);
|
void tab_layers_apply_filter(i32 filter);
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ slot_material_t *base_drag_material = NULL;
|
|||||||
slot_layer_t *base_drag_layer = NULL;
|
slot_layer_t *base_drag_layer = NULL;
|
||||||
slot_brush_t *base_drag_brush = NULL;
|
slot_brush_t *base_drag_brush = NULL;
|
||||||
slot_font_t *base_drag_font = NULL;
|
slot_font_t *base_drag_font = NULL;
|
||||||
|
mesh_object_t *base_drag_mesh = NULL;
|
||||||
bool base_player_lock = false;
|
bool base_player_lock = false;
|
||||||
|
|
||||||
bool ui_base_show = true;
|
bool ui_base_show = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user