UI: File Browser Thumbnail View SVG Icons

Use the new SVG Icons for large document and folder images when in
thumbnail view in File Browser.

Pull Request: https://projects.blender.org/blender/blender/pulls/123754
This commit is contained in:
Harley Acheson
2024-06-26 04:16:27 +02:00
committed by Harley Acheson
parent 5998bab73f
commit 1d47e3276b

View File

@@ -641,29 +641,45 @@ static void file_draw_preview(const FileList *files,
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);
if (is_icon) {
/* Draw large folder or document icon. */
const int icon = (file->typeflag & FILE_TYPE_DIR) ? ICON_FILE_FOLDER_LARGE : ICON_FILE_LARGE;
uchar icon_col[4];
rgba_float_to_uchar(icon_col, document_img_col);
float icon_x = float(xco) + (file->typeflag & FILE_TYPE_DIR ? 0.0f : ex * -0.142f);
float icon_y = float(yco) + (file->typeflag & FILE_TYPE_DIR ? ex * -0.11f : 0.0f);
UI_icon_draw_ex(icon_x,
icon_y,
icon,
icon_aspect / 4.0f / UI_SCALE_FAC,
document_img_col[3],
0.0f,
icon_col,
false,
UI_NO_ICON_OVERLAY_TEXT);
}
else {
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);
if (icon && is_icon) {
/* Small icon in the middle of large image, scaled to fit container and UI scale */
float icon_x, icon_y;
const float icon_size = 16.0f / icon_aspect * UI_SCALE_FAC;
float icon_opacity = 0.3f;
float icon_opacity = 0.4f;
uchar icon_color[4] = {0, 0, 0, 255};
if (rgb_to_grayscale(document_img_col) < 0.5f) {
icon_color[0] = 255;
@@ -676,12 +692,12 @@ static void file_draw_preview(const FileList *files,
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));
icon_x = xco + (file->typeflag & FILE_TYPE_DIR ? ex * 0.31f : ex * 0.178f);
icon_y = yco + (file->typeflag & FILE_TYPE_DIR ? ex * 0.11f : ex * 0.15f);
UI_icon_draw_ex(icon_x,
icon_y,
is_loading ? ICON_TEMP : icon,
icon_aspect / UI_SCALE_FAC,
icon_aspect / UI_SCALE_FAC / (file->typeflag & FILE_TYPE_DIR ? 1.5f : 2.0f),
icon_opacity,
0.0f,
icon_color,
@@ -735,7 +751,9 @@ static void file_draw_preview(const FileList *files,
UI_NO_ICON_OVERLAY_TEXT);
}
}
else if (icon && ((!is_icon && !(file->typeflag & FILE_TYPE_FTFONT)) || is_loading)) {
else if (icon && icon_aspect < 2.0f &&
((!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};
@@ -783,6 +801,8 @@ static void file_draw_preview(const FileList *files,
/* Contrasting outline around some preview types. */
if (show_outline) {
GPU_blend(GPU_BLEND_ALPHA);
GPUVertFormat *format = immVertexFormat();
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
@@ -1145,7 +1165,7 @@ void file_draw_list(const bContext *C, ARegion *region)
bool do_drag;
uchar text_col[4];
const bool draw_columnheader = (params->display == FILE_VERTICALDISPLAY);
const float thumb_icon_aspect = std::min(64.0f / float(params->thumbnail_size), 2.0f);
const float thumb_icon_aspect = std::min(64.0f / float(params->thumbnail_size), 4.0f);
numfiles = filelist_files_ensure(files);