From 1b4b90f5f79e3f3b30ba489dec9d35a5c72a58c2 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 4 Jul 2023 14:46:19 +0200 Subject: [PATCH] Cleanup: Remove unnecessary C API for asset representation Now that almost all code is in C++, this is unnecessary and just confuses things with multiple entry points to the same code. Pull Request: https://projects.blender.org/blender/blender/pulls/109661 --- .../asset_system/AS_asset_representation.h | 49 --------- .../asset_system/AS_asset_representation.hh | 16 --- source/blender/asset_system/CMakeLists.txt | 1 - .../intern/asset_representation.cc | 99 ------------------- .../tests/asset_representation_test.cc | 11 --- source/blender/blenkernel/BKE_context.h | 8 +- source/blender/blenkernel/intern/context.cc | 5 +- .../blender/editors/asset/ED_asset_handle.h | 8 +- .../editors/asset/intern/asset_handle.cc | 24 +---- .../blender/editors/asset/intern/asset_ops.cc | 3 +- .../asset/intern/asset_temp_id_consumer.cc | 13 +-- .../editors/geometry/node_group_operator.cc | 11 +-- source/blender/editors/include/UI_interface.h | 6 +- .../editors/interface/interface_drag.cc | 2 +- .../interface_template_asset_view.cc | 41 ++++---- .../blender/editors/space_file/file_draw.cc | 8 +- source/blender/editors/space_file/filelist.cc | 4 +- source/blender/editors/space_file/filesel.cc | 11 +-- .../editors/space_node/add_node_search.cc | 2 +- source/blender/editors/space_node/node_add.cc | 10 +- .../editors/space_view3d/space_view3d.cc | 6 +- source/blender/makesdna/DNA_space_types.h | 11 ++- source/blender/makesrna/intern/rna_asset.cc | 3 +- source/blender/makesrna/intern/rna_space.cc | 6 +- source/blender/windowmanager/WM_api.h | 17 +++- source/blender/windowmanager/WM_types.h | 11 ++- .../windowmanager/intern/wm_dragdrop.cc | 25 ++--- 27 files changed, 129 insertions(+), 282 deletions(-) delete mode 100644 source/blender/asset_system/AS_asset_representation.h diff --git a/source/blender/asset_system/AS_asset_representation.h b/source/blender/asset_system/AS_asset_representation.h deleted file mode 100644 index dff57df3555..00000000000 --- a/source/blender/asset_system/AS_asset_representation.h +++ /dev/null @@ -1,49 +0,0 @@ -/* SPDX-FileCopyrightText: 2023 Blender Foundation - * - * SPDX-License-Identifier: GPL-2.0-or-later */ - -/** \file - * \ingroup asset_system - */ - -#pragma once - -#include "BLI_compiler_attrs.h" - -#include "DNA_ID_enums.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct AssetMetaData; -struct AssetWeakReference; - -/** C handle for #asset_system::AssetRepresentation. */ -typedef struct AssetRepresentation AssetRepresentation; - -const char *AS_asset_representation_name_get(const AssetRepresentation *asset) - ATTR_WARN_UNUSED_RESULT; -ID_Type AS_asset_representation_id_type_get(const AssetRepresentation *asset) - ATTR_WARN_UNUSED_RESULT; -AssetMetaData *AS_asset_representation_metadata_get(const AssetRepresentation *asset) - ATTR_WARN_UNUSED_RESULT; -struct ID *AS_asset_representation_local_id_get(const AssetRepresentation *asset) - ATTR_WARN_UNUSED_RESULT; -bool AS_asset_representation_is_local_id(const AssetRepresentation *asset) ATTR_WARN_UNUSED_RESULT; -bool AS_asset_representation_is_never_link(const AssetRepresentation *asset) - ATTR_WARN_UNUSED_RESULT; - -bool AS_asset_representation_may_override_import_method(const AssetRepresentation *asset); -bool AS_asset_representation_use_relative_path_get(const AssetRepresentation *asset); - -/** - * C version of #AssetRepresentation::make_weak_reference. Returned pointer needs freeing with - * #MEM_delete() or #BKE_asset_weak_reference_free(). - */ -AssetWeakReference *AS_asset_representation_weak_reference_create(const AssetRepresentation *asset) - ATTR_WARN_UNUSED_RESULT; - -#ifdef __cplusplus -} -#endif diff --git a/source/blender/asset_system/AS_asset_representation.hh b/source/blender/asset_system/AS_asset_representation.hh index 9f0a5174bb4..331b8fd8d5b 100644 --- a/source/blender/asset_system/AS_asset_representation.hh +++ b/source/blender/asset_system/AS_asset_representation.hh @@ -114,19 +114,3 @@ class AssetRepresentation { }; } // namespace blender::asset_system - -/* C-Handle */ -struct AssetRepresentation; - -const blender::StringRefNull AS_asset_representation_library_relative_identifier_get( - const AssetRepresentation *asset_handle); - -std::string AS_asset_representation_full_path_get(const ::AssetRepresentation *asset); -/** - * Get the absolute path to the .blend file containing the given asset. String will be empty if - * the asset could not be mapped to a valid .blend file path. Valid in this case also means that - * the file needs to exist on disk. - */ -std::string AS_asset_representation_full_library_path_get(const ::AssetRepresentation *asset); -std::optional AS_asset_representation_import_method_get( - const ::AssetRepresentation *asset_handle); diff --git a/source/blender/asset_system/CMakeLists.txt b/source/blender/asset_system/CMakeLists.txt index 01fb5027750..1bc2e85c4fa 100644 --- a/source/blender/asset_system/CMakeLists.txt +++ b/source/blender/asset_system/CMakeLists.txt @@ -39,7 +39,6 @@ set(SRC intern/utils.hh AS_asset_library.h - AS_asset_representation.h ) set(LIB diff --git a/source/blender/asset_system/intern/asset_representation.cc b/source/blender/asset_system/intern/asset_representation.cc index 578750cb784..25c08a59477 100644 --- a/source/blender/asset_system/intern/asset_representation.cc +++ b/source/blender/asset_system/intern/asset_representation.cc @@ -14,7 +14,6 @@ #include "AS_asset_identifier.hh" #include "AS_asset_library.hh" -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" namespace blender::asset_system { @@ -143,101 +142,3 @@ const AssetLibrary &AssetRepresentation::owner_asset_library() const } } // namespace blender::asset_system - -using namespace blender; - -const StringRefNull AS_asset_representation_library_relative_identifier_get( - const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - const asset_system::AssetIdentifier &identifier = asset->get_identifier(); - return identifier.library_relative_identifier(); -} - -std::string AS_asset_representation_full_path_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - const asset_system::AssetIdentifier &identifier = asset->get_identifier(); - return identifier.full_path(); -} - -std::string AS_asset_representation_full_library_path_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->get_identifier().full_library_path(); -} - -std::optional AS_asset_representation_import_method_get( - const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->get_import_method(); -} - -bool AS_asset_representation_may_override_import_method(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->may_override_import_method(); -} - -bool AS_asset_representation_use_relative_path_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->get_use_relative_path(); -} - -/* ---------------------------------------------------------------------- */ -/** \name C-API - * \{ */ - -const char *AS_asset_representation_name_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->get_name().c_str(); -} - -ID_Type AS_asset_representation_id_type_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->get_id_type(); -} - -AssetMetaData *AS_asset_representation_metadata_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return &asset->get_metadata(); -} - -ID *AS_asset_representation_local_id_get(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->local_id(); -} - -bool AS_asset_representation_is_local_id(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->is_local_id(); -} - -AssetWeakReference *AS_asset_representation_weak_reference_create( - const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - std::unique_ptr weak_ref = asset->make_weak_reference(); - return MEM_new(__func__, std::move(*weak_ref)); -} - -/** \} */ diff --git a/source/blender/asset_system/tests/asset_representation_test.cc b/source/blender/asset_system/tests/asset_representation_test.cc index f5e30d315fa..0e5394d6c78 100644 --- a/source/blender/asset_system/tests/asset_representation_test.cc +++ b/source/blender/asset_system/tests/asset_representation_test.cc @@ -5,7 +5,6 @@ #include "asset_library_service.hh" #include "asset_library_test_common.hh" -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" #include "DNA_asset_types.h" @@ -48,16 +47,6 @@ TEST_F(AssetRepresentationTest, weak_reference__current_file) EXPECT_EQ(weak_ref->asset_library_identifier, nullptr); EXPECT_STREQ(weak_ref->relative_asset_identifier, "path/to/an/asset"); } - - { - /* Also test the C-API, it moves memory, so worth testing. */ - AssetWeakReference *c_weak_ref = AS_asset_representation_weak_reference_create( - reinterpret_cast<::AssetRepresentation *>(&asset)); - EXPECT_EQ(c_weak_ref->asset_library_type, ASSET_LIBRARY_LOCAL); - EXPECT_EQ(c_weak_ref->asset_library_identifier, nullptr); - EXPECT_STREQ(c_weak_ref->relative_asset_identifier, "path/to/an/asset"); - MEM_delete(c_weak_ref); - } } TEST_F(AssetRepresentationTest, weak_reference__custom_library) diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 4c1e9c6ab66..7db77289f32 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -105,6 +105,10 @@ struct bContextStore { bool used = false; }; +namespace blender::asset_system { +class AssetRepresentation; +} + #endif /* for the context's rna mode enum @@ -400,7 +404,9 @@ bool CTX_data_editable_gpencil_strokes(const bContext *C, ListBase *list); const struct AssetLibraryReference *CTX_wm_asset_library_ref(const bContext *C); struct AssetHandle CTX_wm_asset_handle(const bContext *C, bool *r_is_valid); -struct AssetRepresentation *CTX_wm_asset(const bContext *C); +#ifdef __cplusplus +struct blender::asset_system::AssetRepresentation *CTX_wm_asset(const bContext *C); +#endif bool CTX_wm_interface_locked(const bContext *C); diff --git a/source/blender/blenkernel/intern/context.cc b/source/blender/blenkernel/intern/context.cc index 966a6f34bab..58ceac0c808 100644 --- a/source/blender/blenkernel/intern/context.cc +++ b/source/blender/blenkernel/intern/context.cc @@ -1522,9 +1522,10 @@ AssetHandle CTX_wm_asset_handle(const bContext *C, bool *r_is_valid) return AssetHandle{nullptr}; } -AssetRepresentation *CTX_wm_asset(const bContext *C) +blender::asset_system::AssetRepresentation *CTX_wm_asset(const bContext *C) { - return static_cast(ctx_data_pointer_get(C, "asset")); + return static_cast( + ctx_data_pointer_get(C, "asset")); } Depsgraph *CTX_data_depsgraph_pointer(const bContext *C) diff --git a/source/blender/editors/asset/ED_asset_handle.h b/source/blender/editors/asset/ED_asset_handle.h index 8fa4553e167..64a50bfdb35 100644 --- a/source/blender/editors/asset/ED_asset_handle.h +++ b/source/blender/editors/asset/ED_asset_handle.h @@ -23,6 +23,9 @@ namespace blender::asset_system { class AssetRepresentation; } +using AssetRepresentationHandle = blender::asset_system::AssetRepresentation; +#else +typedef struct AssetRepresentationHandle AssetRepresentationHandle; #endif #ifdef __cplusplus @@ -31,10 +34,7 @@ extern "C" { struct AssetHandle; -struct AssetRepresentation *ED_asset_handle_get_representation(const struct AssetHandle *asset); -const char *ED_asset_handle_get_name(const struct AssetHandle *asset); -struct AssetMetaData *ED_asset_handle_get_metadata(const struct AssetHandle *asset); -struct ID *ED_asset_handle_get_local_id(const struct AssetHandle *asset); +AssetRepresentationHandle *ED_asset_handle_get_representation(const struct AssetHandle *asset); ID_Type ED_asset_handle_get_id_type(const struct AssetHandle *asset); int ED_asset_handle_get_preview_icon_id(const struct AssetHandle *asset); void ED_asset_handle_get_full_library_path( diff --git a/source/blender/editors/asset/intern/asset_handle.cc b/source/blender/editors/asset/intern/asset_handle.cc index b33a18682ed..831068d3cc8 100644 --- a/source/blender/editors/asset/intern/asset_handle.cc +++ b/source/blender/editors/asset/intern/asset_handle.cc @@ -8,7 +8,6 @@ #include -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" #include "BKE_blendfile.h" @@ -23,29 +22,15 @@ #include "ED_asset_handle.h" -AssetRepresentation *ED_asset_handle_get_representation(const AssetHandle *asset) +blender::asset_system::AssetRepresentation *ED_asset_handle_get_representation( + const AssetHandle *asset) { return asset->file_data->asset; } -const char *ED_asset_handle_get_name(const AssetHandle *asset) -{ - return AS_asset_representation_name_get(asset->file_data->asset); -} - -AssetMetaData *ED_asset_handle_get_metadata(const AssetHandle *asset_handle) -{ - return AS_asset_representation_metadata_get(asset_handle->file_data->asset); -} - -ID *ED_asset_handle_get_local_id(const AssetHandle *asset_handle) -{ - return AS_asset_representation_local_id_get(asset_handle->file_data->asset); -} - ID_Type ED_asset_handle_get_id_type(const AssetHandle *asset_handle) { - return AS_asset_representation_id_type_get(asset_handle->file_data->asset); + return asset_handle->file_data->asset->get_id_type(); } int ED_asset_handle_get_preview_icon_id(const AssetHandle *asset) @@ -58,8 +43,7 @@ void ED_asset_handle_get_full_library_path(const AssetHandle *asset_handle, { *r_full_lib_path = '\0'; - std::string library_path = AS_asset_representation_full_library_path_get( - asset_handle->file_data->asset); + std::string library_path = asset_handle->file_data->asset->get_identifier().full_library_path(); if (library_path.empty()) { return; } diff --git a/source/blender/editors/asset/intern/asset_ops.cc b/source/blender/editors/asset/intern/asset_ops.cc index 9a52a628008..b8d386885f0 100644 --- a/source/blender/editors/asset/intern/asset_ops.cc +++ b/source/blender/editors/asset/intern/asset_ops.cc @@ -8,6 +8,7 @@ #include "AS_asset_library.h" #include "AS_asset_library.hh" +#include "AS_asset_representation.hh" #include "BKE_bpath.h" #include "BKE_context.h" @@ -288,7 +289,7 @@ void AssetClearHelper::reportResults(const bContext *C, ReportList &reports) con /* Dedicated error message for when there is an active asset detected, but it's not an ID local * to this file. Helps users better understanding what's going on. */ if (AssetHandle active_asset = CTX_wm_asset_handle(C, &is_valid); - is_valid && !ED_asset_handle_get_local_id(&active_asset)) + is_valid && !ED_asset_handle_get_representation(&active_asset)->local_id()) { BKE_report(&reports, RPT_ERROR, diff --git a/source/blender/editors/asset/intern/asset_temp_id_consumer.cc b/source/blender/editors/asset/intern/asset_temp_id_consumer.cc index cedd8e298ec..44cc748362f 100644 --- a/source/blender/editors/asset/intern/asset_temp_id_consumer.cc +++ b/source/blender/editors/asset/intern/asset_temp_id_consumer.cc @@ -12,7 +12,6 @@ #include #include -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" #include "DNA_space_types.h" @@ -32,11 +31,13 @@ using namespace blender; class AssetTemporaryIDConsumer : NonCopyable, NonMovable { - const AssetRepresentation *asset_; + const blender::asset_system::AssetRepresentation *asset_; TempLibraryContext *temp_lib_context_ = nullptr; public: - AssetTemporaryIDConsumer(const AssetRepresentation *asset) : asset_(asset) {} + AssetTemporaryIDConsumer(const blender::asset_system::AssetRepresentation *asset) : asset_(asset) + { + } ~AssetTemporaryIDConsumer() { if (temp_lib_context_) { @@ -46,13 +47,13 @@ class AssetTemporaryIDConsumer : NonCopyable, NonMovable { ID *get_local_id() { - return AS_asset_representation_local_id_get(asset_); + return asset_->local_id(); } ID *import_id(ID_Type id_type, Main &bmain, ReportList &reports) { - const char *asset_name = AS_asset_representation_name_get(asset_); - std::string blend_file_path = AS_asset_representation_full_library_path_get(asset_); + const char *asset_name = asset_->get_name().c_str(); + std::string blend_file_path = asset_->get_identifier().full_library_path(); temp_lib_context_ = BLO_library_temp_load_id( &bmain, blend_file_path.c_str(), id_type, asset_name, &reports); diff --git a/source/blender/editors/geometry/node_group_operator.cc b/source/blender/editors/geometry/node_group_operator.cc index e2c80a36ede..183d4819763 100644 --- a/source/blender/editors/geometry/node_group_operator.cc +++ b/source/blender/editors/geometry/node_group_operator.cc @@ -69,14 +69,9 @@ namespace blender::ed::geometry { /** \name Operator * \{ */ -static const asset_system::AssetRepresentation *get_context_asset(const bContext &C) -{ - return reinterpret_cast(CTX_wm_asset(&C)); -} - static const bNodeTree *get_node_group(const bContext &C) { - const asset_system::AssetRepresentation *asset = get_context_asset(C); + const asset_system::AssetRepresentation *asset = CTX_wm_asset(&C); if (!asset) { return nullptr; } @@ -287,7 +282,7 @@ static char *run_node_group_get_description(bContext *C, wmOperatorType * /*ot*/, PointerRNA * /*ptr*/) { - const asset_system::AssetRepresentation *asset = get_context_asset(*C); + const asset_system::AssetRepresentation *asset = CTX_wm_asset(C); if (!asset) { return nullptr; } @@ -300,7 +295,7 @@ static char *run_node_group_get_description(bContext *C, static bool run_node_group_poll(bContext *C) { - const asset_system::AssetRepresentation *asset = get_context_asset(*C); + const asset_system::AssetRepresentation *asset = CTX_wm_asset(C); if (!asset) { return false; } diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b79d077caac..1d3fe05cffd 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -1809,16 +1809,20 @@ void UI_but_drag_set_id(uiBut *but, struct ID *id); * Sets #UI_BUT_DRAG_FULL_BUT so the full button can be dragged. */ void UI_but_drag_attach_image(uiBut *but, struct ImBuf *imb, float scale); + +#ifdef __cplusplus /** * Sets #UI_BUT_DRAG_FULL_BUT so the full button can be dragged. * \param asset: May be passed from a temporary variable, drag data only stores a copy of this. */ void UI_but_drag_set_asset(uiBut *but, - const struct AssetRepresentation *asset, + const blender::asset_system::AssetRepresentation *asset, int import_type, /* eAssetImportType */ int icon, struct ImBuf *imb, float scale); +#endif + void UI_but_drag_set_rna(uiBut *but, struct PointerRNA *ptr); /** * Enable dragging a path from this button. diff --git a/source/blender/editors/interface/interface_drag.cc b/source/blender/editors/interface/interface_drag.cc index e26d0659e17..85111aee287 100644 --- a/source/blender/editors/interface/interface_drag.cc +++ b/source/blender/editors/interface/interface_drag.cc @@ -30,7 +30,7 @@ void UI_but_drag_attach_image(uiBut *but, ImBuf *imb, const float scale) } void UI_but_drag_set_asset(uiBut *but, - const AssetRepresentation *asset, + const blender::asset_system::AssetRepresentation *asset, int import_type, int icon, ImBuf *imb, diff --git a/source/blender/editors/interface/interface_template_asset_view.cc b/source/blender/editors/interface/interface_template_asset_view.cc index a4102bc45d9..672abc756bc 100644 --- a/source/blender/editors/interface/interface_template_asset_view.cc +++ b/source/blender/editors/interface/interface_template_asset_view.cc @@ -6,7 +6,6 @@ * \ingroup edinterface */ -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" #include "DNA_space_types.h" @@ -47,16 +46,17 @@ struct AssetViewListData { static void asset_view_item_but_drag_set(uiBut *but, AssetHandle *asset_handle) { - AssetRepresentation *asset = ED_asset_handle_get_representation(asset_handle); + blender::asset_system::AssetRepresentation *asset = ED_asset_handle_get_representation( + asset_handle); - ID *id = AS_asset_representation_local_id_get(asset); + ID *id = asset->local_id(); if (id != nullptr) { UI_but_drag_set_id(but, id); return; } - const eAssetImportMethod import_method = - AS_asset_representation_import_method_get(asset).value_or(ASSET_IMPORT_APPEND_REUSE); + const eAssetImportMethod import_method = asset->get_import_method().value_or( + ASSET_IMPORT_APPEND_REUSE); ImBuf *imbuf = ED_assetlist_asset_image_get(asset_handle); UI_but_drag_set_asset( @@ -90,21 +90,22 @@ static void asset_view_draw_item(uiList *ui_list, const bool show_names = list_data->show_names; const float size_x = UI_preview_tile_size_x(); const float size_y = show_names ? UI_preview_tile_size_y() : UI_preview_tile_size_y_no_label(); - uiBut *but = uiDefIconTextBut(block, - UI_BTYPE_PREVIEW_TILE, - 0, - ED_asset_handle_get_preview_icon_id(&asset_handle), - show_names ? ED_asset_handle_get_name(&asset_handle) : "", - 0, - 0, - size_x, - size_y, - nullptr, - 0, - 0, - 0, - 0, - ""); + uiBut *but = uiDefIconTextBut( + block, + UI_BTYPE_PREVIEW_TILE, + 0, + ED_asset_handle_get_preview_icon_id(&asset_handle), + show_names ? ED_asset_handle_get_representation(&asset_handle)->get_name().c_str() : "", + 0, + 0, + size_x, + size_y, + nullptr, + 0, + 0, + 0, + 0, + ""); ui_def_but_icon(but, ED_asset_handle_get_preview_icon_id(&asset_handle), /* NOLINTNEXTLINE: bugprone-suspicious-enum-usage */ diff --git a/source/blender/editors/space_file/file_draw.cc b/source/blender/editors/space_file/file_draw.cc index 0f3deae3155..83fc2d4bd8a 100644 --- a/source/blender/editors/space_file/file_draw.cc +++ b/source/blender/editors/space_file/file_draw.cc @@ -12,7 +12,7 @@ #include "MEM_guardedalloc.h" -#include "AS_asset_representation.h" +#include "AS_asset_representation.hh" #include "BLI_blenlib.h" #include "BLI_fileops_types.h" @@ -116,9 +116,9 @@ static char *file_draw_tooltip_func(bContext * /*C*/, void *argN, const char * / static char *file_draw_asset_tooltip_func(bContext * /*C*/, void *argN, const char * /*tip*/) { - const AssetRepresentation *asset = static_cast(argN); - std::string complete_string = AS_asset_representation_name_get(asset); - const AssetMetaData &meta_data = *AS_asset_representation_metadata_get(asset); + const auto *asset = static_cast(argN); + std::string complete_string = asset->get_name(); + const AssetMetaData &meta_data = asset->get_metadata(); if (meta_data.description) { complete_string += '\n'; complete_string += meta_data.description; diff --git a/source/blender/editors/space_file/filelist.cc b/source/blender/editors/space_file/filelist.cc index 0f4ef2dd29d..e39864f31ee 100644 --- a/source/blender/editors/space_file/filelist.cc +++ b/source/blender/editors/space_file/filelist.cc @@ -1151,7 +1151,7 @@ void filelist_file_get_full_path(const FileList *filelist, char r_filepath[/*FILE_MAX_LIBEXTRA*/]) { if (file->asset) { - const std::string asset_path = AS_asset_representation_full_path_get(file->asset); + const std::string asset_path = file->asset->get_identifier().full_path(); BLI_strncpy(r_filepath, asset_path.c_str(), FILE_MAX_LIBEXTRA); return; } @@ -2107,7 +2107,7 @@ static FileDirEntry *filelist_file_create_entry(FileList *filelist, const int in ret->redirection_path = BLI_strdup(entry->redirection_path); } ret->id = entry->local_data.id; - ret->asset = reinterpret_cast<::AssetRepresentation *>(entry->asset); + ret->asset = entry->asset; /* For some file types the preview is already available. */ if (entry->local_data.preview_image && BKE_previewimg_is_finished(entry->local_data.preview_image, ICON_SIZE_PREVIEW)) diff --git a/source/blender/editors/space_file/filesel.cc b/source/blender/editors/space_file/filesel.cc index 620241bd324..b50ba3a6670 100644 --- a/source/blender/editors/space_file/filesel.cc +++ b/source/blender/editors/space_file/filesel.cc @@ -61,7 +61,7 @@ #include "UI_interface_icons.h" #include "UI_view2d.h" -#include "AS_asset_representation.h" +#include "AS_asset_representation.hh" #include "AS_essentials_library.hh" #include "file_intern.h" @@ -513,16 +513,15 @@ int ED_fileselect_asset_import_method_get(const SpaceFile *sfile, const FileDirE } /* First handle the case where the asset system dictates a certain import method. */ - if (AS_asset_representation_may_override_import_method(file->asset) == false) { - BLI_assert(AS_asset_representation_import_method_get(file->asset).has_value()); - - return *AS_asset_representation_import_method_get(file->asset); + if (file->asset->may_override_import_method() == false) { + BLI_assert(file->asset->get_import_method().has_value()); + return *file->asset->get_import_method(); } const FileAssetSelectParams *params = ED_fileselect_get_asset_params(sfile); if (params->import_type == FILE_ASSET_IMPORT_FOLLOW_PREFS) { - std::optional import_method = AS_asset_representation_import_method_get(file->asset); + std::optional import_method = file->asset->get_import_method(); return import_method ? *import_method : -1; } diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index 70556702cf4..682b6dedf0d 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -168,7 +168,7 @@ static void gather_add_node_operations(const bContext &C, /* Use a set to avoid adding items for node groups that are also assets. Using data-block * names is a crutch, since different assets may have the same name. However, an alternative - * using #ED_asset_handle_get_local_id didn't work in this case. */ + * using #AssetRepresentation::local_id() didn't work in this case. */ Set added_assets; gather_search_items_for_all_assets(C, node_tree, added_assets, r_search_items); gather_search_items_for_node_groups(C, node_tree, added_assets, r_search_items); diff --git a/source/blender/editors/space_node/node_add.cc b/source/blender/editors/space_node/node_add.cc index 269c0488aa7..6bb2b540d67 100644 --- a/source/blender/editors/space_node/node_add.cc +++ b/source/blender/editors/space_node/node_add.cc @@ -8,7 +8,6 @@ #include -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" #include "MEM_guardedalloc.h" @@ -380,14 +379,13 @@ void NODE_OT_add_group(wmOperatorType *ot) * \{ */ static bool add_node_group_asset(const bContext &C, - const AssetRepresentation &asset_c_handle, + const asset_system::AssetRepresentation &asset, ReportList &reports) { Main &bmain = *CTX_data_main(&C); SpaceNode &snode = *CTX_wm_space_node(&C); bNodeTree &edit_tree = *snode.edittree; - auto &asset = reinterpret_cast(asset_c_handle); bNodeTree *node_group = reinterpret_cast( ED_asset_get_local_id_from_asset_or_append_and_reuse(&bmain, asset, ID_NT)); if (!node_group) { @@ -427,7 +425,7 @@ static int node_add_group_asset_invoke(bContext *C, wmOperator *op, const wmEven ARegion ®ion = *CTX_wm_region(C); SpaceNode &snode = *CTX_wm_space_node(C); - const AssetRepresentation *asset = CTX_wm_asset(C); + const asset_system::AssetRepresentation *asset = CTX_wm_asset(C); if (!asset) { return OPERATOR_CANCELLED; } @@ -459,11 +457,11 @@ static char *node_add_group_asset_get_description(bContext *C, wmOperatorType * /*op*/, PointerRNA * /*values*/) { - const AssetRepresentation *asset = CTX_wm_asset(C); + const asset_system::AssetRepresentation *asset = CTX_wm_asset(C); if (!asset) { return nullptr; } - const AssetMetaData &asset_data = *AS_asset_representation_metadata_get(asset); + const AssetMetaData &asset_data = asset->get_metadata(); if (!asset_data.description) { return nullptr; } diff --git a/source/blender/editors/space_view3d/space_view3d.cc b/source/blender/editors/space_view3d/space_view3d.cc index c402f0fbc60..d4b464ed522 100644 --- a/source/blender/editors/space_view3d/space_view3d.cc +++ b/source/blender/editors/space_view3d/space_view3d.cc @@ -12,7 +12,7 @@ #include #include -#include "AS_asset_representation.h" +#include "AS_asset_representation.hh" #include "DNA_collection_types.h" #include "DNA_defaults.h" @@ -502,7 +502,7 @@ static ID_Type view3d_drop_id_in_main_region_poll_get_id_type(bContext *C, wmDragAsset *asset_drag = WM_drag_get_asset_data(drag, 0); if (asset_drag) { - return AS_asset_representation_id_type_get(asset_drag->asset); + return asset_drag->asset->get_id_type(); } return ID_Type(0); @@ -737,7 +737,7 @@ static bool view3d_geometry_nodes_drop_poll(bContext *C, wmDrag *drag, const wmE if (!asset_data) { return false; } - const AssetMetaData *metadata = AS_asset_representation_metadata_get(asset_data->asset); + const AssetMetaData *metadata = &asset_data->asset->get_metadata(); const IDProperty *tree_type = BKE_asset_metadata_idprop_find(metadata, "type"); if (!tree_type || IDP_Int(tree_type) != NTREE_GEOMETRY) { return false; diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 9eb2c5d1993..5c891964864 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -49,6 +49,15 @@ struct bNodeTree; struct wmOperator; struct wmTimer; +#ifdef __cplusplus +namespace blender::asset_system { +class AssetRepresentation; +} +using AssetRepresentationHandle = blender::asset_system::AssetRepresentation; +#else +typedef struct AssetRepresentationHandle AssetRepresentationHandle; +#endif + /** Defined in `buttons_intern.h`. */ typedef struct SpaceProperties_Runtime SpaceProperties_Runtime; @@ -1148,7 +1157,7 @@ typedef struct FileDirEntry { /** If this file represents an asset, its asset data is here. Note that we may show assets of * external files in which case this is set but not the id above. * Note comment for FileListInternEntry.local_data, the same applies here! */ - struct AssetRepresentation *asset; + AssetRepresentationHandle *asset; /* The icon_id for the preview image. */ int preview_icon_id; diff --git a/source/blender/makesrna/intern/rna_asset.cc b/source/blender/makesrna/intern/rna_asset.cc index 9fce22e38eb..8fa7a51e0f2 100644 --- a/source/blender/makesrna/intern/rna_asset.cc +++ b/source/blender/makesrna/intern/rna_asset.cc @@ -20,6 +20,7 @@ #ifdef RNA_RUNTIME # include "AS_asset_library.h" +# include "AS_asset_representation.hh" # include "BKE_asset.h" # include "BKE_context.h" @@ -367,7 +368,7 @@ static void rna_AssetHandle_get_full_library_path( static PointerRNA rna_AssetHandle_local_id_get(PointerRNA *ptr) { const AssetHandle *asset = static_cast(ptr->data); - ID *id = ED_asset_handle_get_local_id(asset); + ID *id = ED_asset_handle_get_representation(asset)->local_id(); return rna_pointer_inherit_refine(ptr, &RNA_ID, id); } diff --git a/source/blender/makesrna/intern/rna_space.cc b/source/blender/makesrna/intern/rna_space.cc index 46bfd14b05a..a1c6a1f2650 100644 --- a/source/blender/makesrna/intern/rna_space.cc +++ b/source/blender/makesrna/intern/rna_space.cc @@ -535,7 +535,7 @@ static const EnumPropertyItem rna_enum_curve_display_handle_items[] = { #ifdef RNA_RUNTIME -# include "AS_asset_representation.h" +# include "AS_asset_representation.hh" # include "DNA_anim_types.h" # include "DNA_asset_types.h" @@ -2789,14 +2789,14 @@ static PointerRNA rna_FileBrowser_FileSelectEntry_asset_data_get(PointerRNA *ptr return PointerRNA_NULL; } - AssetMetaData *asset_data = AS_asset_representation_metadata_get(entry->asset); + AssetMetaData *asset_data = &entry->asset->get_metadata(); /* Note that the owning ID of the RNA pointer (`ptr->owner_id`) has to be set carefully: * Local IDs (`entry->id`) own their asset metadata themselves. Asset metadata from other blend * files are owned by the file browser (`entry`). Only if this is set correctly, we can tell from * the metadata RNA pointer if the metadata is stored locally and can thus be edited or not. */ - if (AS_asset_representation_is_local_id(entry->asset)) { + if (entry->asset->is_local_id()) { PointerRNA id_ptr; RNA_id_pointer_create(entry->id, &id_ptr); return rna_pointer_inherit_refine(&id_ptr, &RNA_AssetMetaData, asset_data); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 1c87a9ef8f4..4aa19295159 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -67,6 +67,12 @@ typedef struct wmGizmoMap wmGizmoMap; typedef struct wmGizmoMapType wmGizmoMapType; typedef struct wmJob wmJob; +#ifdef __cplusplus +namespace blender::asset_system { +class AssetRepresentation; +} +#endif + /* General API. */ /** @@ -1439,11 +1445,14 @@ struct ID *WM_drag_get_local_ID_from_event(const struct wmEvent *event, short id */ bool WM_drag_is_ID_type(const struct wmDrag *drag, int idcode); +#ifdef __cplusplus /** * \note Does not store \a asset in any way, so it's fine to pass a temporary. */ -wmDragAsset *WM_drag_create_asset_data(const struct AssetRepresentation *asset, +wmDragAsset *WM_drag_create_asset_data(const blender::asset_system::AssetRepresentation *asset, int /* #eAssetImportMethod */ import_type); +#endif + struct wmDragAsset *WM_drag_get_asset_data(const struct wmDrag *drag, int idcode); struct AssetMetaData *WM_drag_get_asset_meta_data(const struct wmDrag *drag, int idcode); /** @@ -1469,10 +1478,14 @@ void WM_drag_free_imported_drag_ID(struct Main *bmain, struct wmDragAssetCatalog *WM_drag_get_asset_catalog_data(const struct wmDrag *drag); +#ifdef __cplusplus /** * \note Does not store \a asset in any way, so it's fine to pass a temporary. */ -void WM_drag_add_asset_list_item(wmDrag *drag, const struct AssetRepresentation *asset); +void WM_drag_add_asset_list_item(wmDrag *drag, + const blender::asset_system::AssetRepresentation *asset); +#endif + const ListBase *WM_drag_asset_list_get(const wmDrag *drag); const char *WM_drag_get_item_name(struct wmDrag *drag); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 469735445c6..3843a6ed565 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -118,6 +118,15 @@ struct wmWindowManager; /* Include external gizmo API's */ #include "gizmo/WM_gizmo_api.h" +#ifdef __cplusplus +namespace blender::asset_system { +class AssetRepresentation; +} +using AssetRepresentationHandle = blender::asset_system::AssetRepresentation; +#else +typedef struct AssetRepresentationHandle AssetRepresentationHandle; +#endif + #ifdef __cplusplus extern "C" { #endif @@ -1097,7 +1106,7 @@ typedef struct wmDragID { typedef struct wmDragAsset { int import_method; /* eAssetImportType */ - const struct AssetRepresentation *asset; + const AssetRepresentationHandle *asset; /* FIXME: This is temporary evil solution to get scene/view-layer/etc in the copy callback of the * #wmDropBox. diff --git a/source/blender/windowmanager/intern/wm_dragdrop.cc b/source/blender/windowmanager/intern/wm_dragdrop.cc index 8d8d0233818..5d204973f93 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.cc +++ b/source/blender/windowmanager/intern/wm_dragdrop.cc @@ -10,7 +10,6 @@ #include -#include "AS_asset_representation.h" #include "AS_asset_representation.hh" #include "DNA_asset_types.h" @@ -569,7 +568,8 @@ bool WM_drag_is_ID_type(const wmDrag *drag, int idcode) return WM_drag_get_local_ID(drag, idcode) || WM_drag_get_asset_data(drag, idcode); } -wmDragAsset *WM_drag_create_asset_data(const AssetRepresentation *asset, int import_type) +wmDragAsset *WM_drag_create_asset_data(const blender::asset_system::AssetRepresentation *asset, + int import_type) { wmDragAsset *asset_drag = MEM_new(__func__); @@ -591,7 +591,7 @@ wmDragAsset *WM_drag_get_asset_data(const wmDrag *drag, int idcode) } wmDragAsset *asset_drag = static_cast(drag->poin); - ID_Type asset_idcode = AS_asset_representation_id_type_get(asset_drag->asset); + ID_Type asset_idcode = asset_drag->asset->get_id_type(); return ELEM(idcode, 0, asset_idcode) ? asset_drag : nullptr; } @@ -599,7 +599,7 @@ 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 AS_asset_representation_metadata_get(drag_asset->asset); + return &drag_asset->asset->get_metadata(); } ID *local_id = WM_drag_get_local_ID(drag, idcode); @@ -617,10 +617,10 @@ ID *WM_drag_asset_id_import(wmDragAsset *asset_drag, const int flag_extra) eFileSel_Params_Flag flag = static_cast(flag_extra) | FILE_ACTIVE_COLLECTION; - const char *name = AS_asset_representation_name_get(asset_drag->asset); - const std::string blend_path = AS_asset_representation_full_library_path_get(asset_drag->asset); - const ID_Type idtype = AS_asset_representation_id_type_get(asset_drag->asset); - const bool use_relative_path = AS_asset_representation_use_relative_path_get(asset_drag->asset); + const char *name = asset_drag->asset->get_name().c_str(); + const std::string blend_path = asset_drag->asset->get_identifier().full_library_path(); + const ID_Type idtype = asset_drag->asset->get_id_type(); + const bool use_relative_path = asset_drag->asset->get_use_relative_path(); /* FIXME: Link/Append should happens in the operator called at the end of drop process, not from * here. */ @@ -707,7 +707,7 @@ void WM_drag_free_imported_drag_ID(Main *bmain, wmDrag *drag, wmDropBox *drop) return; } - ID_Type asset_id_type = AS_asset_representation_id_type_get(asset_drag->asset); + ID_Type asset_id_type = asset_drag->asset->get_id_type(); /* Try to find the imported ID. For this to work either a "session_uuid" or "name" property must * have been defined (see #WM_operator_properties_id_lookup()). */ ID *id = WM_operator_properties_id_lookup_from_name_or_session_uuid( @@ -730,7 +730,8 @@ wmDragAssetCatalog *WM_drag_get_asset_catalog_data(const wmDrag *drag) return static_cast(drag->poin); } -void WM_drag_add_asset_list_item(wmDrag *drag, const AssetRepresentation *asset) +void WM_drag_add_asset_list_item(wmDrag *drag, + const blender::asset_system::AssetRepresentation *asset) { BLI_assert(drag->type == WM_DRAG_ASSET_LIST); @@ -738,7 +739,7 @@ void WM_drag_add_asset_list_item(wmDrag *drag, const AssetRepresentation *asset) /* Add to list. */ wmDragAssetListItem *drag_asset = MEM_cnew(__func__); - ID *local_id = AS_asset_representation_local_id_get(asset); + ID *local_id = asset->local_id(); if (local_id) { drag_asset->is_external = false; drag_asset->asset_data.local_id = local_id; @@ -841,7 +842,7 @@ const char *WM_drag_get_item_name(wmDrag *drag) } case WM_DRAG_ASSET: { const wmDragAsset *asset_drag = WM_drag_get_asset_data(drag, 0); - return AS_asset_representation_name_get(asset_drag->asset); + return asset_drag->asset->get_name().c_str(); } case WM_DRAG_PATH: { const wmDragPath *path_drag_data = static_cast(drag->poin);