diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenfont/BLF_api.h | 8 | ||||
-rw-r--r-- | source/blender/blenfont/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_font_default.c | 59 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_font_i18n.c | 113 | ||||
-rw-r--r-- | source/blender/editors/datafiles/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/editors/include/ED_datafiles.h | 6 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_style.c | 49 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_init_exit.c | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_playanim.c | 3 |
9 files changed, 73 insertions, 171 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index fd6411f7c69..9aee8c9b78b 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -238,11 +238,9 @@ void BLF_thumb_preview(const char *filename, int h, int channels) ATTR_NONNULL(); -/* blf_font_i18.c */ -unsigned char *BLF_get_unifont(int *unifont_size); -void BLF_free_unifont(void); -unsigned char *BLF_get_unifont_mono(int *unifont_size); -void BLF_free_unifont_mono(void); +/* blf_font_default.c */ +int BLF_load_default(const bool unique); +int BLF_load_mono_default(const bool unique); #ifdef DEBUG void BLF_state_print(int fontid); diff --git a/source/blender/blenfont/CMakeLists.txt b/source/blender/blenfont/CMakeLists.txt index fa02d6d21c9..ac927dd388d 100644 --- a/source/blender/blenfont/CMakeLists.txt +++ b/source/blender/blenfont/CMakeLists.txt @@ -41,7 +41,7 @@ set(SRC intern/blf.c intern/blf_dir.c intern/blf_font.c - intern/blf_font_i18n.c + intern/blf_font_default.c intern/blf_glyph.c intern/blf_thumbs.c intern/blf_util.c diff --git a/source/blender/blenfont/intern/blf_font_default.c b/source/blender/blenfont/intern/blf_font_default.c new file mode 100644 index 00000000000..f33d7cd4203 --- /dev/null +++ b/source/blender/blenfont/intern/blf_font_default.c @@ -0,0 +1,59 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2011 Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup blf + * + * API for loading default font files. + */ + +#include <stdio.h> + +#include "BLF_api.h" + +#include "BLI_path_util.h" + +#include "BKE_appdir.h" + +static int blf_load_font_default(const char *filename, const bool unique) +{ + const char *dir = BKE_appdir_folder_id(BLENDER_DATAFILES, "fonts"); + if (dir == NULL) { + fprintf(stderr, + "%s: 'fonts' data path not found for '%s', will not be able to display text\n", + __func__, + filename); + return -1; + } + + char filepath[FILE_MAX]; + BLI_join_dirfile(filepath, sizeof(filepath), dir, filename); + + return (unique) ? BLF_load_unique(filepath) : BLF_load(filepath); +} + +int BLF_load_default(const bool unique) +{ + return blf_load_font_default("droidsans.ttf", unique); +} + +int BLF_load_mono_default(const bool unique) +{ + return blf_load_font_default("bmonofont-i18n.ttf", unique); +} diff --git a/source/blender/blenfont/intern/blf_font_i18n.c b/source/blender/blenfont/intern/blf_font_i18n.c deleted file mode 100644 index caacd6a28db..00000000000 --- a/source/blender/blenfont/intern/blf_font_i18n.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2011 Blender Foundation. - * All rights reserved. - */ - -/** \file - * \ingroup blf - * - * API for accessing font files. - */ - -#include <stdlib.h> -#include <string.h> - -#include "BLF_api.h" - -#include "MEM_guardedalloc.h" - -#include "BLI_utildefines.h" - -#include "BKE_appdir.h" - -#ifdef WITH_INTERNATIONAL - -# include "BLI_fileops.h" -# include "BLI_string.h" - -struct FontBuf { - const char *filename; - uchar *data; - int data_len; -}; - -static struct FontBuf unifont_ttf = {"droidsans.ttf"}; -static struct FontBuf unifont_mono_ttf = {"bmonofont-i18n.ttf"}; - -static void fontbuf_load(struct FontBuf *fb) -{ - const char *fontpath = BKE_appdir_folder_id(BLENDER_DATAFILES, "fonts"); - if (fontpath) { - char unifont_path[1024]; - BLI_snprintf(unifont_path, sizeof(unifont_path), "%s/%s", fontpath, fb->filename); - fb->data = (uchar *)BLI_file_ungzip_to_mem(unifont_path, &fb->data_len); - } - else { - printf("%s: 'fonts' data path not found for '%s', continuing\n", __func__, fb->filename); - } -} - -static void fontbuf_free(struct FontBuf *fb) -{ - MEM_SAFE_FREE(fb->data); - fb->data_len = 0; -} - -static uchar *fontbuf_get_mem(struct FontBuf *fb, int *r_size) -{ - if (fb->data == NULL) { - fontbuf_load(fb); - } - *r_size = fb->data_len; - return fb->data; -} - -#endif /* WITH_INTERNATIONAL */ - -uchar *BLF_get_unifont(int *r_unifont_size) -{ -#ifdef WITH_INTERNATIONAL - return fontbuf_get_mem(&unifont_ttf, r_unifont_size); -#else - UNUSED_VARS(r_unifont_size); - return NULL; -#endif -} - -uchar *BLF_get_unifont_mono(int *r_unifont_size) -{ -#ifdef WITH_INTERNATIONAL - return fontbuf_get_mem(&unifont_mono_ttf, r_unifont_size); -#else - UNUSED_VARS(r_unifont_size); - return NULL; -#endif -} - -void BLF_free_unifont(void) -{ -#ifdef WITH_INTERNATIONAL - fontbuf_free(&unifont_ttf); -#endif -} - -void BLF_free_unifont_mono(void) -{ -#ifdef WITH_INTERNATIONAL - fontbuf_free(&unifont_mono_ttf); -#endif -} diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index 1b147663a7e..1bc0465424d 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -766,8 +766,6 @@ set_property(GLOBAL PROPERTY ICON_GEOM_NAMES ) data_to_c_simple(../../../../release/datafiles/bfont.pfb SRC) -data_to_c_simple(../../../../release/datafiles/bfont.ttf SRC) -data_to_c_simple(../../../../release/datafiles/bmonofont.ttf SRC) if(WITH_BLENDER) # blender only (not player) diff --git a/source/blender/editors/include/ED_datafiles.h b/source/blender/editors/include/ED_datafiles.h index a2ad343da37..b6f9593c261 100644 --- a/source/blender/editors/include/ED_datafiles.h +++ b/source/blender/editors/include/ED_datafiles.h @@ -60,12 +60,6 @@ extern char datatoc_splash_2x_png[]; extern int datatoc_bfont_pfb_size; extern char datatoc_bfont_pfb[]; -extern int datatoc_bfont_ttf_size; -extern char datatoc_bfont_ttf[]; - -extern int datatoc_bmonofont_ttf_size; -extern char datatoc_bmonofont_ttf[]; - /* Brush icon datafiles */ /* TODO: this could be simplified by putting all * the brush icons in one file */ diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 8dedce4c361..63fc7825b26 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -422,8 +422,6 @@ void uiStyleInit(void) { uiFont *font; uiStyle *style = U.uistyles.first; - int monofont_size = datatoc_bmonofont_ttf_size; - uchar *monofont_ttf = (uchar *)datatoc_bmonofont_ttf; /* recover from uninitialized dpi */ if (U.dpi == 0) { @@ -463,37 +461,15 @@ void uiStyleInit(void) } for (font = U.uifonts.first; font; font = font->next) { + const bool unique = false; if (font->uifont_id == UIFONT_DEFAULT) { -#ifdef WITH_INTERNATIONAL - int font_size = datatoc_bfont_ttf_size; - uchar *font_ttf = (uchar *)datatoc_bfont_ttf; - static int last_font_size = 0; - - /* use unicode font if available */ - font_ttf = BLF_get_unifont(&font_size); - - if (!font_ttf) { - /* fall back if not found */ - font_size = datatoc_bfont_ttf_size; - font_ttf = (uchar *)datatoc_bfont_ttf; - } - - /* relload only if needed */ - if (last_font_size != font_size) { - BLF_unload("default"); - last_font_size = font_size; - } - - font->blf_id = BLF_load_mem("default", font_ttf, font_size); -#else - font->blf_id = BLF_load_mem("default", (uchar *)datatoc_bfont_ttf, datatoc_bfont_ttf_size); -#endif + font->blf_id = BLF_load_default(unique); } else { font->blf_id = BLF_load(font->filename); if (font->blf_id == -1) { - font->blf_id = BLF_load_mem("default", (uchar *)datatoc_bfont_ttf, datatoc_bfont_ttf_size); + font->blf_id = BLF_load_default(unique); } } @@ -519,25 +495,17 @@ void uiStyleInit(void) ui_style_new(&U.uistyles, "Default Style", UIFONT_DEFAULT); } -#ifdef WITH_INTERNATIONAL - /* use unicode font for text editor and interactive console */ - monofont_ttf = BLF_get_unifont_mono(&monofont_size); - - if (!monofont_ttf) { - /* fall back if not found */ - monofont_size = datatoc_bmonofont_ttf_size; - monofont_ttf = (uchar *)datatoc_bmonofont_ttf; - } -#endif - /* XXX, this should be moved into a style, * but for now best only load the monospaced font once. */ BLI_assert(blf_mono_font == -1); + /* Use unique font loading to avoid thread safety issues with mono font + * used for render metadata stamp in threads. */ if (U.font_path_ui_mono[0]) { blf_mono_font = BLF_load_unique(U.font_path_ui_mono); } if (blf_mono_font == -1) { - blf_mono_font = BLF_load_mem_unique("monospace", monofont_ttf, monofont_size); + const bool unique = true; + blf_mono_font = BLF_load_mono_default(unique); } BLF_size(blf_mono_font, 12 * U.pixelsize, 72); @@ -580,7 +548,8 @@ void uiStyleInit(void) * keep for now though, since without this there is no way to display many unicode chars. */ if (blf_mono_font_render == -1) { - blf_mono_font_render = BLF_load_mem_unique("monospace", monofont_ttf, monofont_size); + const bool unique = true; + blf_mono_font_render = BLF_load_mono_default(unique); } BLF_size(blf_mono_font_render, 12 * U.pixelsize, 72); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index b640fdb59c9..64cde724401 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -609,8 +609,6 @@ void WM_exit_ex(bContext *C, const bool do_python) } #ifdef WITH_INTERNATIONAL - BLF_free_unifont(); - BLF_free_unifont_mono(); BLT_lang_free(); #endif diff --git a/source/blender/windowmanager/intern/wm_playanim.c b/source/blender/windowmanager/intern/wm_playanim.c index c6eb1393ffe..8a872010ecc 100644 --- a/source/blender/windowmanager/intern/wm_playanim.c +++ b/source/blender/windowmanager/intern/wm_playanim.c @@ -1292,8 +1292,7 @@ static char *wm_main_playanim_intern(int argc, const char **argv) /* initialize the font */ BLF_init(); - ps.fontid = BLF_load_mem( - "monospace", (unsigned char *)datatoc_bmonofont_ttf, datatoc_bmonofont_ttf_size); + ps.fontid = BLF_load_mono_default(false); BLF_size(ps.fontid, 11, 72); ps.ibufx = ibuf->x; |