diff --git a/source/blender/editors/space_file/file_draw.cc b/source/blender/editors/space_file/file_draw.cc index ebe2b2ac173..f25306958f4 100644 --- a/source/blender/editors/space_file/file_draw.cc +++ b/source/blender/editors/space_file/file_draw.cc @@ -359,6 +359,7 @@ static void file_draw_preview(const FileDirEntry *file, bool show_outline = !is_icon && (file->typeflag & (FILE_TYPE_IMAGE | FILE_TYPE_MOVIE | FILE_TYPE_BLENDER)); const bool is_offline = (file->attributes & FILE_ATTR_OFFLINE); + const bool is_loading = file->flags & FILE_ENTRY_PREVIEW_LOADING; BLI_assert(imb != nullptr); @@ -420,20 +421,23 @@ static void file_draw_preview(const FileDirEntry *file, GPU_blend(GPU_BLEND_ALPHA_PREMULT); } - IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_3D_IMAGE_COLOR); - immDrawPixelsTexTiled_scaling(&state, - float(xco), - float(yco), - imb->x, - imb->y, - GPU_RGBA8, - true, - imb->byte_buffer.data, - scale, - scale, - 1.0f, - 1.0f, - document_img_col); + if (!is_loading) { + /* Don't show outer document image if loading - too flashy. */ + IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_3D_IMAGE_COLOR); + immDrawPixelsTexTiled_scaling(&state, + float(xco), + float(yco), + imb->x, + imb->y, + GPU_RGBA8, + true, + imb->byte_buffer.data, + scale, + scale, + 1.0f, + 1.0f, + document_img_col); + } GPU_blend(GPU_BLEND_ALPHA); @@ -448,11 +452,17 @@ static void file_draw_preview(const FileDirEntry *file, icon_color[1] = 255; icon_color[2] = 255; } + + if (is_loading) { + /* Contrast with background since we are not showing the large document image. */ + UI_GetThemeColor4ubv(TH_TEXT, icon_color); + } + icon_x = xco + (ex / 2.0f) - (icon_size / 2.0f); icon_y = yco + (ey / 2.0f) - (icon_size * ((file->typeflag & FILE_TYPE_DIR) ? 0.78f : 0.75f)); UI_icon_draw_ex(icon_x, icon_y, - icon, + is_loading ? ICON_TEMP : icon, icon_aspect / UI_SCALE_FAC, icon_opacity, 0.0f, @@ -507,7 +517,7 @@ static void file_draw_preview(const FileDirEntry *file, UI_NO_ICON_OVERLAY_TEXT); } } - else if (icon && !is_icon && !(file->typeflag & FILE_TYPE_FTFONT)) { + else if (icon && ((!is_icon && !(file->typeflag & FILE_TYPE_FTFONT)) || is_loading)) { /* Smaller, fainter icon at bottom-left for preview image thumbnail, but not for fonts. */ float icon_x, icon_y; const uchar dark[4] = {0, 0, 0, 255}; diff --git a/source/blender/editors/space_file/filelist.cc b/source/blender/editors/space_file/filelist.cc index e47da0f0187..6e08919bd69 100644 --- a/source/blender/editors/space_file/filelist.cc +++ b/source/blender/editors/space_file/filelist.cc @@ -1628,7 +1628,15 @@ static void filelist_cache_previews_push(FileList *filelist, FileDirEntry *entry * some time in heavy files, because otherwise for each missing preview and for each preview * reload, we'd reopen the .blend to look for the preview. */ if ((entry->typeflag & FILE_TYPE_BLENDERLIB) && - (entry->flags & FILE_ENTRY_BLENDERLIB_NO_PREVIEW)) { + (entry->flags & FILE_ENTRY_BLENDERLIB_NO_PREVIEW)) + { + return; + } + + /* External ID that is also a directory is never previewed. */ + if ((entry->typeflag & (FILE_TYPE_BLENDERLIB | FILE_TYPE_DIR)) == + (FILE_TYPE_BLENDERLIB | FILE_TYPE_DIR)) + { return; } @@ -2604,7 +2612,6 @@ bool filelist_cache_previews_update(FileList *filelist) /* Move ownership over icon. */ entry->preview_icon_id = preview->icon_id; preview->icon_id = 0; - changed = true; } else { /* We want to avoid re-processing this entry continuously! @@ -2613,6 +2620,7 @@ bool filelist_cache_previews_update(FileList *filelist) entry->flags |= FILE_ENTRY_INVALID_PREVIEW; } entry->flags &= ~FILE_ENTRY_PREVIEW_LOADING; + changed = true; } else { BKE_icon_delete(preview->icon_id);