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.h3
-rw-r--r--source/blender/blenfont/intern/blf.c9
-rw-r--r--source/blender/blenfont/intern/blf_dir.c34
-rw-r--r--source/blender/blenfont/intern/blf_font.c17
-rw-r--r--source/blender/blenfont/intern/blf_internal.h3
5 files changed, 66 insertions, 0 deletions
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 516ecd102d6..b5a61f2727f 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -37,6 +37,9 @@ void BLF_exit(void);
int BLF_load(char *name);
int BLF_load_mem(char *name, unsigned char *mem, int mem_size);
+/* Attach a file with metrics information from memory. */
+void BLF_metrics_attach(unsigned char *mem, int mem_size);
+
/*
* Set/Get the current font.
*/
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index c9728c51fe5..10bbdb4851b 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -156,6 +156,15 @@ int BLF_load(char *name)
return(i);
}
+void BLF_metrics_attach(unsigned char *mem, int mem_size)
+{
+ FontBLF *font;
+
+ font= global_font[global_font_cur];
+ if (font)
+ blf_font_attach_from_mem(font, mem, mem_size);
+}
+
int BLF_load_mem(char *name, unsigned char *mem, int mem_size)
{
FontBLF *font;
diff --git a/source/blender/blenfont/intern/blf_dir.c b/source/blender/blenfont/intern/blf_dir.c
index d87262522d8..92dfe8457b0 100644
--- a/source/blender/blenfont/intern/blf_dir.c
+++ b/source/blender/blenfont/intern/blf_dir.c
@@ -173,3 +173,37 @@ int blf_dir_split(const char *str, char *file, int *size)
}
return(0);
}
+
+/* Some font have additional file with metrics information,
+ * in general, the extension of the file is: .afm or .pfm
+ */
+char *blf_dir_metrics_search(char *filename)
+{
+ char *mfile;
+ char *s;
+
+ mfile= BLI_strdup(filename);
+ s= strrchr(mfile, '.');
+ if (s) {
+ if (strlen(s) < 4) {
+ MEM_freeN(mfile);
+ return(NULL);
+ }
+ s++;
+ s[0]= 'a';
+ s[1]= 'f';
+ s[2]= 'm';
+
+ /* first check .afm */
+ if (BLI_exist(s))
+ return(s);
+
+ /* and now check .pfm */
+ s[0]= 'p';
+
+ if (BLI_exist(s))
+ return(s);
+ }
+ MEM_freeN(mfile);
+ return(NULL);
+}
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index ac13387b92a..1a96dbc13bc 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -308,6 +308,7 @@ FontBLF *blf_font_new(char *name, char *filename)
{
FontBLF *font;
FT_Error err;
+ char *mfile;
font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new");
err= FT_New_Face(global_ft_lib, filename, 0, &font->face);
@@ -324,12 +325,28 @@ FontBLF *blf_font_new(char *name, char *filename)
return(NULL);
}
+ mfile= blf_dir_metrics_search(filename);
+ if (mfile) {
+ err= FT_Attach_File(font->face, mfile);
+ MEM_freeN(mfile);
+ }
+
font->name= BLI_strdup(name);
font->filename= BLI_strdup(filename);
blf_font_fill(font);
return(font);
}
+void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size)
+{
+ FT_Open_Args open;
+
+ open.flags= FT_OPEN_MEMORY;
+ open.memory_base= (FT_Byte *)mem;
+ open.memory_size= mem_size;
+ FT_Attach_Stream(font->face, &open);
+}
+
FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size)
{
FontBLF *font;
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index da213622766..c9bdc428ebb 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -33,6 +33,7 @@ unsigned int blf_hash(unsigned int val);
int blf_utf8_next(unsigned char *buf, int *iindex);
char *blf_dir_search(const char *file);
+char *blf_dir_metrics_search(char *filename);
int blf_dir_split(const char *str, char *file, int *size);
int blf_font_init(void);
@@ -40,6 +41,8 @@ void blf_font_exit(void);
FontBLF *blf_font_new(char *name, char *filename);
FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size);
+void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size);
+
void blf_font_size(FontBLF *font, int size, int dpi);
void blf_font_draw(FontBLF *font, char *str);
void blf_font_boundbox(FontBLF *font, char *str, rctf *box);