From d77ebc41de80a806e80f489558f119c684f4e43f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 28 Jun 2024 03:38:25 +0200 Subject: [PATCH] Cleanup: remove icon file lists & unused functions On started Blender was scanning icons for PNG's to display in the theme menu which hasn't been available since early 2.x days. Also remove some other unused icon functions. Pull Request: https://projects.blender.org/blender/blender/pulls/123870 --- .../editors/include/UI_interface_icons.hh | 22 -- .../editors/interface/interface_icons.cc | 188 ------------------ 2 files changed, 210 deletions(-) diff --git a/source/blender/editors/include/UI_interface_icons.hh b/source/blender/editors/include/UI_interface_icons.hh index 299cb3a455b..3c38204f1b1 100644 --- a/source/blender/editors/include/UI_interface_icons.hh +++ b/source/blender/editors/include/UI_interface_icons.hh @@ -22,12 +22,6 @@ struct PreviewImage; struct Scene; struct bContext; -struct IconFile { - IconFile *next, *prev; - char filename[256]; /* FILE_MAXFILE size */ - int index; -}; - struct IconTextOverlay { char text[5]; uchar color[4] = {0}; @@ -61,11 +55,6 @@ ImBuf *UI_icon_alert_imbuf_get(eAlertIcon icon, float size); */ void UI_icons_init(); -/** - * NOTE: returns unscaled by DPI. - */ -int UI_icon_get_width(int icon_id); -int UI_icon_get_height(int icon_id); bool UI_icon_get_theme_color(int icon_id, unsigned char color[4]); /** @@ -109,23 +98,12 @@ void UI_icon_draw_ex(float x, const IconTextOverlay *text_overlay, const bool inverted = false); -/** - * Draw an monochrome icon into a given coordinate rectangle. The rectangle is used as-is, - * and the icon image fills it. Icon is tinted with indicated color. If icon - * is not found or the icon type is not monochrome, the function does nothing. - */ -void UI_icon_draw_mono_rect( - float x, float y, float width, float height, int icon_id, const uchar color[4]); - void UI_icons_free(); void UI_icons_free_drawinfo(void *drawinfo); void UI_icon_draw_cache_begin(); void UI_icon_draw_cache_end(); -ListBase *UI_iconfile_list(); -int UI_iconfile_get_index(const char *filename); - PreviewImage *UI_icon_to_preview(int icon_id); int UI_icon_from_rnaptr(const bContext *C, PointerRNA *ptr, int rnaicon, bool big); diff --git a/source/blender/editors/interface/interface_icons.cc b/source/blender/editors/interface/interface_icons.cc index 92652bc6bc6..7d438a5048f 100644 --- a/source/blender/editors/interface/interface_icons.cc +++ b/source/blender/editors/interface/interface_icons.cc @@ -146,9 +146,6 @@ struct IconType { }; /* ******************* STATIC LOCAL VARS ******************* */ -/* Static here to cache results of icon directory scan, so it's not - * scanning the file-system each time the menu is drawn. */ -static ListBase iconfilelist = {nullptr, nullptr}; static IconTexture icongltex = {{nullptr, nullptr}, 0, 0, 0, 0.0f, 0.0f}; #ifndef WITH_HEADLESS @@ -939,33 +936,6 @@ static void icon_verify_datatoc(IconImage *iimg) static void init_internal_icons() { -# if 0 /* temp disabled */ - if ((btheme != nullptr) && btheme->tui.iconfile[0]) { - std::optional icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons"); - char iconfilestr[FILE_MAX]; - - if (icondir.has_value()) { - BLI_path_join(iconfilestr, sizeof(iconfilestr), icondir->c_str(), btheme->tui.iconfile); - - /* if the image is missing bbuf will just be nullptr */ - bbuf = IMB_loadiffname(iconfilestr, IB_rect, nullptr); - - if (bbuf && (bbuf->x < ICON_IMAGE_W || bbuf->y < ICON_IMAGE_H)) { - printf( - "\n***WARNING***\n" - "Icons file '%s' too small.\n" - "Using built-in Icons instead\n", - iconfilestr); - IMB_freeImBuf(bbuf); - bbuf = nullptr; - } - } - else { - printf("%s: 'icons' data path not found, continuing\n", __func__); - } - } -# endif - /* Define icons. */ for (int y = 0; y < ICON_GRID_ROWS; y++) { /* Row W has monochrome icons. */ @@ -1052,103 +1022,12 @@ static void init_internal_icons() def_internal_vicon(ICON_LAYERGROUP_COLOR_08, vicon_layergroup_color_draw_08); } -static void init_iconfile_list(ListBase *list) -{ - BLI_listbase_clear(list); - const std::optional icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons"); - - if (!icondir.has_value()) { - return; - } - - direntry *dir; - const int totfile = BLI_filelist_dir_contents(icondir->c_str(), &dir); - - int index = 1; - for (int i = 0; i < totfile; i++) { - if (dir[i].type & S_IFREG) { - const char *filename = dir[i].relname; - - if (BLI_path_extension_check(filename, ".png")) { - /* loading all icons on file start is overkill & slows startup - * its possible they change size after blender load anyway. */ -# if 0 - int ifilex, ifiley; - char iconfilestr[FILE_MAX + 16]; /* allow 256 chars for file+dir */ - ImBuf *bbuf = nullptr; - /* check to see if the image is the right size, continue if not */ - /* copying strings here should go ok, assuming that we never get back - * a complete path to file longer than 256 chars */ - BLI_path_join(iconfilestr, sizeof(iconfilestr), icondir->c_str(), filename); - bbuf = IMB_loadiffname(iconfilestr, IB_rect); - - if (bbuf) { - ifilex = bbuf->x; - ifiley = bbuf->y; - IMB_freeImBuf(bbuf); - } - else { - ifilex = ifiley = 0; - } - - /* bad size or failed to load */ - if ((ifilex != ICON_IMAGE_W) || (ifiley != ICON_IMAGE_H)) { - printf("icon '%s' is wrong size %dx%d\n", iconfilestr, ifilex, ifiley); - continue; - } -# endif /* removed */ - - /* found a potential icon file, so make an entry for it in the cache list */ - IconFile *ifile = MEM_cnew(__func__); - - STRNCPY(ifile->filename, filename); - ifile->index = index; - - BLI_addtail(list, ifile); - - index++; - } - } - } - - BLI_filelist_free(dir, totfile); - dir = nullptr; -} - -static void free_iconfile_list(ListBase *list) -{ - LISTBASE_FOREACH_MUTABLE (IconFile *, ifile, &iconfilelist) { - BLI_freelinkN(list, ifile); - } -} - #else #endif /* WITH_HEADLESS */ -int UI_iconfile_get_index(const char *filename) -{ - LISTBASE_FOREACH (const IconFile *, ifile, &iconfilelist) { - if (BLI_path_cmp(filename, ifile->filename) == 0) { - return ifile->index; - } - } - - return 0; -} - -ListBase *UI_iconfile_list() -{ - ListBase *list = &(iconfilelist); - - return list; -} - void UI_icons_free() { -#ifndef WITH_HEADLESS - free_iconfile_list(&iconfilelist); -#endif BKE_icons_free(); BKE_preview_images_free(); } @@ -1220,43 +1099,6 @@ static DrawInfo *icon_ensure_drawinfo(Icon *icon) return di; } -int UI_icon_get_width(int icon_id) -{ - Icon *icon = BKE_icon_get(icon_id); - - if (icon == nullptr) { - if (G.debug & G_DEBUG) { - printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id); - } - return 0; - } - - DrawInfo *di = icon_ensure_drawinfo(icon); - if (di) { - return ICON_DEFAULT_WIDTH; - } - - return 0; -} - -int UI_icon_get_height(int icon_id) -{ - Icon *icon = BKE_icon_get(icon_id); - if (icon == nullptr) { - if (G.debug & G_DEBUG) { - printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id); - } - return 0; - } - - DrawInfo *di = icon_ensure_drawinfo(icon); - if (di) { - return ICON_DEFAULT_HEIGHT; - } - - return 0; -} - bool UI_icon_get_theme_color(int icon_id, uchar color[4]) { Icon *icon = BKE_icon_get(icon_id); @@ -1271,7 +1113,6 @@ bool UI_icon_get_theme_color(int icon_id, uchar color[4]) void UI_icons_init() { #ifndef WITH_HEADLESS - init_iconfile_list(&iconfilelist); init_internal_icons(); init_brush_icons(); init_event_icons(); @@ -2575,35 +2416,6 @@ void UI_icon_draw_ex(float x, inverted); } -void UI_icon_draw_mono_rect( - float x, float y, float width, float height, int icon_id, const uchar color[4]) -{ - Icon *icon = BKE_icon_get(icon_id); - if (icon == nullptr) { - return; - } - DrawInfo *di = icon_ensure_drawinfo(icon); - if (di->type != ICON_TYPE_MONO_TEXTURE) { - return; - } - - float fcolor[4]; - straight_uchar_to_premul_float(fcolor, color); - - icon_draw_texture(x, - y, - width, - height, - di->data.texture.x, - di->data.texture.y, - di->data.texture.w, - di->data.texture.h, - fcolor[3], - fcolor, - false, - nullptr); -} - void UI_icon_text_overlay_init_from_count(IconTextOverlay *text_overlay, const int icon_indicator_number) {