[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