Blender  V3.3
asset_mark_clear.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
9 #include "DNA_ID.h"
10 
11 #include "BKE_asset.h"
12 #include "BKE_context.h"
13 #include "BKE_global.h"
14 #include "BKE_icons.h"
15 #include "BKE_idtype.h"
16 #include "BKE_lib_id.h"
17 #include "BKE_main.h"
18 
19 #include "UI_interface_icons.h"
20 
21 #include "RNA_access.h"
22 #include "RNA_prototypes.h"
23 
24 #include "ED_asset_list.h"
25 #include "ED_asset_mark_clear.h"
26 #include "ED_asset_type.h"
27 
29 {
30  if (id->asset_data) {
31  return false;
32  }
33  if (!BKE_id_can_be_asset(id)) {
34  return false;
35  }
36 
37  id_fake_user_set(id);
38 
39  const IDTypeInfo *id_type_info = BKE_idtype_get_info_from_id(id);
40  id->asset_data = BKE_asset_metadata_create();
41  id->asset_data->local_type_info = id_type_info->asset_type_info;
42 
43  /* Important for asset storage to update properly! */
45 
46  return true;
47 }
48 
50 {
52  if (preview) {
54  }
55 
56  UI_icon_render_id(C, nullptr, id, ICON_SIZE_PREVIEW, !G.background);
57 }
58 
60 {
61  if (!id->asset_data) {
62  return false;
63  }
66 
67  /* Important for asset storage to update properly! */
69 
70  return true;
71 }
72 
73 void ED_assets_pre_save(struct Main *bmain)
74 {
75  ID *id;
76  FOREACH_MAIN_ID_BEGIN (bmain, id) {
78  continue;
79  }
80 
82  id->asset_data->local_type_info->pre_save_fn(id, id->asset_data);
83  }
84  }
86 }
87 
89 {
90  /* Context needs a "id" pointer to be set for #ASSET_OT_mark()/#ASSET_OT_clear() to use. */
91  const ID *id = static_cast<ID *>(CTX_data_pointer_get_type_silent(C, "id", &RNA_ID).data);
92  if (!id) {
93  return false;
94  }
95  return ED_asset_type_is_supported(id);
96 }
struct AssetMetaData * BKE_asset_metadata_create(void)
Definition: asset.cc:28
void BKE_asset_metadata_free(struct AssetMetaData **asset_data)
Definition: asset.cc:35
PointerRNA CTX_data_pointer_get_type_silent(const bContext *C, const char *member, StructRNA *type)
Definition: context.c:492
void BKE_previewimg_clear(struct PreviewImage *prv)
Definition: icons.cc:303
struct PreviewImage * BKE_previewimg_id_get(const struct ID *id)
const struct IDTypeInfo * BKE_idtype_get_info_from_id(const struct ID *id)
void id_fake_user_set(struct ID *id)
Definition: lib_id.c:343
bool BKE_id_can_be_asset(const struct ID *id)
void id_fake_user_clear(struct ID *id)
Definition: lib_id.c:351
#define FOREACH_MAIN_ID_END
Definition: BKE_main.h:367
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
Definition: BKE_main.h:361
ID and Library types, which are fundamental for sdna.
@ ICON_SIZE_PREVIEW
Definition: DNA_ID_enums.h:16
void ED_assetlist_storage_tag_main_data_dirty(void)
Definition: asset_list.cc:533
bool ED_asset_type_is_supported(const ID *id)
Definition: asset_type.cc:22
#define C
Definition: RandGen.cpp:25
void UI_icon_render_id(const struct bContext *C, struct Scene *scene, struct ID *id, enum eIconSizes size, bool use_job)
bool ED_asset_mark_id(ID *id)
void ED_assets_pre_save(struct Main *bmain)
bool ED_asset_clear_id(ID *id)
bool ED_asset_can_mark_single_from_context(const bContext *C)
void ED_asset_generate_preview(const bContext *C, ID *id)
#define G(x, y, z)
static const pxr::TfToken preview("preview", pxr::TfToken::Immortal)
struct AssetTypeInfo * local_type_info
PreSaveFn pre_save_fn
Definition: BKE_asset.h:33
struct AssetTypeInfo * asset_type_info
Definition: BKE_idtype.h:144
Definition: DNA_ID.h:368
struct AssetMetaData * asset_data
Definition: DNA_ID.h:375
Definition: BKE_main.h:121
void * data
Definition: RNA_types.h:38