diff options
Diffstat (limited to 'source/blender/editors/interface/interface_icons.c')
-rw-r--r-- | source/blender/editors/interface/interface_icons.c | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index 51dd9166e46..679681cb372 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -51,6 +51,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_icons.h" +#include "BKE_appdir.h" #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" @@ -587,7 +588,7 @@ static void init_internal_icons(void) #if 0 // temp disabled if ((btheme != NULL) && btheme->tui.iconfile[0]) { - char *icondir = BLI_get_folder(BLENDER_DATAFILES, "icons"); + char *icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons"); char iconfilestr[FILE_MAX]; if (icondir) { @@ -702,12 +703,12 @@ static void init_iconfile_list(struct ListBase *list) const char *icondir; BLI_listbase_clear(list); - icondir = BLI_get_folder(BLENDER_DATAFILES, "icons"); + icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons"); if (icondir == NULL) return; - totfile = BLI_dir_contents(icondir, &dir); + totfile = BLI_filelist_dir_contents(icondir, &dir); for (i = 0; i < totfile; i++) { if ((dir[i].type & S_IFREG)) { @@ -755,7 +756,7 @@ static void init_iconfile_list(struct ListBase *list) } } - BLI_free_filelist(dir, totfile); + BLI_filelist_free(dir, totfile, NULL); dir = NULL; } @@ -930,7 +931,8 @@ static void icon_create_rect(struct PreviewImage *prv_img, enum eIconSizes size) /* only called when icon has changed */ /* only call with valid pointer from UI_icon_draw */ -static void icon_set_image(bContext *C, ID *id, PreviewImage *prv_img, enum eIconSizes size) +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) @@ -940,8 +942,17 @@ static void icon_set_image(bContext *C, ID *id, PreviewImage *prv_img, enum eIco 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]); + 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(scene, id, prv_img->rect[size], prv_img->w[size], prv_img->h[size]); + } } PreviewImage *UI_icon_to_preview(int icon_id) @@ -1148,29 +1159,30 @@ static void icon_draw_size(float x, float y, int icon_id, float aspect, float al } } -static void ui_id_preview_image_render_size(bContext *C, ID *id, PreviewImage *pi, int size) +static void ui_id_preview_image_render_size( + const bContext *C, Scene *scene, ID *id, PreviewImage *pi, int size, const bool use_job) { if ((pi->changed[size] || !pi->rect[size])) { /* changed only ever set by dynamic icons */ /* create the rect if necessary */ - icon_set_image(C, id, pi, size); + icon_set_image(C, scene, id, pi, size, use_job); pi->changed[size] = 0; } } -static void ui_id_icon_render(bContext *C, ID *id, const bool big) +void UI_id_icon_render(const bContext *C, Scene *scene, ID *id, const bool big, const bool use_job) { PreviewImage *pi = BKE_previewimg_get(id); if (pi) { if (big) - ui_id_preview_image_render_size(C, id, pi, ICON_SIZE_PREVIEW); /* bigger preview size */ + ui_id_preview_image_render_size(C, scene, id, pi, ICON_SIZE_PREVIEW, use_job); /* bigger preview size */ else - ui_id_preview_image_render_size(C, id, pi, ICON_SIZE_ICON); /* icon size */ + ui_id_preview_image_render_size(C, scene, id, pi, ICON_SIZE_ICON, use_job); /* icon size */ } } -static void ui_id_brush_render(bContext *C, ID *id) +static void ui_id_brush_render(const bContext *C, ID *id) { PreviewImage *pi = BKE_previewimg_get(id); enum eIconSizes i; @@ -1182,14 +1194,14 @@ static void ui_id_brush_render(bContext *C, ID *id) /* check if rect needs to be created; changed * only set by dynamic icons */ if ((pi->changed[i] || !pi->rect[i])) { - icon_set_image(C, id, pi, i); + icon_set_image(C, NULL, id, pi, i, true); pi->changed[i] = 0; } } } -static int ui_id_brush_get_icon(bContext *C, ID *id) +static int ui_id_brush_get_icon(const bContext *C, ID *id) { Brush *br = (Brush *)id; @@ -1242,7 +1254,7 @@ static int ui_id_brush_get_icon(bContext *C, ID *id) return id->icon_id; } -int ui_id_icon_get(bContext *C, ID *id, const bool big) +int ui_id_icon_get(const bContext *C, ID *id, const bool big) { int iconid = 0; @@ -1258,7 +1270,7 @@ int ui_id_icon_get(bContext *C, ID *id, const bool big) case ID_LA: /* fall through */ iconid = BKE_icon_getid(id); /* checks if not exists, or changed */ - ui_id_icon_render(C, id, big); + UI_id_icon_render(C, NULL, id, big, true); break; default: break; |