diff options
Diffstat (limited to 'source/blender/editors/render/render_preview.c')
-rw-r--r-- | source/blender/editors/render/render_preview.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 0cc944436b2..25353dc30fe 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -103,6 +103,8 @@ #include "ED_view3d.h" #include "ED_view3d_offscreen.h" +#include "UI_interface_icons.h" + #ifndef NDEBUG /* Used for database init assert(). */ # include "BLI_threads.h" @@ -1948,4 +1950,45 @@ void ED_preview_kill_jobs(wmWindowManager *wm, Main *UNUSED(bmain)) } } +typedef struct PreviewRestartQueueEntry { + struct PreviewRestartQueueEntry *next, *prev; + + enum eIconSizes size; + ID *id; +} PreviewRestartQueueEntry; + +static ListBase /* #PreviewRestartQueueEntry */ G_restart_previews_queue; + +void ED_preview_restart_queue_free(void) +{ + BLI_freelistN(&G_restart_previews_queue); +} + +void ED_preview_restart_queue_add(ID *id, enum eIconSizes size) +{ + PreviewRestartQueueEntry *queue_entry = MEM_mallocN(sizeof(*queue_entry), __func__); + queue_entry->size = size; + queue_entry->id = id; + BLI_addtail(&G_restart_previews_queue, queue_entry); +} + +void ED_preview_restart_queue_work(const bContext *C) +{ + LISTBASE_FOREACH_MUTABLE (PreviewRestartQueueEntry *, queue_entry, &G_restart_previews_queue) { + PreviewImage *preview = BKE_previewimg_id_get(queue_entry->id); + if (!preview) { + continue; + } + if (preview->flag[queue_entry->size] & PRV_USER_EDITED) { + /* Don't touch custom previews. */ + continue; + } + + BKE_previewimg_clear_single(preview, queue_entry->size); + UI_icon_render_id(C, NULL, queue_entry->id, queue_entry->size, true); + + BLI_freelinkN(&G_restart_previews_queue, queue_entry); + } +} + /** \} */ |