Refactor: Assets: Avoid hacky asset handle context query
The `AssetRepresentation` should now be available directly in context where previously the `AssetHandle` type was required. By adding an `"asset"` context member to the file browser, this should avoid any behavior change. (Previously we would get the asset from context by constructing a asset handle from the "active_file" context member. So make sure "asset" is available wherever "active_file" is.) This is another important step towards removing `AssetHandle`, see blender/blender#108806.
This commit is contained in:
parent
767d86b543
commit
3f9c943243
@ -1529,20 +1529,6 @@ const AssetLibraryReference *CTX_wm_asset_library_ref(const bContext *C)
|
|||||||
return static_cast<AssetLibraryReference *>(ctx_data_pointer_get(C, "asset_library_reference"));
|
return static_cast<AssetLibraryReference *>(ctx_data_pointer_get(C, "asset_library_reference"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static AssetHandle ctx_wm_asset_handle(const bContext *C, bool *r_is_valid)
|
|
||||||
{
|
|
||||||
/* TODO remove and use #AssetRepresentation instead. */
|
|
||||||
FileDirEntry *file =
|
|
||||||
(FileDirEntry *)CTX_data_pointer_get_type(C, "active_file", &RNA_FileSelectEntry).data;
|
|
||||||
if (file && file->asset) {
|
|
||||||
*r_is_valid = true;
|
|
||||||
return AssetHandle{file};
|
|
||||||
}
|
|
||||||
|
|
||||||
*r_is_valid = false;
|
|
||||||
return AssetHandle{nullptr};
|
|
||||||
}
|
|
||||||
|
|
||||||
blender::asset_system::AssetRepresentation *CTX_wm_asset(const bContext *C)
|
blender::asset_system::AssetRepresentation *CTX_wm_asset(const bContext *C)
|
||||||
{
|
{
|
||||||
if (auto *asset = static_cast<blender::asset_system::AssetRepresentation *>(
|
if (auto *asset = static_cast<blender::asset_system::AssetRepresentation *>(
|
||||||
@ -1550,14 +1536,6 @@ blender::asset_system::AssetRepresentation *CTX_wm_asset(const bContext *C)
|
|||||||
{
|
{
|
||||||
return asset;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Expose the asset representation from the asset-handle.
|
|
||||||
* TODO(Julian): #AssetHandle should be properly replaced by #AssetRepresentation. */
|
|
||||||
bool is_valid;
|
|
||||||
if (AssetHandle handle = ctx_wm_asset_handle(C, &is_valid); is_valid) {
|
|
||||||
return handle.file_data->asset;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ const char *file_context_dir[] = {
|
|||||||
"active_file",
|
"active_file",
|
||||||
"selected_files",
|
"selected_files",
|
||||||
"asset_library_reference",
|
"asset_library_reference",
|
||||||
|
"asset",
|
||||||
"selected_assets",
|
"selected_assets",
|
||||||
"id",
|
"id",
|
||||||
"selected_ids",
|
"selected_ids",
|
||||||
@ -79,6 +80,16 @@ int /*eContextResult*/ file_context(const bContext *C,
|
|||||||
result, &screen->id, &RNA_AssetLibraryReference, &asset_params->asset_library_ref);
|
result, &screen->id, &RNA_AssetLibraryReference, &asset_params->asset_library_ref);
|
||||||
return CTX_RESULT_OK;
|
return CTX_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CTX_data_equals(member, "asset")) {
|
||||||
|
FileDirEntry *file = filelist_file(sfile->files, params->active_file);
|
||||||
|
if (file == nullptr) {
|
||||||
|
return CTX_RESULT_NO_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
CTX_data_pointer_set(result, &screen->id, &RNA_AssetRepresentation, file->asset);
|
||||||
|
return CTX_RESULT_OK;
|
||||||
|
}
|
||||||
if (CTX_data_equals(member, "selected_assets")) {
|
if (CTX_data_equals(member, "selected_assets")) {
|
||||||
const int num_files_filtered = filelist_files_ensure(sfile->files);
|
const int num_files_filtered = filelist_files_ensure(sfile->files);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user