[Bf-blender-cvs] [9caae3861da] asset-browser: Merge branch 'asset-browser-poselib' into asset-browser
Julian Eisel
noreply at git.blender.org
Sun Jun 13 23:31:15 CEST 2021
Commit: 9caae3861dafd008bfb3a91b9becd1defe34e638
Author: Julian Eisel
Date: Sun Jun 13 22:44:49 2021 +0200
Branches: asset-browser
https://developer.blender.org/rB9caae3861dafd008bfb3a91b9becd1defe34e638
Merge branch 'asset-browser-poselib' into asset-browser
===================================================================
===================================================================
diff --cc source/blender/editors/include/UI_interface.h
index e1333e711b2,62c39a7139e..bffbc3f60f8
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@@ -732,7 -731,7 +732,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 b0e4596969d,ef828ab9283..6c3d8014283
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@@ -6174,7 -6174,7 +6174,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)
@@@ -6182,9 -6182,9 +6183,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/interface/interface_template_asset_view.cc
index e2bb142a881,7f298f0f3f1..1a564d86eb0
--- a/source/blender/editors/interface/interface_template_asset_view.cc
+++ b/source/blender/editors/interface/interface_template_asset_view.cc
@@@ -67,8 -67,8 +67,9 @@@ static void asset_view_item_but_drag_se
UI_but_drag_set_asset(but,
asset_handle->file_data->name,
BLI_strdup(blend_path),
+ FILE_ASSET_IMPORT_APPEND,
asset_handle->file_data->blentype,
+ asset_handle->file_data->asset_data,
asset_handle->file_data->preview_icon_id,
imbuf,
1.0f);
diff --cc source/blender/editors/space_file/file_draw.c
index 4a85d448a92,d044bd6a96a..ee4a6125259
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@@ -182,7 -186,7 +186,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);
@@@ -491,7 -500,7 +501,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 f517ebd90f4,3b349dfd634..8744fd81cc2
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@@ -928,7 -927,7 +928,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