[Bf-blender-cvs] [e20266b9499] asset-browser-snap-dragging: Merge branch 'master' into asset-browser-snap-dragging
Julian Eisel
noreply at git.blender.org
Sun Jun 13 22:10:55 CEST 2021
Commit: e20266b949990e823b1a416a39eb2b8abe2f1c5c
Author: Julian Eisel
Date: Sun Jun 13 22:06:02 2021 +0200
Branches: asset-browser-snap-dragging
https://developer.blender.org/rBe20266b949990e823b1a416a39eb2b8abe2f1c5c
Merge branch 'master' into asset-browser-snap-dragging
===================================================================
===================================================================
diff --cc source/blender/editors/include/UI_interface.h
index b6602756029,1d335c500ca..c0466307288
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@@ -724,7 -723,7 +724,8 @@@ void UI_but_drag_set_asset(uiBut *but
const char *name,
const char *path,
int id_type,
+ struct AssetMetaData *metadata,
+ int import_type, /* eFileAssetImportType */
int icon,
struct ImBuf *imb,
float scale);
diff --cc source/blender/editors/interface/interface.c
index 1af3e596ef9,26ea5f8e24a..6c6e90d5339
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@@ -6144,7 -6144,7 +6144,8 @@@ void UI_but_drag_set_asset(uiBut *but
const char *name,
const char *path,
int id_type,
+ struct AssetMetaData *metadata,
+ int import_type,
int icon,
struct ImBuf *imb,
float scale)
@@@ -6152,9 -6152,9 +6153,10 @@@
wmDragAsset *asset_drag = MEM_mallocN(sizeof(*asset_drag), "wmDragAsset");
BLI_strncpy(asset_drag->name, name, sizeof(asset_drag->name));
+ asset_drag->metadata = metadata;
asset_drag->path = path;
asset_drag->id_type = id_type;
+ asset_drag->import_type = import_type;
but->dragtype = WM_DRAG_ASSET;
ui_def_but_icon(but, icon, 0); /* no flag UI_HAS_ICON, so icon doesn't draw in button */
diff --cc source/blender/editors/space_file/file_draw.c
index 2d407604ec9,17d029f7541..a164981985d
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@@ -181,7 -185,7 +185,8 @@@ static void file_draw_icon(const SpaceF
file->name,
BLI_strdup(blend_path),
file->blentype,
+ file->asset_data,
+ asset_params->import_type,
icon,
preview_image,
UI_DPI_FAC);
@@@ -490,7 -499,7 +500,8 @@@ static void file_draw_preview(const Spa
file->name,
BLI_strdup(blend_path),
file->blentype,
+ file->asset_data,
+ asset_params->import_type,
icon,
imb,
scale);
diff --cc source/blender/editors/space_view3d/space_view3d.c
index bd8ed8820d2,001def7318e..3b9b83fb2d7
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@@ -631,47 -625,9 +631,48 @@@ static void view3d_ob_drop_copy(wmDrag
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, ID_OB);
RNA_string_set(drop->ptr, "name", id->name + 2);
+ RNA_boolean_set(drop->ptr, "duplicate", false);
}
+static void view3d_ob_drag_gizmo_copy_local(wmDropBox *drop, Object *ob)
+{
+ BoundBox *boundbox = BKE_object_boundbox_get(ob);
+ if (boundbox) {
+ RNA_float_set_array(drop->gizmo_group_ptr, "bound_box", (float *)boundbox->vec);
+ }
+ float matrix_basis[4][4];
+ BKE_object_to_mat4(ob, matrix_basis);
+ RNA_float_set_array(drop->gizmo_group_ptr, "matrix_basis", (float *)matrix_basis);
+}
+
+static void view3d_ob_drag_gizmo_copy_external(wmDrag *drag, wmDropBox *drop)
+{
+ const struct AssetMetaData *meta_data = WM_drag_get_asset_meta_data(drag, ID_OB);
+
+ const IDProperty *boundbox_prop = BKE_asset_metadata_idprop_find(meta_data, "boundbox_hint");
+ if (boundbox_prop) {
+ BLI_assert(boundbox_prop->len == sizeof(((BoundBox *)NULL)->vec) / sizeof(float));
+ RNA_float_set_array(drop->gizmo_group_ptr, "bound_box", IDP_Array(boundbox_prop));
+ }
+
+ const IDProperty *matrix_basis_prop = BKE_asset_metadata_idprop_find(meta_data, "matrix_basis");
+ if (matrix_basis_prop) {
+ BLI_assert(matrix_basis_prop->len == sizeof(((Object *)NULL)->obmat) / sizeof(float));
+ RNA_float_set_array(drop->gizmo_group_ptr, "matrix_basis", IDP_Array(matrix_basis_prop));
+ }
+}
+
+static void view3d_ob_drag_gizmo_copy(wmDrag *drag, wmDropBox *drop)
+{
+ ID *id = WM_drag_get_local_ID(drag, ID_OB);
+ if (id) {
+ view3d_ob_drag_gizmo_copy_local(drop, (Object *)id);
+ }
+ else {
+ view3d_ob_drag_gizmo_copy_external(drag, drop);
+ }
+}
+
static void view3d_collection_drop_copy(wmDrag *drag, wmDropBox *drop)
{
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, ID_GR);
diff --cc source/blender/windowmanager/WM_types.h
index ae04ad4769c,0b26f3c54ae..ac3c7bbbc76
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@@ -921,7 -920,7 +921,8 @@@ typedef struct wmDragAsset
/* Always freed. */
const char *path;
int id_type;
+ struct AssetMetaData *metadata;
+ int import_type; /* eFileAssetImportType */
} wmDragAsset;
typedef struct wmDrag {
diff --cc source/blender/windowmanager/intern/wm_dragdrop.c
index 1e604cd81fb,fc62d0c6e06..ba2f3d0b24e
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@@ -452,26 -376,19 +453,34 @@@ wmDragAsset *WM_drag_get_asset_data(con
return (ELEM(idcode, 0, asset_drag->id_type)) ? asset_drag : NULL;
}
+struct AssetMetaData *WM_drag_get_asset_meta_data(const wmDrag *drag, int idcode)
+{
+ wmDragAsset *drag_asset = WM_drag_get_asset_data(drag, idcode);
+ if (drag_asset) {
+ return drag_asset->metadata;
+ }
+
+ ID *local_id = WM_drag_get_local_ID(drag, idcode);
+ if (local_id) {
+ return local_id->asset_data;
+ }
+
+ return NULL;
+}
+
static ID *wm_drag_asset_id_import(wmDragAsset *asset_drag)
{
- /* Append only for now, wmDragAsset could have a `link` bool. */
- return WM_file_append_datablock(
- G_MAIN, NULL, NULL, NULL, asset_drag->path, asset_drag->id_type, asset_drag->name);
+ switch ((eFileAssetImportType)asset_drag->import_type) {
+ case FILE_ASSET_IMPORT_LINK:
+ return WM_file_link_datablock(
+ G_MAIN, NULL, NULL, NULL, asset_drag->path, asset_drag->id_type, asset_drag->name);
+ case FILE_ASSET_IMPORT_APPEND:
+ return WM_file_append_datablock(
+ G_MAIN, NULL, NULL, NULL, asset_drag->path, asset_drag->id_type, asset_drag->name);
+ }
+
+ BLI_assert_unreachable();
+ return NULL;
}
/**
More information about the Bf-blender-cvs
mailing list