Blender V4.3
asset_mark_clear.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11#include "DNA_ID.h"
12
13#include "BKE_asset.hh"
14#include "BKE_context.hh"
15#include "BKE_global.hh"
16#include "BKE_idtype.hh"
17#include "BKE_lib_id.hh"
18#include "BKE_main.hh"
19#include "BKE_preview_image.hh"
20
21#include "UI_interface_icons.hh"
22
23#include "RNA_prototypes.hh"
24
25#include "ED_asset_list.hh"
27#include "ED_asset_type.hh"
28
29#include "WM_types.hh"
30
31namespace blender::ed::asset {
32
33bool mark_id(ID *id)
34{
35 if (id->asset_data) {
36 return false;
37 }
38 if (!BKE_id_can_be_asset(id)) {
39 return false;
40 }
41
43
44 const IDTypeInfo *id_type_info = BKE_idtype_get_info_from_id(id);
45 id->asset_data = BKE_asset_metadata_create();
46 if (AssetTypeInfo *type_info = id_type_info->asset_type_info) {
47 id->asset_data->local_type_info = type_info;
48 type_info->on_mark_asset_fn(id, id->asset_data);
49 }
50
51 /* Important for asset storage to update properly! */
53
54 return true;
55}
56
57void generate_preview(const bContext *C, ID *id)
58{
60 if (preview) {
61 BKE_previewimg_clear(preview);
62 }
63
64 UI_icon_render_id(C, nullptr, id, ICON_SIZE_PREVIEW, !G.background);
65}
66
67bool clear_id(ID *id)
68{
69 if (!id->asset_data) {
70 return false;
71 }
72
73 const IDTypeInfo *id_type_info = BKE_idtype_get_info_from_id(id);
74 if (AssetTypeInfo *type_info = id_type_info->asset_type_info) {
75 if (type_info->on_clear_asset_fn) {
76 type_info->on_clear_asset_fn(id, id->asset_data);
77 }
78 }
79
80 BKE_asset_metadata_free(&id->asset_data);
82
83 /* Important for asset storage to update properly! */
85
86 return true;
87}
88
90{
91 ID *id;
92 FOREACH_MAIN_ID_BEGIN (bmain, id) {
93 if (!id->asset_data || !id->asset_data->local_type_info) {
94 continue;
95 }
96
97 if (id->asset_data->local_type_info->pre_save_fn) {
98 id->asset_data->local_type_info->pre_save_fn(id, id->asset_data);
99 }
100 }
102}
103
105{
106 /* Context needs a "id" pointer to be set for #ASSET_OT_mark()/#ASSET_OT_mark_single() and
107 * #ASSET_OT_clear()/#ASSET_OT_clear_single() to use. */
108 const ID *id = static_cast<ID *>(CTX_data_pointer_get_type_silent(C, "id", &RNA_ID).data);
109 if (!id) {
110 return false;
111 }
112 return id_type_is_supported(id);
113}
114
115bool copy_to_id(const AssetMetaData *asset_data, ID *destination)
116{
117 if (!BKE_id_can_be_asset(destination)) {
118 return false;
119 }
120
121 if (destination->asset_data) {
122 BKE_asset_metadata_free(&destination->asset_data);
123 }
124 destination->asset_data = BKE_asset_metadata_copy(asset_data);
125 return true;
126}
127
128} // namespace blender::ed::asset
AssetMetaData * BKE_asset_metadata_copy(const AssetMetaData *source)
Definition asset.cc:44
AssetMetaData * BKE_asset_metadata_create()
Definition asset.cc:32
void BKE_asset_metadata_free(AssetMetaData **asset_data)
Definition asset.cc:38
PointerRNA CTX_data_pointer_get_type_silent(const bContext *C, const char *member, StructRNA *type)
const IDTypeInfo * BKE_idtype_get_info_from_id(const ID *id)
Definition idtype.cc:150
void id_fake_user_set(ID *id)
Definition lib_id.cc:389
void id_fake_user_clear(ID *id)
Definition lib_id.cc:397
bool BKE_id_can_be_asset(const ID *id)
Definition lib_id.cc:2438
#define FOREACH_MAIN_ID_END
Definition BKE_main.hh:500
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
Definition BKE_main.hh:494
PreviewImage * BKE_previewimg_id_get(const ID *id)
void BKE_previewimg_clear(PreviewImage *prv)
ID and Library types, which are fundamental for SDNA.
@ ICON_SIZE_PREVIEW
void UI_icon_render_id(const bContext *C, Scene *scene, ID *id, enum eIconSizes size, bool use_job)
#define G(x, y, z)
bool copy_to_id(const AssetMetaData *asset_data, ID *destination)
bool can_mark_single_from_context(const bContext *C)
void generate_preview(const bContext *C, ID *id)
void pre_save_assets(Main *bmain)
bool id_type_is_supported(const ID *id)
Definition asset_type.cc:26
The meta-data of an asset. By creating and giving this for a data-block (ID.asset_data),...
struct AssetTypeInfo * local_type_info
PreSaveFn pre_save_fn
Definition BKE_asset.hh:34
AssetTypeInfo * asset_type_info
Definition DNA_ID.h:413
struct AssetMetaData * asset_data
Definition DNA_ID.h:422
void * data
Definition RNA_types.hh:42