UI: Attemps to improve FH drag-n-drop support #116724

Open
Guillermo Venegas wants to merge 13 commits from guishe/blender:test-dnd-fh into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
3 changed files with 24 additions and 8 deletions
Showing only changes of commit 83f8847d0a - Show all commits

View File

@ -27,13 +27,19 @@
/* *********** STATIC *********** */
static struct {
struct SelectEngineData {
GPUFrameBuffer *framebuffer_select_id;
GPUTexture *texture_u32;
SELECTID_Shaders sh_data[GPU_SHADER_CFG_LEN];
SELECTID_Context context;
} e_data = {nullptr}; /* Engine data */
};
static SelectEngineData &get_engine_data()
{
static SelectEngineData data = {};
return data;
}
/* -------------------------------------------------------------------- */
/** \name Utils
@ -41,6 +47,7 @@ static struct {
static void select_engine_framebuffer_setup()
{
SelectEngineData &e_data = get_engine_data();
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
int size[2];
size[0] = GPU_texture_width(dtxl->depth);
@ -79,6 +86,7 @@ static void select_engine_framebuffer_setup()
static void select_engine_init(void *vedata)
{
SelectEngineData &e_data = get_engine_data();
const DRWContextState *draw_ctx = DRW_context_state_get();
eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
@ -111,6 +119,7 @@ static void select_engine_init(void *vedata)
static void select_cache_init(void *vedata)
{
SelectEngineData &e_data = get_engine_data();
SELECTID_PassList *psl = ((SELECTID_Data *)vedata)->psl;
SELECTID_StorageList *stl = ((SELECTID_Data *)vedata)->stl;
SELECTID_PrivateData *pd = stl->g_data;
@ -193,6 +202,7 @@ static void select_cache_init(void *vedata)
static void select_cache_populate(void *vedata, Object *ob)
{
using namespace blender::draw;
SelectEngineData &e_data = get_engine_data();
SELECTID_StorageList *stl = ((SELECTID_Data *)vedata)->stl;
SELECTID_ObjectData *sel_data = (SELECTID_ObjectData *)DRW_drawdata_get(
&ob->id, &draw_engine_select_type);
@ -231,6 +241,7 @@ static void select_cache_populate(void *vedata, Object *ob)
static void select_draw_scene(void *vedata)
{
SelectEngineData &e_data = get_engine_data();
SELECTID_StorageList *stl = ((SELECTID_Data *)vedata)->stl;
SELECTID_PassList *psl = ((SELECTID_Data *)vedata)->psl;
@ -269,6 +280,7 @@ static void select_draw_scene(void *vedata)
static void select_engine_free()
{
SelectEngineData &e_data = get_engine_data();
for (int sh_data_index = 0; sh_data_index < ARRAY_SIZE(e_data.sh_data); sh_data_index++) {
SELECTID_Shaders *sh_data = &e_data.sh_data[sh_data_index];
DRW_SHADER_FREE_SAFE(sh_data->select_id_flat);
@ -277,8 +289,6 @@ static void select_engine_free()
DRW_TEXTURE_FREE_SAFE(e_data.texture_u32);
GPU_FRAMEBUFFER_FREE_SAFE(e_data.framebuffer_select_id);
e_data.context.objects.reinitialize(0);
e_data.context.index_offsets.reinitialize(0);
}
/** \} */
@ -341,16 +351,19 @@ RenderEngineType DRW_engine_viewport_select_type = {
SELECTID_Context *DRW_select_engine_context_get()
{
SelectEngineData &e_data = get_engine_data();
return &e_data.context;
}
GPUFrameBuffer *DRW_engine_select_framebuffer_get()
{
SelectEngineData &e_data = get_engine_data();
return e_data.framebuffer_select_id;
}
GPUTexture *DRW_engine_select_texture_get()
{
SelectEngineData &e_data = get_engine_data();
return e_data.texture_u32;
}

View File

@ -1426,7 +1426,9 @@ enum uiStringInfoType {
BUT_GET_TIP,
BUT_GET_RNA_TIP,
BUT_GET_RNAENUM_TIP,
/** Buttons assigned to an operator (common case). */
BUT_GET_OP_KEYMAP,
/** Use for properties that are bound to one of the context cycle, etc. keys. */
BUT_GET_PROP_KEYMAP,
};

View File

@ -6851,10 +6851,11 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
}
}
else if (type == BUT_GET_PROP_KEYMAP) {
/* for properties that are bound to one of the context cycle, etc. keys... */
char buf[128];
if (ui_but_event_property_operator_string(C, but, buf, sizeof(buf))) {
tmp = BLI_strdup(buf);
if (!(ui_block_is_menu(but->block) && !ui_block_is_pie_menu(but->block))) {
char buf[128];
if (ui_but_event_property_operator_string(C, but, buf, sizeof(buf))) {
tmp = BLI_strdup(buf);
}
}
}