doxygen: prevent GPL license block from being parsed as doxygen comment.
[blender.git] / source / blender / blenfont / intern / blf_font.c
index 1ae654c..7333522 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id$
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
 #include "blf_internal.h"
 
 
-/* freetype2 handle. */
-FT_Library global_ft_lib;
+/* freetype2 handle ONLY for this file!. */
+static FT_Library ft_lib;
 
 int blf_font_init(void)
 {
-       return(FT_Init_FreeType(&global_ft_lib));
+       return(FT_Init_FreeType(&ft_lib));
 }
 
 void blf_font_exit(void)
 {
-       FT_Done_FreeType(global_ft_lib);
+       FT_Done_FreeType(ft_lib);
 }
 
 void blf_font_size(FontBLF *font, int size, int dpi)
@@ -159,7 +159,6 @@ void blf_font_draw_ascii(FontBLF *font, const char *str, unsigned int len)
        if (!font->glyph_cache)
                return;
 
-       i= 0;
        pen_x= 0;
        pen_y= 0;
        has_kerning= FT_HAS_KERNING(font->face);
@@ -420,35 +419,57 @@ void blf_font_boundbox(FontBLF *font, const char *str, rctf *box)
 
 void blf_font_width_and_height(FontBLF *font, const char *str, float *width, float *height)
 {
+       float xa, ya;
        rctf box;
 
        if (font->glyph_cache) {
+               if (font->flags & BLF_ASPECT) {
+                       xa= font->aspect[0];
+                       ya= font->aspect[1];
+               }
+               else {
+                       xa= 1.0f;
+                       ya= 1.0f;
+               }
+
                blf_font_boundbox(font, str, &box);
-               *width= ((box.xmax - box.xmin) * font->aspect);
-               *height= ((box.ymax - box.ymin) * font->aspect);
+               *width= ((box.xmax - box.xmin) * xa);
+               *height= ((box.ymax - box.ymin) * ya);
        }
 }
 
 float blf_font_width(FontBLF *font, const char *str)
 {
+       float xa;
        rctf box;
 
        if (!font->glyph_cache)
                return(0.0f);
 
+       if (font->flags & BLF_ASPECT)
+               xa= font->aspect[0];
+       else
+               xa= 1.0f;
+
        blf_font_boundbox(font, str, &box);
-       return((box.xmax - box.xmin) * font->aspect);
+       return((box.xmax - box.xmin) * xa);
 }
 
 float blf_font_height(FontBLF *font, const char *str)
 {
+       float ya;
        rctf box;
 
        if (!font->glyph_cache)
                return(0.0f);
 
+       if (font->flags & BLF_ASPECT)
+               ya= font->aspect[1];
+       else
+               ya= 1.0f;
+
        blf_font_boundbox(font, str, &box);
-       return((box.ymax - box.ymin) * font->aspect);
+       return((box.ymax - box.ymin) * ya);
 }
 
 float blf_font_fixed_width(FontBLF *font)
@@ -493,11 +514,18 @@ void blf_font_free(FontBLF *font)
 
 static void blf_font_fill(FontBLF *font)
 {
-       font->aspect= 1.0f;
+       int i;
+
+       font->aspect[0]= 1.0f;
+       font->aspect[1]= 1.0f;
+       font->aspect[2]= 1.0f;
        font->pos[0]= 0.0f;
        font->pos[1]= 0.0f;
        font->angle= 0.0f;
-       unit_m4(font->mat);
+
+       for (i= 0; i < 16; i++)
+               font->m[i]= 0;
+
        font->clip_rec.xmin= 0.0f;
        font->clip_rec.xmax= 0.0f;
        font->clip_rec.ymin= 0.0f;
@@ -519,6 +547,7 @@ static void blf_font_fill(FontBLF *font)
        font->b_col[1]= 0;
        font->b_col[2]= 0;
        font->b_col[3]= 0;
+       font->ft_lib= ft_lib;
 
        memset(font->glyph_ascii_table, 0, sizeof(font->glyph_ascii_table));
 }
@@ -530,7 +559,7 @@ FontBLF *blf_font_new(const char *name, const char *filename)
        char *mfile;
 
        font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new");
-       err= FT_New_Face(global_ft_lib, filename, 0, &font->face);
+       err= FT_New_Face(ft_lib, filename, 0, &font->face);
        if (err) {
                MEM_freeN(font);
                return(NULL);
@@ -572,7 +601,7 @@ FontBLF *blf_font_new_from_mem(const char *name, unsigned char *mem, int mem_siz
        FT_Error err;
 
        font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem");
-       err= FT_New_Memory_Face(global_ft_lib, mem, mem_size, 0, &font->face);
+       err= FT_New_Memory_Face(ft_lib, mem, mem_size, 0, &font->face);
        if (err) {
                MEM_freeN(font);
                return(NULL);