/* only call with valid pointer from UI_icon_draw */ static void icon_set_image( const bContext *C, Scene *scene, ID *id, PreviewImage *prv_img, enum eIconSizes size, const bool use_job) { if (!prv_img) { if (G.debug & G_DEBUG) printf("%s: no preview image for this ID: %s\n", __func__, id->name); return; } if (prv_img->flag[size] & PRV_USER_EDITED) { /* user-edited preview, do not auto-update! */ return; } icon_create_rect(prv_img, size); if (use_job) { /* Job (background) version */ ED_preview_icon_job(C, prv_img, id, prv_img->rect[size], prv_img->w[size], prv_img->h[size]); } else { if (!scene) { scene = CTX_data_scene(C); } /* Immediate version */ ED_preview_icon_render(CTX_data_main(C), scene, id, prv_img->rect[size], prv_img->w[size], prv_img->h[size]); } }
/* only call with valid pointer from UI_icon_draw */ static void icon_set_image(bContext *C, ID *id, PreviewImage *prv_img, enum eIconSizes size) { if (!prv_img) { if (G.debug & G_DEBUG) printf("%s: no preview image for this ID: %s\n", __func__, id->name); return; } icon_create_rect(prv_img, size); ED_preview_icon_job(C, prv_img, id, prv_img->rect[size], prv_img->w[size], prv_img->h[size]); }
void ui_icon_ensure_deferred(const bContext *C, const int icon_id, const bool big) { Icon *icon = BKE_icon_get(icon_id); if (icon) { DrawInfo *di = (DrawInfo *)icon->drawinfo; if (!di) { di = icon_create_drawinfo(); icon->drawinfo = di; icon->drawinfo_free = UI_icons_free_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) { const int size = big ? ICON_SIZE_PREVIEW : ICON_SIZE_ICON; if (!prv->use_deferred || prv->rect[size] || (prv->flag[size] & PRV_USER_EDITED)) { return; } icon_create_rect(prv, size); /* Always using job (background) version. */ ED_preview_icon_job(C, prv, NULL, prv->rect[size], prv->w[size], prv->h[size]); prv->flag[size] &= ~PRV_CHANGED; } } } } }