Blender V4.3
blf_font_default.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11#include <cstdio>
12
13#include "BLF_api.hh"
14
15#include "BLI_fileops.h"
16#include "BLI_path_utils.hh"
17
18#include "BKE_appdir.hh"
19
20#ifdef WIN32
21# include "BLI_winstuff.h"
22#endif
23
24static int blf_load_font_default(const char *filename, const bool unique)
25{
26 const std::optional<std::string> dir = BKE_appdir_folder_id(BLENDER_DATAFILES,
28 if (!dir.has_value()) {
29 fprintf(stderr,
30 "%s: 'fonts' data path not found for '%s', will not be able to display text\n",
31 __func__,
32 filename);
33 return -1;
34 }
35
36 char filepath[FILE_MAX];
37 BLI_path_join(filepath, sizeof(filepath), dir->c_str(), filename);
38
39 return (unique) ? BLF_load_unique(filepath) : BLF_load(filepath);
40}
41
42int BLF_load_default(const bool unique)
43{
45 BLF_enable(font_id, BLF_DEFAULT);
46 return font_id;
47}
48
49int BLF_load_mono_default(const bool unique)
50{
53 return font_id;
54}
55
57{
58 const char *datafiles_fonts_dir = BLF_DATAFILES_FONTS_DIR SEP_STR;
59 const std::optional<std::string> path = BKE_appdir_folder_id(BLENDER_DATAFILES,
60 datafiles_fonts_dir);
61 if (!path.has_value()) {
62 fprintf(stderr, "Font data directory \"%s\" could not be detected!\n", datafiles_fonts_dir);
63 return;
64 }
65
66 direntry *file_list;
67 uint file_list_num = BLI_filelist_dir_contents(path->c_str(), &file_list);
68 for (int i = 0; i < file_list_num; i++) {
69 if (S_ISDIR(file_list[i].s.st_mode)) {
70 continue;
71 }
72
73 const char *filepath = file_list[i].path;
74 if (!BLI_path_extension_check_n(filepath, ".ttf", ".otf", ".woff", ".woff2", nullptr)) {
75 continue;
76 }
77 if (BLF_is_loaded(filepath)) {
78 continue;
79 }
80
81 /* Attempt to load the font. */
82 int font_id = BLF_load(filepath);
83 if (font_id == -1) {
84 fprintf(stderr, "Unable to load font: %s\n", filepath);
85 continue;
86 }
87
88 BLF_enable(font_id, BLF_DEFAULT);
89 }
90 BLI_filelist_free(file_list, file_list_num);
91}
92
94{
95 /* Load these if not already, might have been replaced by user custom. */
96 BLF_load_default(false);
99}
@ BLENDER_DATAFILES
std::optional< std::string > BKE_appdir_folder_id(int folder_id, const char *subfolder) ATTR_WARN_UNUSED_RESULT
Definition appdir.cc:704
#define BLF_DEFAULT_PROPORTIONAL_FONT
Definition BLF_api.hh:23
#define BLF_DATAFILES_FONTS_DIR
Definition BLF_api.hh:20
int BLF_load(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition blf.cc:174
int BLF_load_unique(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition blf.cc:187
int bool BLF_is_loaded(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition blf.cc:164
void BLF_enable(int fontid, int option)
Definition blf.cc:312
@ BLF_MONOSPACED
Definition BLF_api.hh:376
@ BLF_DEFAULT
Definition BLF_api.hh:378
#define BLF_DEFAULT_MONOSPACED_FONT
Definition BLF_api.hh:26
File and directory operations.
unsigned int BLI_filelist_dir_contents(const char *dirname, struct direntry **r_filelist)
void BLI_filelist_free(struct direntry *filelist, unsigned int nrentries)
#define FILE_MAX
#define BLI_path_join(...)
bool BLI_path_extension_check_n(const char *path,...) ATTR_NONNULL(1) ATTR_SENTINEL(0)
unsigned int uint
Compatibility-like things for windows.
#define S_ISDIR(x)
static int blf_load_font_default(const char *filename, const bool unique)
static void blf_load_datafiles_dir()
int BLF_load_mono_default(const bool unique)
void BLF_load_font_stack()
int BLF_load_default(const bool unique)
const char * path
#define SEP_STR
Definition unit.cc:39