PreviewImage *UI_icon_to_preview(int icon_id) { Icon *icon = BKE_icon_get(icon_id); if (icon) { DrawInfo *di = (DrawInfo *)icon->drawinfo; if (di && di->data.buffer.image) { ImBuf *bbuf; bbuf = IMB_ibImageFromMemory(di->data.buffer.image->datatoc_rect, di->data.buffer.image->datatoc_size, IB_rect, NULL, "<matcap buffer>"); if (bbuf) { PreviewImage *prv = BKE_previewimg_create(); prv->rect[0] = bbuf->rect; prv->w[0] = bbuf->x; prv->h[0] = bbuf->y; bbuf->rect = NULL; IMB_freeImBuf(bbuf); return prv; } } } return NULL; }
PreviewImage* BKE_previewimg_get(ID *id) { PreviewImage* prv_img = NULL; if (GS(id->name) == ID_MA) { Material *mat = (Material*)id; if (!mat->preview) mat->preview = BKE_previewimg_create(); prv_img = mat->preview; } else if (GS(id->name) == ID_TE) { Tex *tex = (Tex*)id; if (!tex->preview) tex->preview = BKE_previewimg_create(); prv_img = tex->preview; } else if (GS(id->name) == ID_WO) { World *wo = (World*)id; if (!wo->preview) wo->preview = BKE_previewimg_create(); prv_img = wo->preview; } else if (GS(id->name) == ID_LA) { Lamp *la = (Lamp*)id; if (!la->preview) la->preview = BKE_previewimg_create(); prv_img = la->preview; } else if (GS(id->name) == ID_IM) { Image *img = (Image*)id; if (!img->preview) img->preview = BKE_previewimg_create(); prv_img = img->preview; } else if (GS(id->name) == ID_BR) { Brush *br = (Brush*)id; if (!br->preview) br->preview = BKE_previewimg_create(); prv_img = br->preview; } return prv_img; }
PreviewImage *BKE_previewimg_id_ensure(ID *id) { PreviewImage **prv_p = BKE_previewimg_id_get_p(id); if (prv_p) { if (*prv_p == NULL) { *prv_p = BKE_previewimg_create(); } return *prv_p; } return NULL; }
/** * Generate an empty PreviewImage, if not yet existing. */ PreviewImage *BKE_previewimg_cached_ensure(const char *name) { PreviewImage *prv = NULL; void **prv_p; if (!BLI_ghash_ensure_p_ex(gCachedPreviews, name, &prv_p, (GHashKeyCopyFP)BLI_strdup)) { *prv_p = BKE_previewimg_create(); } prv = *prv_p; BLI_assert(prv); return prv; }
PreviewImage *UI_icon_to_preview(int icon_id) { Icon *icon = BKE_icon_get(icon_id); if (icon) { DrawInfo *di = (DrawInfo *)icon->drawinfo; if (di) { if (di->type == ICON_TYPE_PREVIEW) { PreviewImage *prv = (icon->type != 0) ? BKE_previewimg_id_ensure((ID *)icon->obj) : icon->obj; if (prv) { return BKE_previewimg_copy(prv); } } else if (di->data.buffer.image) { ImBuf *bbuf; bbuf = IMB_ibImageFromMemory(di->data.buffer.image->datatoc_rect, di->data.buffer.image->datatoc_size, IB_rect, NULL, __func__); if (bbuf) { PreviewImage *prv = BKE_previewimg_create(); prv->rect[0] = bbuf->rect; prv->w[0] = bbuf->x; prv->h[0] = bbuf->y; bbuf->rect = NULL; IMB_freeImBuf(bbuf); return prv; } } } } return NULL; }