Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenfont/BLF_api.h2
-rw-r--r--source/blender/blenfont/intern/blf.c11
-rw-r--r--source/blender/blenfont/intern/blf_font.c8
-rw-r--r--source/blender/blenfont/intern/blf_internal.h2
-rw-r--r--source/blender/editors/space_file/filelist.c24
5 files changed, 41 insertions, 6 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 1f39257a4c2..7e92f79a523 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -53,6 +53,8 @@ int BLF_load_mem_unique(const char *name, const unsigned char *mem, int mem_size
void BLF_unload(const char *name) ATTR_NONNULL();
void BLF_unload_id(int fontid);
+char *BLF_display_name_from_file(const char *filename);
+
/* Check if font supports a particular glyph. */
bool BLF_has_glyph(int fontid, unsigned int unicode);
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index 7428798581d..9168e7aa19c 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -915,6 +915,17 @@ void BLF_draw_buffer(int fontid, const char *str, size_t len)
BLF_draw_buffer_ex(fontid, str, len, NULL);
}
+char *BLF_display_name_from_file(const char *filename)
+{
+ FontBLF *font = blf_font_new("font_name", filename);
+ if (!font) {
+ return NULL;
+ }
+ char *name = blf_display_name(font);
+ blf_font_free(font);
+ return name;
+}
+
#ifdef DEBUG
void BLF_state_print(int fontid)
{
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index 74c4c684d6b..53c4135254a 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -1465,3 +1465,11 @@ float blf_font_ascender(FontBLF *font)
blf_glyph_cache_release(font);
return ascender;
}
+
+char *blf_display_name(FontBLF *font)
+{
+ if (!font->face->family_name) {
+ return NULL;
+ }
+ return BLI_sprintfN("%s %s", font->face->family_name, font->face->style_name);
+}
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index 63e1eb999cd..35a6d019eac 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -99,6 +99,8 @@ int blf_font_width_max(struct FontBLF *font);
float blf_font_descender(struct FontBLF *font);
float blf_font_ascender(struct FontBLF *font);
+char *blf_display_name(struct FontBLF *font);
+
void blf_font_boundbox_foreach_glyph(struct FontBLF *font,
const char *str,
size_t len,
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 6ac67a126cd..93c27e1fe90 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -37,6 +37,8 @@
#endif
#include "MEM_guardedalloc.h"
+#include "BLF_api.h"
+
#include "BLI_blenlib.h"
#include "BLI_fileops.h"
#include "BLI_fileops_types.h"
@@ -1812,13 +1814,23 @@ BlendHandle *filelist_lib(struct FileList *filelist)
return filelist->libfiledata;
}
-static const char *fileentry_uiname(const char *root,
- const char *relpath,
- const eFileSel_File_Types typeflag,
- char *buff)
+static char *fileentry_uiname(const char *root,
+ const char *relpath,
+ const eFileSel_File_Types typeflag,
+ char *buff)
{
char *name = NULL;
+ if (typeflag & FILE_TYPE_FTFONT && !(typeflag & FILE_TYPE_BLENDERLIB)) {
+ char abspath[FILE_MAX_LIBEXTRA];
+ BLI_join_dirfile(abspath, sizeof(abspath), root, relpath);
+ name = BLF_display_name_from_file(abspath);
+ if (name) {
+ /* Allocated string, so no need to BLI_strdup.*/
+ return name;
+ }
+ }
+
if (typeflag & FILE_TYPE_BLENDERLIB) {
char abspath[FILE_MAX_LIBEXTRA];
char *group;
@@ -1840,7 +1852,7 @@ static const char *fileentry_uiname(const char *root,
}
BLI_assert(name);
- return name;
+ return BLI_strdup(name);
}
const char *filelist_dir(struct FileList *filelist)
@@ -3203,7 +3215,7 @@ static void filelist_readjob_do(const bool do_lib,
MEM_freeN(entry->relpath);
entry->relpath = BLI_strdup(dir + 2); /* + 2 to remove '//'
* added by BLI_path_rel to rel_subdir. */
- entry->name = BLI_strdup(fileentry_uiname(root, entry->relpath, entry->typeflag, dir));
+ entry->name = fileentry_uiname(root, entry->relpath, entry->typeflag, dir);
entry->free_name = true;
/* Here we decide whether current filedirentry is to be listed too, or not. */