101 ((
ID *)(icon->
obj))->icon_id = 0;
206 Icon *icon =
nullptr;
208 if (!icon_id ||
G.background) {
227 if (p_prv && *p_prv) {
230 (*p_prv)->changed_timestamp[
i]++;
272 if (!
id ||
G.background) {
289 if (p_prv && *p_prv) {
291 (*p_prv)->runtime->icon_id =
id->icon_id;
317 if (!gpl ||
G.background) {
337 if (!preview ||
G.background) {
345 if (preview->
runtime->icon_id) {
347 return preview->
runtime->icon_id;
351 preview->
runtime->icon_id =
id->icon_id;
352 return preview->
runtime->icon_id;
357 if (!preview->
runtime->icon_id) {
365 id->icon_id = preview->
runtime->icon_id;
372 return preview->
runtime->icon_id;
393 CLOG_ERROR(&
LOG,
"icon ID does not refer to an imbuf icon: %d", icon_id);
404 Icon *icon =
nullptr;
439 const int icon_id =
id->icon_id;
523 std::unique_ptr<uchar> data_wrapper(std::move(
data));
527 const int div = 3 * 2 * 3;
528 const int coords_len = data_len / div;
529 if (coords_len * div != data_len) {
533 const uchar header[4] = {
'V',
'C',
'O', 0};
534 uchar *p = data_wrapper.get();
535 if (memcmp(p, header,
ARRAY_SIZE(header)) != 0) {
547 geom->
coords =
reinterpret_cast<decltype(geom-
>coords)>(p);
548 geom->
colors =
reinterpret_cast<decltype(geom-
>colors)>(p + (data_len / 3));
551 geom->
mem = data_wrapper.release();
560 if (
data ==
nullptr) {
PreviewImage * BKE_previewimg_id_ensure(ID *id)
PreviewImage ** BKE_previewimg_id_get_p(const ID *id)
void BKE_studiolight_unset_icon_id(StudioLight *sl, int icon_id)
#define BLI_assert_unreachable()
File and directory operations.
void * BLI_file_read_binary_as_mem(const char *filepath, size_t pad_bytes, size_t *r_size)
void * BLI_ghash_popkey(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp) ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_int_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
void BLI_linklist_lockfree_free(LockfreeLinkList *list, LockfreeeLinkNodeFreeFP free_func)
LockfreeLinkNode * BLI_linklist_lockfree_begin(LockfreeLinkList *list)
void BLI_linklist_lockfree_clear(LockfreeLinkList *list, LockfreeeLinkNodeFreeFP free_func)
void BLI_linklist_lockfree_insert(LockfreeLinkList *list, LockfreeLinkNode *node)
void BLI_linklist_lockfree_init(LockfreeLinkList *list)
int BLI_thread_is_main(void)
#define POINTER_FROM_INT(i)
#define CLOG_ERROR(clg_ref,...)
ID and Library types, which are fundamental for SDNA.
void IMB_freeImBuf(ImBuf *ibuf)
Read Guarded memory(de)allocation.
BMesh const char void * data
int BKE_icon_gplayer_color_ensure(bGPDlayer *gpl)
static LockfreeLinkList g_icon_delete_queue
static int icon_id_ensure_create_icon(ID *id)
void BKE_icon_changed(const int icon_id)
void BKE_icons_deferred_free()
static void icon_free(void *val)
static int get_next_free_id()
int BKE_icon_preview_ensure(ID *id, PreviewImage *preview)
int BKE_icon_imbuf_create(ImBuf *ibuf)
int BKE_icon_ensure_studio_light(StudioLight *sl, int id_type)
static void icon_free_data(int icon_id, Icon *icon)
void BKE_icon_id_delete(ID *id)
static int icon_gplayer_color_ensure_create_icon(bGPDlayer *gpl)
Icon_Geom * BKE_icon_geom_from_memory(uchar *data, size_t data_len)
int BKE_icon_geom_ensure(Icon_Geom *geom)
static blender::Mutex gIconMutex
static Icon * icon_ghash_lookup(int icon_id)
static void icon_add_to_deferred_delete_queue(int icon_id)
int BKE_icon_id_ensure(ID *id)
void BKE_icon_set(const int icon_id, Icon *icon)
bool BKE_icon_delete_unmanaged(const int icon_id)
Icon_Geom * BKE_icon_geom_from_file(const char *filename)
ImBuf * BKE_icon_imbuf_get_buffer(int icon_id)
static Icon * icon_create(int icon_id, int obj_type, void *obj)
Icon * BKE_icon_get(const int icon_id)
void BKE_icons_init(int first_dyn_id)
bool BKE_icon_delete(const int icon_id)
void * MEM_mallocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
DeferredIconDeleteNode * next
unsigned char(* colors)[4]
unsigned char(* coords)[2]
DrawInfoFreeFP drawinfo_free
struct LockfreeLinkNode * next
PreviewImageRuntimeHandle * runtime
bGPDlayer_Runtime runtime