コード例 #1
0
/* 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]);
	}
}
コード例 #2
0
/* 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]);
}
コード例 #3
0
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;
				}
			}
		}
	}
}