Blender V5.0
file_draw.cc File Reference
#include <algorithm>
#include <cerrno>
#include <cstring>
#include <string>
#include <fmt/format.h>
#include "MEM_guardedalloc.h"
#include "AS_asset_representation.hh"
#include "BLI_fileops.h"
#include "BLI_fileops_types.h"
#include "BLI_listbase.h"
#include "BLI_math_color.h"
#include "BLI_math_vector.h"
#include "BLI_path_utils.hh"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_utildefines.h"
#include "BIF_glutil.hh"
#include "BKE_blendfile.hh"
#include "BKE_context.hh"
#include "BKE_report.hh"
#include "BLO_readfile.hh"
#include "BLT_translation.hh"
#include "BLF_api.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "IMB_metadata.hh"
#include "IMB_thumbs.hh"
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "RNA_access.hh"
#include "RNA_prototypes.hh"
#include "ED_asset.hh"
#include "ED_fileselect.hh"
#include "ED_screen.hh"
#include "UI_interface.hh"
#include "UI_interface_icons.hh"
#include "UI_resources.hh"
#include "UI_view2d.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "GPU_immediate.hh"
#include "GPU_immediate_util.hh"
#include "GPU_state.hh"
#include "filelist.hh"
#include "file_intern.hh"

Go to the source code of this file.

Classes

struct  FileTooltipData

Functions

void ED_file_path_button (bScreen *screen, const SpaceFile *sfile, FileSelectParams *params, uiBlock *block)
static FileTooltipDatafile_tooltip_data_create (const SpaceFile *sfile, const FileDirEntry *file)
static void file_draw_tooltip_custom_func (bContext &, uiTooltipData &tip, uiBut *, void *argN)
static void file_draw_asset_tooltip_custom_func (bContext &, uiTooltipData &tip, uiBut *, void *argN)
static void draw_tile_background (const rcti *draw_rect, int colorid, int shade)
static void file_but_enable_drag (uiBut *but, const SpaceFile *sfile, const FileDirEntry *file, const char *path, const ImBuf *preview_image, int icon, float scale)
static void file_but_tooltip_func_set (const SpaceFile *sfile, const FileDirEntry *file, uiBut *but)
static uiButfile_add_icon_but (const SpaceFile *sfile, uiBlock *block, const char *, const FileDirEntry *file, const rcti *tile_draw_rect, int icon, int width, int height, int padx, bool dimmed)
static uiButfile_add_overlay_icon_but (uiBlock *block, int pos_x, int pos_y, int icon)
static void file_draw_string (int sx, int sy, const char *string, float width, int height, eFontStyle_Align align, const uchar col[4])
static void file_draw_string_mulitline_clipped (const rcti *rect, const char *string, eFontStyle_Align align, const uchar col[4])
static void file_draw_string_multiline (int sx, int sy, const char *string, int wrap_width, int line_height, const uchar text_col[4], int *r_sx, int *r_sy)
void file_calc_previews (const bContext *C, ARegion *region)
static std::tuple< int, int, floatpreview_image_scaled_dimensions_get (const int image_width, const int image_height, const FileLayout &layout)
static void file_add_preview_drag_but (const SpaceFile *sfile, uiBlock *block, FileLayout *layout, const FileDirEntry *file, const char *path, const rcti *tile_draw_rect, const ImBuf *preview_image, const int file_type_icon)
static void file_draw_preview (const FileDirEntry *file, const rcti *tile_draw_rect, const ImBuf *imb, FileLayout *layout, const bool dimmed)
static void file_draw_special_image (const FileDirEntry *file, const rcti *tile_draw_rect, const int file_type_icon, const float icon_aspect, const FileLayout *layout, const bool dimmed)
static void file_draw_loading_icon (const rcti *tile_draw_rect, const float preview_icon_aspect, const FileLayout *layout)
static void file_draw_indicator_icons (const FileList *files, const FileDirEntry *file, const FileLayout *layout, const rcti *tile_draw_rect, const float preview_icon_aspect, const int file_type_icon, const bool has_special_file_image)
static void renamebutton_cb (bContext *C, void *, char *oldname)
static void draw_background (FileLayout *layout, View2D *v2d)
static void draw_dividers (FileLayout *layout, View2D *v2d)
static void draw_columnheader_background (const FileLayout *layout, const View2D *v2d)
static void draw_columnheader_columns (const FileSelectParams *params, FileLayout *layout, const View2D *v2d, const uchar text_col[4])
static const char * filelist_get_details_column_string (FileAttributeColumnType column, FileDirEntry *file, const bool compact, const bool update_stat_strings)
static void draw_details_columns (const FileSelectParams *params, const FileLayout *layout, FileDirEntry *file, const rcti *tile_draw_rect, const uchar text_col[4])
static rcti tile_draw_rect_get (const View2D *v2d, const FileLayout *layout, const int file_idx)
static rcti text_draw_rect_get (const View2D *v2d, const eFileDisplayType display_type, const FileLayout *layout, const int file_idx, const int icon_ofs_x)
void file_draw_list (const bContext *C, ARegion *region)
static void file_draw_invalid_asset_library_hint (const bContext *C, const SpaceFile *sfile, ARegion *region, FileAssetSelectParams *asset_params)
static void file_draw_invalid_library_hint (const bContext *, const SpaceFile *sfile, ARegion *region, const char *blendfile_path, ReportList *reports)
bool file_draw_hint_if_invalid (const bContext *C, const SpaceFile *sfile, ARegion *region)

Function Documentation

◆ draw_background()

◆ draw_columnheader_background()

◆ draw_columnheader_columns()

◆ draw_details_columns()

◆ draw_dividers()

◆ draw_tile_background()

void draw_tile_background ( const rcti * draw_rect,
int colorid,
int shade )
static

◆ ED_file_path_button()

◆ file_add_icon_but()

uiBut * file_add_icon_but ( const SpaceFile * sfile,
uiBlock * block,
const char * ,
const FileDirEntry * file,
const rcti * tile_draw_rect,
int icon,
int width,
int height,
int padx,
bool dimmed )
static

◆ file_add_overlay_icon_but()

uiBut * file_add_overlay_icon_but ( uiBlock * block,
int pos_x,
int pos_y,
int icon )
static

◆ file_add_preview_drag_but()

void file_add_preview_drag_but ( const SpaceFile * sfile,
uiBlock * block,
FileLayout * layout,
const FileDirEntry * file,
const char * path,
const rcti * tile_draw_rect,
const ImBuf * preview_image,
const int file_type_icon )
static

◆ file_but_enable_drag()

◆ file_but_tooltip_func_set()

◆ file_calc_previews()

void file_calc_previews ( const bContext * C,
ARegion * region )

◆ file_draw_asset_tooltip_custom_func()

void file_draw_asset_tooltip_custom_func ( bContext & ,
uiTooltipData & tip,
uiBut * ,
void * argN )
static

Definition at line 367 of file file_draw.cc.

References blender::ed::asset::asset_tooltip().

Referenced by file_but_tooltip_func_set().

◆ file_draw_hint_if_invalid()

◆ file_draw_indicator_icons()

void file_draw_indicator_icons ( const FileList * files,
const FileDirEntry * file,
const FileLayout * layout,
const rcti * tile_draw_rect,
const float preview_icon_aspect,
const int file_type_icon,
const bool has_special_file_image )
static

◆ file_draw_invalid_asset_library_hint()

◆ file_draw_invalid_library_hint()

◆ file_draw_list()

void file_draw_list ( const bContext * C,
ARegion * region )

Definition at line 1288 of file file_draw.cc.

References FileDirEntry::asset, blender::ed::asset::asset_preview_or_icon(), ATTRIBUTE_COLUMN_PADDING, FileLayout::attribute_columns, FileDirEntry::attributes, BIFICONID_LAST_STATIC, BLF_batch_draw_begin(), BLF_batch_draw_end(), BLI_assert, BLI_rcti_size_x(), BLI_rcti_size_y(), C, CHECK_ALL, COLUMN_NAME, copy_v4_v4_uchar(), CTX_wm_manager(), CTX_wm_space_file(), CTX_wm_window(), View2D::cur, FileLayout::curr_size, draw_background(), draw_columnheader_background(), draw_columnheader_columns(), draw_details_columns(), draw_dividers(), draw_tile_background(), ED_fileselect_get_active_params(), ED_fileselect_get_layout(), ED_fileselect_layout_numfiles(), ED_fileselect_layout_offset(), blender::ui::Emboss, file_add_icon_but(), file_add_overlay_icon_but(), file_add_preview_drag_but(), FILE_ATTR_HIDDEN, file_but_enable_drag(), file_but_tooltip_func_set(), file_draw_indicator_icons(), file_draw_loading_icon(), file_draw_preview(), file_draw_special_image(), file_draw_string(), file_draw_string_mulitline_clipped(), FILE_IMGDISPLAY, FILE_LAYOUT_HOR, FILE_MAX_LIBEXTRA, file_params_rename_end(), FILE_SEL_EDITING, FILE_SEL_HIGHLIGHTED, FILE_SEL_SELECTED, FILE_VERTICALDISPLAY, filelist_cache_previews_done(), filelist_cache_previews_running(), filelist_cache_previews_update(), filelist_entry_select_get(), filelist_file(), filelist_file_cache_block(), filelist_file_cache_slidingwindow_set(), filelist_file_get_full_path(), filelist_file_is_preview_pending(), filelist_files_ensure(), filelist_get_preview_image(), filelist_geticon_file_type(), filelist_is_ready(), FILENAME_IS_CURRPAR, SpaceFile::files, FileLayout::flag, FileLayout::flow_columns, i, ICON_DEFAULT_WIDTH_SCALE, IFACE_, Label, min_ii(), FileDirEntry::name, NC_SPACE, ND_SPACE_FILE_PARAMS, ND_SPACE_FILE_PREVIEW, FileLayout::offset_top, params, SpaceFile::previews_timer, FileLayout::prv_h, FileLayout::prv_w, FileDirEntry::relpath, renamebutton_cb(), round_fl_to_int(), FileLayout::rows, Text, text_draw_rect_get(), FileLayout::text_line_height, FileLayout::text_lines_count, TH_BACK, TH_HILITE, TH_TEXT, FileLayout::tile_border_y, tile_draw_rect_get(), FileLayout::tile_h, UI_block_begin(), UI_block_draw(), UI_block_end(), UI_but_active_only(), UI_BUT_DRAG_FULL_BUT, UI_but_dragflag_enable(), UI_but_flag_disable(), UI_but_flag_enable(), UI_but_func_rename_set(), UI_BUT_NO_UTF8, UI_BUT_UNDO, UI_CNR_NONE, UI_draw_roundbox_corner_set(), UI_fontstyle_draw_simple(), UI_fontstyle_string_width(), UI_GetThemeColor4ubv(), UI_SCALE_FAC, UI_style_get(), UI_STYLE_TEXT_CENTER, UI_STYLE_TEXT_LEFT, UI_UNIT_X, UI_UNIT_Y, uiDefBut(), UNUSED_VARS_NDEBUG, ARegion::v2d, uiStyle::widget, FileAttributeColumn::width, FileLayout::width, WM_event_add_notifier_ex(), WM_event_timer_add_notifier(), WM_event_timer_remove_notifier(), rctf::xmin, rcti::xmin, rctf::ymax, rcti::ymax, and rcti::ymin.

Referenced by file_main_region_draw().

◆ file_draw_loading_icon()

void file_draw_loading_icon ( const rcti * tile_draw_rect,
const float preview_icon_aspect,
const FileLayout * layout )
static

◆ file_draw_preview()

◆ file_draw_special_image()

◆ file_draw_string()

◆ file_draw_string_mulitline_clipped()

void file_draw_string_mulitline_clipped ( const rcti * rect,
const char * string,
eFontStyle_Align align,
const uchar col[4] )
static

Draw the string over at max line_count lines, clipping in the middle so it fits.

Definition at line 536 of file file_draw.cc.

References BLI_rcti_size_x(), col, UI_fontstyle_draw_multiline_clipped(), UI_style_get(), and uiStyle::widget.

Referenced by file_draw_list().

◆ file_draw_string_multiline()

void file_draw_string_multiline ( int sx,
int sy,
const char * string,
int wrap_width,
int line_height,
const uchar text_col[4],
int * r_sx,
int * r_sy )
static
Parameters
r_sx,r_syThe lower right corner of the last line drawn, plus the height of the last line. This is the cursor position on completion to allow drawing more text behind that.

Definition at line 556 of file file_draw.cc.

References uiFontStyleDraw_Params::align, BLF_boundbox(), BLF_disable(), BLF_enable(), BLF_WORD_WRAP, BLF_wordwrap(), BLI_rcti_size_y(), len, result, UI_fontstyle_draw_ex(), UI_style_get(), UI_STYLE_TEXT_LEFT, uiFontStyle::uifont_id, uiStyle::widget, uiFontStyleDraw_Params::word_wrap, rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.

Referenced by file_draw_invalid_asset_library_hint(), and file_draw_invalid_library_hint().

◆ file_draw_tooltip_custom_func()

void file_draw_tooltip_custom_func ( bContext & ,
uiTooltipData & tip,
uiBut * ,
void * argN )
static

Definition at line 137 of file file_draw.cc.

References FileDirEntry::asset, FileDirEntry::attributes, uiTooltipImage::background, BLI_assert_msg, BLI_filelist_entry_datetime_to_string(), BLI_filelist_entry_size_to_string(), BLI_path_split_dir_part(), BLI_str_format_uint64_grouped(), BLI_STR_FORMAT_UINT64_GROUPED_SIZE, BLO_version_from_file(), uiTooltipImage::border, Checkerboard_Themed, ED_fileselect_get_active_params(), FileTooltipData::file, FILE_ATTR_OFFLINE, FILE_ATTR_READONLY, FILE_ATTR_RESTRICTED, FILE_ATTR_SYSTEM, FILE_IMGDISPLAY, FILE_MAX, FILE_MAX_LIBEXTRA, FILE_TYPE_BLENDER, FILE_TYPE_BLENDER_BACKUP, FILE_TYPE_BLENDERLIB, FILE_TYPE_DIR, FILE_TYPE_FTFONT, FILE_TYPE_IMAGE, FILE_TYPE_MOVIE, FILELIST_DIRENTRY_DATE_LEN, FILELIST_DIRENTRY_TIME_LEN, filelist_file_get_full_path(), filelist_file_get_preview_image(), SpaceFile::files, uiTooltipImage::height, uiTooltipImage::ibuf, IMB_font_preview(), IMB_freeImBuf(), IMB_metadata_get_field(), IMB_thumb_manage(), IMB_thumb_read(), ImBuf::metadata, N_, FileDirEntry::name, None, params, uiTooltipImage::premultiplied, FileDirEntry::redirection_path, rgba_uchar_to_float(), FileTooltipData::sfile, FileDirEntry::size, size(), SNPRINTF_UTF8, uiWidgetColors::text, uiTooltipImage::text_color, THB_LARGE, THB_SOURCE_IMAGE, THB_SOURCE_MOVIE, FileDirEntry::time, TIP_, bTheme::tui, FileDirEntry::typeflag, UI_GetTheme(), UI_SCALE_FAC, UI_TIP_LC_ALERT, UI_TIP_LC_MAIN, UI_TIP_LC_NORMAL, UI_TIP_STYLE_HEADER, UI_TIP_STYLE_NORMAL, UI_TIP_STYLE_SPACER, UI_tooltip_image_field_add(), UI_tooltip_text_field_add(), ThemeUI::wcol_tooltip, uiTooltipImage::width, ImBuf::x, and ImBuf::y.

Referenced by file_but_tooltip_func_set().

◆ file_tooltip_data_create()

FileTooltipData * file_tooltip_data_create ( const SpaceFile * sfile,
const FileDirEntry * file )
static

Definition at line 129 of file file_draw.cc.

References data, and MEM_mallocN().

Referenced by file_but_tooltip_func_set().

◆ filelist_get_details_column_string()

◆ preview_image_scaled_dimensions_get()

std::tuple< int, int, float > preview_image_scaled_dimensions_get ( const int image_width,
const int image_height,
const FileLayout & layout )
static

Definition at line 614 of file file_draw.cc.

References float, image_height, image_width, FileLayout::prv_h, FileLayout::prv_w, and UI_SCALE_FAC.

Referenced by file_draw_preview().

◆ renamebutton_cb()

◆ text_draw_rect_get()

rcti text_draw_rect_get ( const View2D * v2d,
const eFileDisplayType display_type,
const FileLayout * layout,
const int file_idx,
const int icon_ofs_x )
static

◆ tile_draw_rect_get()

rcti tile_draw_rect_get ( const View2D * v2d,
const FileLayout * layout,
const int file_idx )
static