forked from bartvdbraak/blender
Merge branch 'blender-v3.0-release'
This commit is contained in:
commit
2b63a76041
@ -774,6 +774,7 @@ void UI_block_translate(uiBlock *block, int x, int y);
|
||||
int UI_but_return_value_get(uiBut *but);
|
||||
|
||||
void UI_but_drag_set_id(uiBut *but, struct ID *id);
|
||||
void UI_but_drag_attach_image(uiBut *but, struct ImBuf *imb, const float scale);
|
||||
void UI_but_drag_set_asset(uiBut *but,
|
||||
const struct AssetHandle *asset,
|
||||
const char *path,
|
||||
|
@ -6224,6 +6224,16 @@ void UI_but_drag_set_id(uiBut *but, ID *id)
|
||||
but->dragpoin = (void *)id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set an image to display while dragging. This works for any drag type (`WM_DRAG_XXX`).
|
||||
* Not to be confused with #UI_but_drag_set_image(), which sets up dragging of an image.
|
||||
*/
|
||||
void UI_but_drag_attach_image(uiBut *but, struct ImBuf *imb, const float scale)
|
||||
{
|
||||
but->imb = imb;
|
||||
but->imb_scale = scale;
|
||||
}
|
||||
|
||||
/**
|
||||
* \param asset: May be passed from a temporary variable, drag data only stores a copy of this.
|
||||
*/
|
||||
@ -6252,8 +6262,7 @@ void UI_but_drag_set_asset(uiBut *but,
|
||||
}
|
||||
but->dragpoin = asset_drag;
|
||||
but->dragflag |= UI_BUT_DRAGPOIN_FREE;
|
||||
but->imb = imb;
|
||||
but->imb_scale = scale;
|
||||
UI_but_drag_attach_image(but, imb, scale);
|
||||
}
|
||||
|
||||
void UI_but_drag_set_rna(uiBut *but, PointerRNA *ptr)
|
||||
@ -6308,8 +6317,7 @@ void UI_but_drag_set_image(
|
||||
if (use_free) {
|
||||
but->dragflag |= UI_BUT_DRAGPOIN_FREE;
|
||||
}
|
||||
but->imb = imb;
|
||||
but->imb_scale = scale;
|
||||
UI_but_drag_attach_image(but, imb, scale);
|
||||
}
|
||||
|
||||
PointerRNA *UI_but_operator_ptr_get(uiBut *but)
|
||||
|
@ -178,6 +178,10 @@ static void file_draw_icon(const SpaceFile *sfile,
|
||||
|
||||
if ((id = filelist_file_get_id(file))) {
|
||||
UI_but_drag_set_id(but, id);
|
||||
ImBuf *preview_image = filelist_file_getimage(file);
|
||||
if (preview_image) {
|
||||
UI_but_drag_attach_image(but, preview_image, UI_DPI_FAC);
|
||||
}
|
||||
}
|
||||
else if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS &&
|
||||
(file->typeflag & FILE_TYPE_ASSET) != 0) {
|
||||
@ -504,6 +508,7 @@ static void file_draw_preview(const SpaceFile *sfile,
|
||||
|
||||
if ((id = filelist_file_get_id(file))) {
|
||||
UI_but_drag_set_id(but, id);
|
||||
UI_but_drag_attach_image(but, imb, scale);
|
||||
}
|
||||
/* path is no more static, cannot give it directly to but... */
|
||||
else if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS &&
|
||||
|
@ -778,6 +778,12 @@ static void wm_drag_draw_icon(bContext *UNUSED(C),
|
||||
const int xy[2])
|
||||
{
|
||||
int x, y;
|
||||
|
||||
/* This could also get the preview image of an ID when dragging one. But the big preview icon may
|
||||
* actually not always be wanted, for example when dragging objects in the Outliner it gets in
|
||||
* the way). So make the drag user set an image buffer explicitly (e.g. through
|
||||
* #UI_but_drag_attach_image()). */
|
||||
|
||||
if (drag->imb) {
|
||||
x = xy[0] - drag->sx / 2;
|
||||
y = xy[1] - drag->sy / 2;
|
||||
|
Loading…
Reference in New Issue
Block a user