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:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user