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:
authorDiego Borghetti <bdiego@gmail.com>2009-05-09 01:24:58 +0400
committerDiego Borghetti <bdiego@gmail.com>2009-05-09 01:24:58 +0400
commitfc1036d206bc23b371e4e04e5e257feee7f824b3 (patch)
tree32de79454b6c376abd6992282fe8d4f1cd830629 /source/blender/blenfont
parent749a9083318f7d59999c1f3ce891db658e089772 (diff)
Add support for attach a file with metrics information to the font.
Fonts like Type 1, have one file with the glyph image and another file with metrics and kerning information, this try to search if the font have this information and load (try open the same file but with the .afm and .pfm extension). Also add a function to load the same information from memory, just in case that in some point we add a font like this.
Diffstat (limited to 'source/blender/blenfont')
-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);