Cleanup: File Browser: Improve preview/icon drawing names

`file_draw_preview()` does multiple things and is quite hard to follow
already, it needs some improvents. One issue is naming that I always
found made the function unnecessarily confusing. For example `is_icon`
had nothing to do with the `icon` parameter, you'd have to search around
the code a bit to understand what it was actually representing.

Attempt to make variable and function names more clear.

Also reduce variable scope and add a comment.
This commit is contained in:
Julian Eisel
2024-12-16 14:46:34 +01:00
parent 6ce1e18a5b
commit 9a6beb915d
4 changed files with 50 additions and 43 deletions

View File

@@ -584,12 +584,12 @@ void asset_preview_ensure_requested(const bContext &C,
ImBuf *asset_image_get(const AssetHandle *asset_handle)
{
ImBuf *imbuf = filelist_file_getimage(asset_handle->file_data);
ImBuf *imbuf = filelist_file_get_preview_image(asset_handle->file_data);
if (imbuf) {
return imbuf;
}
return filelist_geticon_image_ex(asset_handle->file_data);
return filelist_geticon_special_file_image_ex(asset_handle->file_data);
}
bool listen(const wmNotifier *notifier)

View File

@@ -139,7 +139,7 @@ static void file_draw_tooltip_custom_func(bContext & /*C*/, uiTooltipData &tip,
BLI_assert_msg(!file->asset, "Asset tooltip should never be overridden here.");
/* Check the FileDirEntry first to see if the preview is already loaded. */
ImBuf *thumb = filelist_file_getimage(file);
ImBuf *thumb = filelist_file_get_preview_image(file);
/* Only free if it is loaded later. */
bool free_imbuf = (thumb == nullptr);
@@ -553,9 +553,9 @@ static void file_draw_preview(const FileList *files,
const rcti *tile_draw_rect,
const float icon_aspect,
const ImBuf *imb,
const int icon,
const int file_type_icon,
FileLayout *layout,
const bool is_icon,
const bool is_special_file_image,
const bool dimmed,
const bool is_link,
float *r_scale)
@@ -567,8 +567,9 @@ static void file_draw_preview(const FileList *files,
float scaledx, scaledy;
float scale;
int ex, ey;
bool show_outline = !is_icon && (file->typeflag & (FILE_TYPE_IMAGE | FILE_TYPE_OBJECT_IO |
FILE_TYPE_MOVIE | FILE_TYPE_BLENDER));
bool show_outline = !is_special_file_image &&
(file->typeflag & (FILE_TYPE_IMAGE | FILE_TYPE_OBJECT_IO | FILE_TYPE_MOVIE |
FILE_TYPE_BLENDER));
const bool is_offline = (file->attributes & FILE_ATTR_OFFLINE);
const bool is_loading = filelist_file_is_preview_pending(files, file);
@@ -578,7 +579,7 @@ static void file_draw_preview(const FileList *files,
ui_imby = imb->y * UI_SCALE_FAC;
/* Unlike thumbnails, icons are not scaled up. */
if (((ui_imbx > layout->prv_w) || (ui_imby > layout->prv_h)) ||
(!is_icon && ((ui_imbx < layout->prv_w) || (ui_imby < layout->prv_h))))
(!is_special_file_image && ((ui_imbx < layout->prv_w) || (ui_imby < layout->prv_h))))
{
if (imb->x > imb->y) {
scaledx = float(layout->prv_w);
@@ -611,7 +612,7 @@ static void file_draw_preview(const FileList *files,
/* the large image */
float document_img_col[4] = {1.0f, 1.0f, 1.0f, 1.0f};
if (is_icon) {
if (is_special_file_image) {
if (file->typeflag & FILE_TYPE_DIR) {
UI_GetThemeColor4fv(TH_ICON_FOLDER, document_img_col);
}
@@ -627,19 +628,19 @@ static void file_draw_preview(const FileList *files,
document_img_col[3] *= 0.3f;
}
if (!is_icon && ELEM(file->typeflag, FILE_TYPE_IMAGE, FILE_TYPE_OBJECT_IO)) {
if (!is_special_file_image && ELEM(file->typeflag, FILE_TYPE_IMAGE, FILE_TYPE_OBJECT_IO)) {
/* Draw checker pattern behind image previews in case they have transparency. */
imm_draw_box_checker_2d(float(xco), float(yco), float(xco + ex), float(yco + ey));
}
if (!is_icon && file->typeflag & FILE_TYPE_BLENDERLIB) {
if (!is_special_file_image && file->typeflag & FILE_TYPE_BLENDERLIB) {
/* Datablock preview images use premultiplied alpha. */
GPU_blend(GPU_BLEND_ALPHA_PREMULT);
}
if (!is_loading) {
/* Don't show outer document image if loading - too flashy. */
if (is_icon) {
if (is_special_file_image) {
/* Draw large folder or document icon. */
const int icon_large = (file->typeflag & FILE_TYPE_DIR) ? ICON_FILE_FOLDER_LARGE :
ICON_FILE_LARGE;
@@ -675,7 +676,7 @@ static void file_draw_preview(const FileList *files,
}
}
if (icon && is_icon) {
if (file_type_icon && is_special_file_image) {
/* Small icon in the middle of large image, scaled to fit container and UI scale */
float icon_x, icon_y;
float icon_opacity = 0.4f;
@@ -695,7 +696,7 @@ static void file_draw_preview(const FileList *files,
icon_y = yco + (file->typeflag & FILE_TYPE_DIR ? ex * 0.19f : ex * 0.15f);
UI_icon_draw_ex(icon_x,
icon_y,
is_loading ? ICON_TEMP : icon,
is_loading ? ICON_TEMP : file_type_icon,
icon_aspect / UI_SCALE_FAC / (file->typeflag & FILE_TYPE_DIR ? 1.5f : 2.0f),
icon_opacity,
0.0f,
@@ -732,11 +733,13 @@ static void file_draw_preview(const FileList *files,
false,
UI_NO_ICON_OVERLAY_TEXT);
}
else if (icon && ((!is_icon && !(file->typeflag & FILE_TYPE_FTFONT)) || is_loading)) {
else if (file_type_icon &&
((!is_special_file_image && !(file->typeflag & FILE_TYPE_FTFONT)) || is_loading))
{
/* Smaller, fainter icon at bottom-left for preview image thumbnail, but not for fonts. */
UI_icon_draw_ex(icon_x,
icon_y,
icon,
file_type_icon,
1.0f / UI_SCALE_FAC,
0.6f,
0.0f,
@@ -1125,7 +1128,6 @@ void file_draw_list(const bContext *C, ARegion *region)
int offset;
int column_width, textheight;
int i;
bool is_icon;
eFontStyle_Align align;
bool do_drag;
uchar text_col[4];
@@ -1233,12 +1235,13 @@ void file_draw_list(const bContext *C, ARegion *region)
const bool is_link = (file->attributes & FILE_ATTR_ANY_LINK);
if (FILE_IMGDISPLAY == params->display) {
const int icon = filelist_geticon(files, i, false);
is_icon = false;
const ImBuf *imb = filelist_getimage(files, i);
const int file_type_icon = filelist_geticon_file_type(files, i, false);
bool is_special_file_image = false;
const ImBuf *imb = filelist_get_preview_image(files, i);
if (!imb) {
imb = filelist_geticon_image(files, i);
is_icon = true;
imb = filelist_geticon_special_file_image(files, i);
is_special_file_image = true;
}
float scale = 0;
@@ -1247,20 +1250,20 @@ void file_draw_list(const bContext *C, ARegion *region)
&tile_draw_rect,
thumb_icon_aspect,
imb,
icon,
file_type_icon,
layout,
is_icon,
is_special_file_image,
is_hidden,
is_link,
/* Returns the scale which is needed below. */
&scale);
if (do_drag) {
file_add_preview_drag_but(
sfile, block, layout, file, path, &tile_draw_rect, imb, icon, scale);
sfile, block, layout, file, path, &tile_draw_rect, imb, file_type_icon, scale);
}
}
else {
const int icon = filelist_geticon(files, i, true);
const int icon = filelist_geticon_file_type(files, i, true);
icon_ofs += ICON_DEFAULT_WIDTH_SCALE + 0.2f * UI_UNIT_X;

View File

@@ -1201,14 +1201,14 @@ static FileDirEntry *filelist_geticon_get_file(FileList *filelist, const int ind
return filelist_file(filelist, index);
}
ImBuf *filelist_getimage(FileList *filelist, const int index)
ImBuf *filelist_get_preview_image(FileList *filelist, const int index)
{
FileDirEntry *file = filelist_geticon_get_file(filelist, index);
return file->preview_icon_id ? BKE_icon_imbuf_get_buffer(file->preview_icon_id) : nullptr;
}
ImBuf *filelist_file_getimage(const FileDirEntry *file)
ImBuf *filelist_file_get_preview_image(const FileDirEntry *file)
{
return file->preview_icon_id ? BKE_icon_imbuf_get_buffer(file->preview_icon_id) : nullptr;
}
@@ -1222,7 +1222,7 @@ static ImBuf *filelist_ensure_special_file_image(SpecialFileImages image, int ic
return gSpecialFileImages[int(image)] = UI_svg_icon_bitmap(icon, 256.0f, false);
}
ImBuf *filelist_geticon_image_ex(const FileDirEntry *file)
ImBuf *filelist_geticon_special_file_image_ex(const FileDirEntry *file)
{
ImBuf *ibuf = nullptr;
@@ -1241,16 +1241,16 @@ ImBuf *filelist_geticon_image_ex(const FileDirEntry *file)
return ibuf;
}
ImBuf *filelist_geticon_image(FileList *filelist, const int index)
ImBuf *filelist_geticon_special_file_image(FileList *filelist, const int index)
{
FileDirEntry *file = filelist_geticon_get_file(filelist, index);
return filelist_geticon_image_ex(file);
return filelist_geticon_special_file_image_ex(file);
}
static int filelist_geticon_ex(const FileList *filelist,
const FileDirEntry *file,
const bool is_main,
const bool ignore_libdir)
static int filelist_geticon_file_type_ex(const FileList *filelist,
const FileDirEntry *file,
const bool is_main,
const bool ignore_libdir)
{
const eFileSel_File_Types typeflag = (eFileSel_File_Types)file->typeflag;
@@ -1364,17 +1364,17 @@ static int filelist_geticon_ex(const FileList *filelist,
return is_main ? ICON_FILE_BLANK : ICON_NONE;
}
int filelist_geticon(FileList *filelist, const int index, const bool is_main)
int filelist_geticon_file_type(FileList *filelist, const int index, const bool is_main)
{
FileDirEntry *file = filelist_geticon_get_file(filelist, index);
return filelist_geticon_ex(filelist, file, is_main, false);
return filelist_geticon_file_type_ex(filelist, file, is_main, false);
}
int ED_file_icon(const FileDirEntry *file)
{
return file->preview_icon_id ? file->preview_icon_id :
filelist_geticon_ex(nullptr, file, false, false);
filelist_geticon_file_type_ex(nullptr, file, false, false);
}
static bool filelist_intern_entry_is_main_file(const FileListInternEntry *intern_entry)

View File

@@ -83,11 +83,15 @@ bool filelist_file_is_preview_pending(const FileList *filelist, const FileDirEnt
* already loaded, invalid or not supported).
*/
bool filelist_file_ensure_preview_requested(FileList *filelist, FileDirEntry *file);
ImBuf *filelist_getimage(FileList *filelist, int index);
ImBuf *filelist_file_getimage(const FileDirEntry *file);
ImBuf *filelist_geticon_image_ex(const FileDirEntry *file);
ImBuf *filelist_geticon_image(FileList *filelist, int index);
int filelist_geticon(FileList *filelist, int index, bool is_main);
ImBuf *filelist_get_preview_image(FileList *filelist, int index);
ImBuf *filelist_file_get_preview_image(const FileDirEntry *file);
ImBuf *filelist_geticon_special_file_image_ex(const FileDirEntry *file);
/**
* Get one of the larger document icons as image. E.g. a folder or file icon. A file type icon can
* be overlaid on top then.
*/
ImBuf *filelist_geticon_special_file_image(FileList *filelist, int index);
int filelist_geticon_file_type(FileList *filelist, int index, bool is_main);
FileList *filelist_new(short type);
void filelist_settype(FileList *filelist, short type);