Cleanup: remove unused BLI_dir_* functions
Loading a font in BLF would search a list of directory presets however these presets were never used. Remove them as all callers pass in full paths. Also rename FontBLF::name to mem_name as it's only needed as an ID for in-memory fonts (to prevent them being loaded multiple times). Non-unique font loading now compares against the filepath or mem_name when loading from files or memory (before both used `name` which was often the filepath, sometimes the full ID-name).
This commit is contained in:
parent
6b9a500a3a
commit
d770fd5ac4
|
@ -43,28 +43,36 @@ void BLF_cache_flush_set_fn(void (*cache_flush_fn)(void));
|
|||
/**
|
||||
* Loads a font, or returns an already loaded font and increments its reference count.
|
||||
*/
|
||||
int BLF_load(const char *name) ATTR_NONNULL();
|
||||
int BLF_load_mem(const char *name, const unsigned char *mem, int mem_size) ATTR_NONNULL();
|
||||
bool BLF_is_loaded(const char *name) ATTR_NONNULL();
|
||||
int BLF_load(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||
int BLF_load_mem(const char *name, const unsigned char *mem, int mem_size) ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_NONNULL(1, 2);
|
||||
|
||||
int BLF_load_unique(const char *name) ATTR_NONNULL();
|
||||
int BLF_load_mem_unique(const char *name, const unsigned char *mem, int mem_size) ATTR_NONNULL();
|
||||
bool BLF_is_loaded(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||
bool BLF_is_loaded_mem(const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||
|
||||
int BLF_load_unique(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||
int BLF_load_mem_unique(const char *name, const unsigned char *mem, int mem_size)
|
||||
ATTR_NONNULL(1, 2);
|
||||
|
||||
void BLF_unload(const char *filepath) ATTR_NONNULL(1);
|
||||
#if 0 /* Not needed at the moment. */
|
||||
void BLF_unload_mem(const char *name) ATTR_NONNULL(1);
|
||||
#endif
|
||||
|
||||
void BLF_unload(const char *name) ATTR_NONNULL();
|
||||
void BLF_unload_id(int fontid);
|
||||
void BLF_unload_all(void);
|
||||
|
||||
char *BLF_display_name_from_file(const char *filepath);
|
||||
char *BLF_display_name_from_file(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||
|
||||
/**
|
||||
* Check if font supports a particular glyph.
|
||||
*/
|
||||
bool BLF_has_glyph(int fontid, unsigned int unicode);
|
||||
bool BLF_has_glyph(int fontid, unsigned int unicode) ATTR_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* Attach a file with metrics information from memory.
|
||||
*/
|
||||
void BLF_metrics_attach(int fontid, unsigned char *mem, int mem_size);
|
||||
void BLF_metrics_attach(int fontid, unsigned char *mem, int mem_size) ATTR_NONNULL(2);
|
||||
|
||||
void BLF_aspect(int fontid, float x, float y, float z);
|
||||
void BLF_position(int fontid, float x, float y, float z);
|
||||
|
@ -140,7 +148,7 @@ void BLF_boundbox_foreach_glyph(int fontid,
|
|||
size_t BLF_str_offset_from_cursor_position(int fontid,
|
||||
const char *str,
|
||||
size_t str_len,
|
||||
int location_x);
|
||||
int location_x) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2);
|
||||
|
||||
/**
|
||||
* Return bounds of the glyph rect at the string offset.
|
||||
|
@ -148,18 +156,25 @@ size_t BLF_str_offset_from_cursor_position(int fontid,
|
|||
bool BLF_str_offset_to_glyph_bounds(int fontid,
|
||||
const char *str,
|
||||
size_t str_offset,
|
||||
struct rcti *glyph_bounds);
|
||||
struct rcti *glyph_bounds) ATTR_WARN_UNUSED_RESULT
|
||||
ATTR_NONNULL(2, 4);
|
||||
|
||||
/**
|
||||
* Get the string byte offset that fits within a given width.
|
||||
*/
|
||||
size_t BLF_width_to_strlen(
|
||||
int fontid, const char *str, size_t str_len, float width, float *r_width) ATTR_NONNULL(2);
|
||||
size_t BLF_width_to_strlen(int fontid,
|
||||
const char *str,
|
||||
size_t str_len,
|
||||
float width,
|
||||
float *r_width) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2);
|
||||
/**
|
||||
* Same as BLF_width_to_strlen but search from the string end.
|
||||
*/
|
||||
size_t BLF_width_to_rstrlen(
|
||||
int fontid, const char *str, size_t str_len, float width, float *r_width) ATTR_NONNULL(2);
|
||||
size_t BLF_width_to_rstrlen(int fontid,
|
||||
const char *str,
|
||||
size_t str_len,
|
||||
float width,
|
||||
float *r_width) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2);
|
||||
|
||||
/**
|
||||
* This function return the bounding box of the string
|
||||
|
@ -269,26 +284,6 @@ void BLF_draw_buffer_ex(int fontid, const char *str, size_t str_len, struct Resu
|
|||
ATTR_NONNULL(2);
|
||||
void BLF_draw_buffer(int fontid, const char *str, size_t str_len) ATTR_NONNULL(2);
|
||||
|
||||
/**
|
||||
* Add a path to the font dir paths.
|
||||
*/
|
||||
void BLF_dir_add(const char *path) ATTR_NONNULL();
|
||||
|
||||
/**
|
||||
* Remove a path from the font dir paths.
|
||||
*/
|
||||
void BLF_dir_rem(const char *path) ATTR_NONNULL();
|
||||
|
||||
/**
|
||||
* Return an array with all the font dir (this can be used for file-selector).
|
||||
*/
|
||||
char **BLF_dir_get(int *ndir) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
|
||||
|
||||
/**
|
||||
* Free the data return by #BLF_dir_get.
|
||||
*/
|
||||
void BLF_dir_free(char **dirs, int count) ATTR_NONNULL();
|
||||
|
||||
/* blf_thumbs.c */
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "BLI_fileops.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_threads.h"
|
||||
|
@ -93,11 +94,26 @@ bool blf_font_id_is_valid(int fontid)
|
|||
return blf_get(fontid) != NULL;
|
||||
}
|
||||
|
||||
static int blf_search(const char *name)
|
||||
static int blf_search_by_mem_name(const char *mem_name)
|
||||
{
|
||||
for (int i = 0; i < BLF_MAX_FONT; i++) {
|
||||
const FontBLF *font = global_font[i];
|
||||
if (font && STREQ(font->name, name)) {
|
||||
if (font == NULL || font->mem_name == NULL) {
|
||||
continue;
|
||||
}
|
||||
if (font && STREQ(font->mem_name, mem_name)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int blf_search_by_filepath(const char *filepath)
|
||||
{
|
||||
for (int i = 0; i < BLF_MAX_FONT; i++) {
|
||||
const FontBLF *font = global_font[i];
|
||||
if (font && STREQ(font->filepath, filepath)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
@ -125,25 +141,30 @@ bool BLF_has_glyph(int fontid, uint unicode)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool BLF_is_loaded(const char *name)
|
||||
bool BLF_is_loaded(const char *filepath)
|
||||
{
|
||||
return blf_search(name) >= 0;
|
||||
return blf_search_by_filepath(filepath) >= 0;
|
||||
}
|
||||
|
||||
int BLF_load(const char *name)
|
||||
bool BLF_is_loaded_mem(const char *name)
|
||||
{
|
||||
return blf_search_by_mem_name(name) >= 0;
|
||||
}
|
||||
|
||||
int BLF_load(const char *filepath)
|
||||
{
|
||||
/* check if we already load this font. */
|
||||
int i = blf_search(name);
|
||||
int i = blf_search_by_filepath(filepath);
|
||||
if (i >= 0) {
|
||||
FontBLF *font = global_font[i];
|
||||
font->reference_count++;
|
||||
return i;
|
||||
}
|
||||
|
||||
return BLF_load_unique(name);
|
||||
return BLF_load_unique(filepath);
|
||||
}
|
||||
|
||||
int BLF_load_unique(const char *name)
|
||||
int BLF_load_unique(const char *filepath)
|
||||
{
|
||||
/* Don't search in the cache!! make a new
|
||||
* object font, this is for keep fonts threads safe.
|
||||
|
@ -154,18 +175,17 @@ int BLF_load_unique(const char *name)
|
|||
return -1;
|
||||
}
|
||||
|
||||
char *filepath = blf_dir_search(name);
|
||||
if (!filepath) {
|
||||
printf("Can't find font: %s\n", name);
|
||||
/* This isn't essential, it will just cause confusing behavior to load a font
|
||||
* that appears to succeed, then doesn't show up. */
|
||||
if (!BLI_exists(filepath)) {
|
||||
printf("Can't find font: %s\n", filepath);
|
||||
return -1;
|
||||
}
|
||||
|
||||
FontBLF *font = blf_font_new(name, filepath);
|
||||
|
||||
MEM_freeN(filepath);
|
||||
FontBLF *font = blf_font_new_from_filepath(filepath);
|
||||
|
||||
if (!font) {
|
||||
printf("Can't load font: %s\n", name);
|
||||
printf("Can't load font: %s\n", filepath);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -185,7 +205,7 @@ void BLF_metrics_attach(int fontid, uchar *mem, int mem_size)
|
|||
|
||||
int BLF_load_mem(const char *name, const uchar *mem, int mem_size)
|
||||
{
|
||||
int i = blf_search(name);
|
||||
int i = blf_search_by_mem_name(name);
|
||||
if (i >= 0) {
|
||||
// font = global_font[i]; /* UNUSED */
|
||||
return i;
|
||||
|
@ -221,12 +241,15 @@ int BLF_load_mem_unique(const char *name, const uchar *mem, int mem_size)
|
|||
return i;
|
||||
}
|
||||
|
||||
void BLF_unload(const char *name)
|
||||
void BLF_unload(const char *filepath)
|
||||
{
|
||||
for (int i = 0; i < BLF_MAX_FONT; i++) {
|
||||
FontBLF *font = global_font[i];
|
||||
if (font == NULL || font->filepath == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (font && STREQ(font->name, name)) {
|
||||
if (STREQ(font->filepath, filepath)) {
|
||||
BLI_assert(font->reference_count > 0);
|
||||
font->reference_count--;
|
||||
|
||||
|
@ -918,7 +941,8 @@ void BLF_state_print(int fontid)
|
|||
FontBLF *font = blf_get(fontid);
|
||||
if (font) {
|
||||
printf("fontid %d %p\n", fontid, (void *)font);
|
||||
printf(" name: '%s'\n", font->name);
|
||||
printf(" mem_name: '%s'\n", font->mem_name ? font->mem_name : "<none>");
|
||||
printf(" filepath: '%s'\n", font->filepath ? font->filepath : "<none>");
|
||||
printf(" size: %f\n", font->size);
|
||||
printf(" pos: %d %d %d\n", UNPACK3(font->pos));
|
||||
printf(" aspect: (%d) %.6f %.6f %.6f\n",
|
||||
|
|
|
@ -21,116 +21,10 @@
|
|||
#include "DNA_vec_types.h"
|
||||
|
||||
#include "BLI_fileops.h"
|
||||
#include "BLI_listbase.h"
|
||||
#include "BLI_path_util.h"
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_threads.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BLF_api.h"
|
||||
#include "blf_internal.h"
|
||||
#include "blf_internal_types.h"
|
||||
|
||||
static ListBase global_font_dir = {NULL, NULL};
|
||||
|
||||
static DirBLF *blf_dir_find(const char *path)
|
||||
{
|
||||
DirBLF *p;
|
||||
|
||||
p = global_font_dir.first;
|
||||
while (p) {
|
||||
if (BLI_path_cmp(p->path, path) == 0) {
|
||||
return p;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void BLF_dir_add(const char *path)
|
||||
{
|
||||
DirBLF *dir;
|
||||
|
||||
dir = blf_dir_find(path);
|
||||
if (dir) { /* already in the list ? just return. */
|
||||
return;
|
||||
}
|
||||
|
||||
dir = (DirBLF *)MEM_callocN(sizeof(DirBLF), "BLF_dir_add");
|
||||
dir->path = BLI_strdup(path);
|
||||
BLI_addhead(&global_font_dir, dir);
|
||||
}
|
||||
|
||||
void BLF_dir_rem(const char *path)
|
||||
{
|
||||
DirBLF *dir;
|
||||
|
||||
dir = blf_dir_find(path);
|
||||
if (dir) {
|
||||
BLI_remlink(&global_font_dir, dir);
|
||||
MEM_freeN(dir->path);
|
||||
MEM_freeN(dir);
|
||||
}
|
||||
}
|
||||
|
||||
char **BLF_dir_get(int *ndir)
|
||||
{
|
||||
DirBLF *p;
|
||||
char **dirs;
|
||||
char *path;
|
||||
int i, count;
|
||||
|
||||
count = BLI_listbase_count(&global_font_dir);
|
||||
if (!count) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dirs = (char **)MEM_callocN(sizeof(char *) * count, "BLF_dir_get");
|
||||
p = global_font_dir.first;
|
||||
i = 0;
|
||||
while (p) {
|
||||
path = BLI_strdup(p->path);
|
||||
dirs[i] = path;
|
||||
p = p->next;
|
||||
}
|
||||
*ndir = i;
|
||||
return dirs;
|
||||
}
|
||||
|
||||
void BLF_dir_free(char **dirs, int count)
|
||||
{
|
||||
for (int i = 0; i < count; i++) {
|
||||
char *path = dirs[i];
|
||||
MEM_freeN(path);
|
||||
}
|
||||
MEM_freeN(dirs);
|
||||
}
|
||||
|
||||
char *blf_dir_search(const char *file)
|
||||
{
|
||||
BLI_assert_msg(!BLI_path_is_rel(file), "Relative paths must always be expanded!");
|
||||
|
||||
DirBLF *dir;
|
||||
char full_path[FILE_MAX];
|
||||
char *s = NULL;
|
||||
|
||||
for (dir = global_font_dir.first; dir; dir = dir->next) {
|
||||
BLI_path_join(full_path, sizeof(full_path), dir->path, file);
|
||||
if (BLI_exists(full_path)) {
|
||||
s = BLI_strdup(full_path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!s) {
|
||||
/* This may be an absolute path which exists. */
|
||||
if (BLI_exists(file)) {
|
||||
s = BLI_strdup(file);
|
||||
}
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
char *blf_dir_metrics_search(const char *filepath)
|
||||
{
|
||||
|
|
|
@ -1508,15 +1508,20 @@ static const struct FaceDetails static_face_details[] = {
|
|||
{"NotoSansThai-VariableFont_wdth,wght.woff2", TT_UCR_THAI, 0, 0, 0},
|
||||
};
|
||||
|
||||
FontBLF *blf_font_new_ex(const char *name,
|
||||
const char *filepath,
|
||||
const uchar *mem,
|
||||
const size_t mem_size,
|
||||
void *ft_library)
|
||||
/**
|
||||
* Create a new font from filename OR memory pointer.
|
||||
* For normal operation pass NULL as FT_Library object. Pass a custom FT_Library if you
|
||||
* want to use the font without its lifetime being managed by the FreeType cache subsystem.
|
||||
*/
|
||||
static FontBLF *blf_font_new_impl(const char *filepath,
|
||||
const char *mem_name,
|
||||
const uchar *mem,
|
||||
const size_t mem_size,
|
||||
void *ft_library)
|
||||
{
|
||||
FontBLF *font = (FontBLF *)MEM_callocN(sizeof(FontBLF), "blf_font_new");
|
||||
|
||||
font->name = BLI_strdup(name);
|
||||
font->mem_name = mem_name ? BLI_strdup(mem_name) : NULL;
|
||||
font->filepath = filepath ? BLI_strdup(filepath) : NULL;
|
||||
if (mem) {
|
||||
font->mem = (void *)mem;
|
||||
|
@ -1573,14 +1578,14 @@ FontBLF *blf_font_new_ex(const char *name,
|
|||
return font;
|
||||
}
|
||||
|
||||
FontBLF *blf_font_new(const char *name, const char *filepath)
|
||||
FontBLF *blf_font_new_from_filepath(const char *filepath)
|
||||
{
|
||||
return blf_font_new_ex(name, filepath, NULL, 0, NULL);
|
||||
return blf_font_new_impl(filepath, NULL, NULL, 0, NULL);
|
||||
}
|
||||
|
||||
FontBLF *blf_font_new_from_mem(const char *name, const uchar *mem, const size_t mem_size)
|
||||
FontBLF *blf_font_new_from_mem(const char *mem_name, const uchar *mem, const size_t mem_size)
|
||||
{
|
||||
return blf_font_new_ex(name, NULL, mem, mem_size, NULL);
|
||||
return blf_font_new_impl(NULL, mem_name, mem, mem_size, NULL);
|
||||
}
|
||||
|
||||
void blf_font_attach_from_mem(FontBLF *font, const uchar *mem, const size_t mem_size)
|
||||
|
@ -1621,8 +1626,8 @@ void blf_font_free(FontBLF *font)
|
|||
if (font->filepath) {
|
||||
MEM_freeN(font->filepath);
|
||||
}
|
||||
if (font->name) {
|
||||
MEM_freeN(font->name);
|
||||
if (font->mem_name) {
|
||||
MEM_freeN(font->mem_name);
|
||||
}
|
||||
|
||||
BLI_mutex_end(&font->glyph_cache_mutex);
|
||||
|
|
|
@ -42,14 +42,11 @@ void blf_batch_draw(void);
|
|||
|
||||
unsigned int blf_next_p2(unsigned int x);
|
||||
unsigned int blf_hash(unsigned int val);
|
||||
|
||||
char *blf_dir_search(const char *filepath);
|
||||
/**
|
||||
* Some font have additional file with metrics information,
|
||||
* in general, the extension of the file is: `.afm` or `.pfm`
|
||||
*/
|
||||
char *blf_dir_metrics_search(const char *filepath);
|
||||
// int blf_dir_split(const char *str, char *file, int *size); /*UNUSED*/
|
||||
|
||||
int blf_font_init(void);
|
||||
void blf_font_exit(void);
|
||||
|
@ -70,18 +67,7 @@ void blf_ensure_size(struct FontBLF *font);
|
|||
void blf_draw_buffer__start(struct FontBLF *font);
|
||||
void blf_draw_buffer__end(void);
|
||||
|
||||
/**
|
||||
* Create a new font from filename OR memory pointer.
|
||||
* For normal operation pass NULL as FT_Library object. Pass a custom FT_Library if you
|
||||
* want to use the font without its lifetime being managed by the FreeType cache subsystem.
|
||||
*/
|
||||
struct FontBLF *blf_font_new_ex(const char *name,
|
||||
const char *filepath,
|
||||
const unsigned char *mem,
|
||||
size_t mem_size,
|
||||
void *ft_library);
|
||||
|
||||
struct FontBLF *blf_font_new(const char *name, const char *filepath);
|
||||
struct FontBLF *blf_font_new_from_filepath(const char *filepath);
|
||||
struct FontBLF *blf_font_new_from_mem(const char *name, const unsigned char *mem, size_t mem_size);
|
||||
void blf_font_attach_from_mem(struct FontBLF *font, const unsigned char *mem, size_t mem_size);
|
||||
|
||||
|
|
|
@ -238,15 +238,14 @@ typedef struct FontBufInfoBLF {
|
|||
} FontBufInfoBLF;
|
||||
|
||||
typedef struct FontBLF {
|
||||
/** Font name. */
|
||||
char *name;
|
||||
|
||||
/** Full path to font file or NULL if from memory. */
|
||||
char *filepath;
|
||||
|
||||
/** Pointer to in-memory font, or NULL if from file. */
|
||||
void *mem;
|
||||
size_t mem_size;
|
||||
/** Handle for in-memory fonts to avoid loading them multiple times. */
|
||||
char *mem_name;
|
||||
|
||||
/**
|
||||
* Copied from the SFNT OS/2 table. Bit flags for unicode blocks and ranges
|
||||
|
@ -342,11 +341,3 @@ typedef struct FontBLF {
|
|||
/** Mutex lock for glyph cache. */
|
||||
ThreadMutex glyph_cache_mutex;
|
||||
} FontBLF;
|
||||
|
||||
typedef struct DirBLF {
|
||||
struct DirBLF *next;
|
||||
struct DirBLF *prev;
|
||||
|
||||
/** Full path where search fonts. */
|
||||
char *path;
|
||||
} DirBLF;
|
||||
|
|
Loading…
Reference in New Issue