UI: Improved Preview Feedback and Reduced Flickering #108486

Merged
Julian Eisel merged 5 commits from Harley/blender:BrowserWait into main 2023-06-19 12:24:50 +02:00
2 changed files with 36 additions and 18 deletions

View File

@ -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};

View File

@ -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);