Blender V5.0
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
10
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#include "ED_render.hh"
29
30#include "WM_types.hh"
31
32namespace blender::ed::asset {
33
34bool mark_id(ID *id)
35{
36 if (id->asset_data) {
37 return false;
38 }
39 if (!BKE_id_can_be_asset(id)) {
40 return false;
41 }
42
44
45 const IDTypeInfo *id_type_info = BKE_idtype_get_info_from_id(id);
46 id->asset_data = BKE_asset_metadata_create();
47 if (AssetTypeInfo *type_info = id_type_info->asset_type_info) {
48 id->asset_data->local_type_info = type_info;
49 type_info->on_mark_asset_fn(id, id->asset_data);
50 }
51
52 /* Important for asset storage to update properly! */
54
55 return true;
56}
57
58void generate_preview(const bContext *C, ID *id)
59{
61 return;
62 }
63
65
67 if (preview) {
68 BKE_previewimg_clear(preview);
69 }
70
71 UI_icon_render_id(C, nullptr, id, ICON_SIZE_PREVIEW, !G.background);
72}
73
74bool clear_id(ID *id)
75{
76 if (!id->asset_data) {
77 return false;
78 }
79
80 const IDTypeInfo *id_type_info = BKE_idtype_get_info_from_id(id);
81 if (AssetTypeInfo *type_info = id_type_info->asset_type_info) {
82 if (type_info->on_clear_asset_fn) {
83 type_info->on_clear_asset_fn(id, id->asset_data);
84 }
85 }
86
89
90 /* Important for asset storage to update properly! */
92
93 return true;
94}
95
97{
98 ID *id;
99 FOREACH_MAIN_ID_BEGIN (bmain, id) {
100 if (!id->asset_data || !id->asset_data->local_type_info) {
101 continue;
102 }
103
105 id->asset_data->local_type_info->pre_save_fn(id, id->asset_data);
106 }
107 }
109}
110
112{
113 /* Context needs a "id" pointer to be set for #ASSET_OT_mark()/#ASSET_OT_mark_single() and
114 * #ASSET_OT_clear()/#ASSET_OT_clear_single() to use. */
115 const ID *id = static_cast<ID *>(CTX_data_pointer_get_type_silent(C, "id", &RNA_ID).data);
116 if (!id) {
117 return false;
118 }
119 return id_type_is_supported(id);
120}
121
122bool copy_to_id(const AssetMetaData *asset_data, ID *destination)
123{
124 if (!BKE_id_can_be_asset(destination)) {
125 return false;
126 }
127
128 if (destination->asset_data) {
129 BKE_asset_metadata_free(&destination->asset_data);
130 }
131 destination->asset_data = BKE_asset_metadata_copy(asset_data);
132 return true;
133}
134
135} // 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)
wmWindowManager * CTX_wm_manager(const bContext *C)
const IDTypeInfo * BKE_idtype_get_info_from_id(const ID *id)
Definition idtype.cc:146
void id_fake_user_set(ID *id)
Definition lib_id.cc:396
void id_fake_user_clear(ID *id)
Definition lib_id.cc:404
bool BKE_id_can_be_asset(const ID *id)
Definition lib_id.cc:2505
#define FOREACH_MAIN_ID_END
Definition BKE_main.hh:583
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
Definition BKE_main.hh:577
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
bool ED_preview_id_is_supported(const ID *id, const char **r_disabled_hint=nullptr)
void ED_preview_kill_jobs_for_id(wmWindowManager *wm, const ID *id)
#define C
Definition RandGen.cpp:29
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:33
AssetTypeInfo * asset_type_info
Definition DNA_ID.h:414
struct AssetMetaData * asset_data
Definition DNA_ID.h:423
void * data
Definition RNA_types.hh:53