diff options
Diffstat (limited to 'source/blender/blenfont/intern')
-rw-r--r-- | source/blender/blenfont/intern/Makefile | 3 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf.c | 269 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_font.c | 2 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_lang.c | 59 |
4 files changed, 164 insertions, 169 deletions
diff --git a/source/blender/blenfont/intern/Makefile b/source/blender/blenfont/intern/Makefile index 38e76d03cad..d3a6e656028 100644 --- a/source/blender/blenfont/intern/Makefile +++ b/source/blender/blenfont/intern/Makefile @@ -15,7 +15,7 @@ # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # The Original Code is Copyright (C) 2008 Blender Foundation. # All rights reserved. @@ -32,6 +32,7 @@ DIR = $(OCGDIR)/blender/blenfont include nan_compile.mk CFLAGS += $(LEVEL_1_C_WARNINGS) +#CFLAGS += -O2 -Wall -Wno-char-subscripts # OpenGL and Freetype2 CPPFLAGS += -I$(NAN_GLEW)/include diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index 9a65b15200f..f6b7c5f71e6 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -61,14 +61,18 @@ FontBLF *global_font[BLF_MAX_FONT]; /* Number of font. */ int global_font_num= 0; -/* Current font. */ -int global_font_cur= 0; - /* Default size and dpi, for BLF_draw_default. */ int global_font_default= -1; int global_font_points= 11; int global_font_dpi= 72; +static FontBLF *BLF_get(int fontid) +{ + if (fontid >= 0 && fontid < BLF_MAX_FONT) + return(global_font[fontid]); + return(NULL); +} + int BLF_init(int points, int dpi) { int i; @@ -149,11 +153,48 @@ int BLF_load(char *name) return(i); } -void BLF_metrics_attach(unsigned char *mem, int mem_size) +int BLF_load_unique(char *name) { FontBLF *font; + char *filename; + int i; + + if (!name) + return(-1); + + /* Don't search in the cache!! make a new + * object font, this is for keep fonts threads safe. + */ + if (global_font_num+1 >= BLF_MAX_FONT) { + printf("Too many fonts!!!\n"); + return(-1); + } + + filename= blf_dir_search(name); + if (!filename) { + printf("Can't find font: %s\n", name); + return(-1); + } + + font= blf_font_new(name, filename); + MEM_freeN(filename); + + if (!font) { + printf("Can't load font: %s\n", name); + return(-1); + } - font= global_font[global_font_cur]; + global_font[global_font_num]= font; + i= global_font_num; + global_font_num++; + return(i); +} + +void BLF_metrics_attach(int fontid, unsigned char *mem, int mem_size) +{ + FontBLF *font; + + font= BLF_get(fontid); if (font) blf_font_attach_from_mem(font, mem, mem_size); } @@ -194,50 +235,91 @@ int BLF_load_mem(char *name, unsigned char *mem, int mem_size) return(i); } -void BLF_set(int fontid) +int BLF_load_mem_unique(char *name, unsigned char *mem, int mem_size) { - if (fontid >= 0 && fontid < BLF_MAX_FONT) - global_font_cur= fontid; + FontBLF *font; + int i; + + if (!name) + return(-1); + + /* + * Don't search in the cache, make a new object font! + * this is to keep the font thread safe. + */ + if (global_font_num+1 >= BLF_MAX_FONT) { + printf("Too many fonts!!!\n"); + return(-1); + } + + if (!mem || !mem_size) { + printf("Can't load font: %s from memory!!\n", name); + return(-1); + } + + font= blf_font_new_from_mem(name, mem, mem_size); + if (!font) { + printf("Can't load font: %s from memory!!\n", name); + return(-1); + } + + global_font[global_font_num]= font; + i= global_font_num; + global_font_num++; + return(i); +} + +void BLF_enable(int fontid, int option) +{ + FontBLF *font; + + font= BLF_get(fontid); + if (font) + font->flags |= option; } -int BLF_get(void) +void BLF_disable(int fontid, int option) { - return(global_font_cur); + FontBLF *font; + + font= BLF_get(fontid); + if (font) + font->flags &= ~option; } -void BLF_enable(int option) +void BLF_enable_default(int option) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(global_font_default); if (font) font->flags |= option; } -void BLF_disable(int option) +void BLF_disable_default(int option) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(global_font_default); if (font) font->flags &= ~option; } -void BLF_aspect(float aspect) +void BLF_aspect(int fontid, float aspect) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) font->aspect= aspect; } -void BLF_position(float x, float y, float z) +void BLF_position(int fontid, float x, float y, float z) { FontBLF *font; float remainder; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) { remainder= x - floor(x); if (remainder > 0.4 && remainder < 0.6) { @@ -261,29 +343,26 @@ void BLF_position(float x, float y, float z) } } -void BLF_size(int size, int dpi) +void BLF_size(int fontid, int size, int dpi) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) blf_font_size(font, size, dpi); } -void BLF_blur(int size) +void BLF_blur(int fontid, int size) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) font->blur= size; } void BLF_draw_default(float x, float y, float z, char *str) { - FontBLF *font; - int old_font=0, old_point=0, old_dpi=0; - if (!str) return; @@ -295,38 +374,21 @@ void BLF_draw_default(float x, float y, float z, char *str) return; } - font= global_font[global_font_cur]; - if (font) { - old_font= global_font_cur; - old_point= font->size; - old_dpi= font->dpi; - } - - global_font_cur= global_font_default; - BLF_size(global_font_points, global_font_dpi); - BLF_position(x, y, z); - BLF_draw(str); - - /* restore the old font. */ - if (font) { - global_font_cur= old_font; - BLF_size(old_point, old_dpi); - } + BLF_size(global_font_default, global_font_points, global_font_dpi); + BLF_position(global_font_default, x, y, z); + BLF_draw(global_font_default, str); } -void BLF_default_rotation(float angle) +void BLF_rotation_default(float angle) { - - if (global_font_default>=0) { - global_font[global_font_default]->angle= angle; - if(angle) - global_font[global_font_default]->flags |= BLF_ROTATION; - else - global_font[global_font_default]->flags &= ~BLF_ROTATION; - } + FontBLF *font; + + font= BLF_get(global_font_default); + if (font) + font->angle= angle; } -void BLF_draw(char *str) +void BLF_draw(int fontid, char *str) { FontBLF *font; @@ -334,7 +396,7 @@ void BLF_draw(char *str) * The pixmap alignment hack is handle * in BLF_position (old ui_rasterpos_safe). */ - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) { glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); @@ -355,39 +417,39 @@ void BLF_draw(char *str) } } -void BLF_boundbox(char *str, rctf *box) +void BLF_boundbox(int fontid, char *str, rctf *box) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) blf_font_boundbox(font, str, box); } -void BLF_width_and_height(char *str, float *width, float *height) +void BLF_width_and_height(int fontid, char *str, float *width, float *height) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) blf_font_width_and_height(font, str, width, height); } -float BLF_width(char *str) +float BLF_width(int fontid, char *str) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) return(blf_font_width(font, str)); return(0.0f); } -float BLF_fixed_width(void) +float BLF_fixed_width(int fontid) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) return(blf_font_fixed_width(font)); return(0.0f); @@ -395,9 +457,7 @@ float BLF_fixed_width(void) float BLF_width_default(char *str) { - FontBLF *font; float width; - int old_font=0, old_point=0, old_dpi=0; if (global_font_default == -1) global_font_default= blf_search("default"); @@ -407,30 +467,16 @@ float BLF_width_default(char *str) return(0.0f); } - font= global_font[global_font_cur]; - if (font) { - old_font= global_font_cur; - old_point= font->size; - old_dpi= font->dpi; - } - - global_font_cur= global_font_default; - BLF_size(global_font_points, global_font_dpi); - width= BLF_width(str); - - /* restore the old font. */ - if (font) { - global_font_cur= old_font; - BLF_size(old_point, old_dpi); - } + BLF_size(global_font_default, global_font_points, global_font_dpi); + width= BLF_width(global_font_default, str); return(width); } -float BLF_height(char *str) +float BLF_height(int fontid, char *str) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) return(blf_font_height(font, str)); return(0.0f); @@ -438,9 +484,7 @@ float BLF_height(char *str) float BLF_height_default(char *str) { - FontBLF *font; float height; - int old_font=0, old_point=0, old_dpi=0; if (global_font_default == -1) global_font_default= blf_search("default"); @@ -450,39 +494,38 @@ float BLF_height_default(char *str) return(0.0f); } - font= global_font[global_font_cur]; - if (font) { - old_font= global_font_cur; - old_point= font->size; - old_dpi= font->dpi; - } - - global_font_cur= global_font_default; - BLF_size(global_font_points, global_font_dpi); - height= BLF_height(str); - - /* restore the old font. */ - if (font) { - global_font_cur= old_font; - BLF_size(old_point, old_dpi); - } + BLF_size(global_font_default, global_font_points, global_font_dpi); + height= BLF_height(global_font_default, str); return(height); } -void BLF_rotation(float angle) +void BLF_rotation(int fontid, float angle) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) font->angle= angle; } -void BLF_clipping(float xmin, float ymin, float xmax, float ymax) +void BLF_clipping(int fontid, float xmin, float ymin, float xmax, float ymax) +{ + FontBLF *font; + + font= BLF_get(fontid); + if (font) { + font->clip_rec.xmin= xmin; + font->clip_rec.ymin= ymin; + font->clip_rec.xmax= xmax; + font->clip_rec.ymax= ymax; + } +} + +void BLF_clipping_default(float xmin, float ymin, float xmax, float ymax) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(global_font_default); if (font) { font->clip_rec.xmin= xmin; font->clip_rec.ymin= ymin; @@ -491,11 +534,11 @@ void BLF_clipping(float xmin, float ymin, float xmax, float ymax) } } -void BLF_shadow(int level, float r, float g, float b, float a) +void BLF_shadow(int fontid, int level, float r, float g, float b, float a) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) { font->shadow= level; font->shadow_col[0]= r; @@ -505,22 +548,22 @@ void BLF_shadow(int level, float r, float g, float b, float a) } } -void BLF_shadow_offset(int x, int y) +void BLF_shadow_offset(int fontid, int x, int y) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) { font->shadow_x= x; font->shadow_y= y; } } -void BLF_buffer(float *fbuf, unsigned char *cbuf, unsigned int w, unsigned int h, int nch) +void BLF_buffer(int fontid, float *fbuf, unsigned char *cbuf, unsigned int w, unsigned int h, int nch) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) { font->b_fbuf= fbuf; font->b_cbuf= cbuf; @@ -530,11 +573,11 @@ void BLF_buffer(float *fbuf, unsigned char *cbuf, unsigned int w, unsigned int h } } -void BLF_buffer_col(float r, float g, float b, float a) +void BLF_buffer_col(int fontid, float r, float g, float b, float a) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) { font->b_col[0]= r; font->b_col[1]= g; @@ -543,11 +586,11 @@ void BLF_buffer_col(float r, float g, float b, float a) } } -void BLF_draw_buffer(char *str) +void BLF_draw_buffer(int fontid, char *str) { FontBLF *font; - font= global_font[global_font_cur]; + font= BLF_get(fontid); if (font) blf_font_buffer(font, str); } diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index f7c5531f0ac..a932682b027 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -38,10 +38,8 @@ #include "MEM_guardedalloc.h" -#include "DNA_listBase.h" #include "DNA_vec_types.h" -#include "BKE_utildefines.h" #include "BLI_blenlib.h" #include "BLI_linklist.h" /* linknode */ diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c index bc2de70222d..7054d955faf 100644 --- a/source/blender/blenfont/intern/blf_lang.c +++ b/source/blender/blenfont/intern/blf_lang.c @@ -34,7 +34,6 @@ #include <locale.h> #include "libintl.h" -#include "MEM_guardedalloc.h" #include "DNA_listBase.h" #include "DNA_vec_types.h" @@ -59,65 +58,19 @@ char global_messagepath[1024]; char global_language[32]; char global_encoding_name[32]; -#if defined(__APPLE__) -void BLF_lang_init(void) /* Apple Only, todo - use BLI_gethome_folder */ -{ - char *bundlepath; - - strcpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT); - - /* set messagepath directory */ -#ifndef LOCALEDIR -#define LOCALEDIR "/usr/share/locale" -#endif - - strcpy(global_messagepath, ".blender/locale"); - - if (!BLI_exist(global_messagepath)) { /* locale not in current dir */ - BLI_make_file_string("/", global_messagepath, BLI_gethome(), ".blender/locale"); - if (!BLI_exist(global_messagepath)) { /* locale not in home dir */ - /* message catalogs are stored inside the application bundle */ - bundlepath= BLI_getbundle(); - strcpy(global_messagepath, bundlepath); - strcat(global_messagepath, "/Contents/Resources/locale"); - if (!BLI_exist(global_messagepath)) { /* locale not in bundle (now that's odd..) */ - strcpy(global_messagepath, LOCALEDIR); - - if (!BLI_exist(global_messagepath)) { /* locale not in LOCALEDIR */ - strcpy(global_messagepath, "message"); /* old compatibility as last */ - } - } - } - } -} -#elif defined(_WIN32) -void BLF_lang_init(void) /* Windows Only, todo - use BLI_gethome_folder */ +void BLF_lang_init(void) { - strcpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT); + char *messagepath= BLI_get_folder(BLENDER_DATAFILES, "locale"); - strcpy(global_messagepath, ".blender/locale"); - - if (!BLI_exist(global_messagepath)) { /* locale not in current dir */ - BLI_make_file_string("/", global_messagepath, BLI_gethome(), ".blender/locale"); - - if (!BLI_exist(global_messagepath)) { /* locale not in home dir */ - BLI_make_file_string("/", global_messagepath, BLI_gethome(), "/locale"); - } - } -} -#else -void BLF_lang_init(void) /* not win or mac */ -{ - char *messagepath= BLI_gethome_folder("locale", BLI_GETHOME_ALL); + BLI_strncpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT, sizeof(global_encoding_name)); - if(messagepath) - strncpy(global_messagepath, messagepath, sizeof(global_messagepath)); + if (messagepath) + BLI_strncpy(global_messagepath, messagepath, sizeof(global_messagepath)); else global_messagepath[0]= '\0'; - } -#endif + void BLF_lang_set(const char *str) { |