f8d5159bd9b9aae267c8f07d688734dfab241206
[blender-staging.git] / source / blender / blenfont / intern / blf_internal_types.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2008 Blender Foundation.
21  * All rights reserved.
22  * 
23  * Contributor(s): Blender Foundation.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 #ifndef BLF_INTERNAL_TYPES_H
29 #define BLF_INTERNAL_TYPES_H
30
31 typedef struct DirBLF {
32         struct DirBLF *next;
33         struct DirBLF *prev;
34
35         /* full path where search fonts. */
36         char *path;
37 } DirBLF;
38
39 #ifdef WITH_FREETYPE2
40
41 typedef struct GlyphCacheBLF {
42         struct GlyphCacheBLF *next;
43         struct GlyphCacheBLF *prev;
44
45         /* font size. */
46         int size;
47
48         /* and dpi. */
49         int dpi;
50
51         /* and the glyphs. */
52         ListBase bucket[257];
53
54         /* texture array, to draw the glyphs. */
55         GLuint *textures;
56
57         /* size of the array. */
58         int ntex;
59
60         /* and the last texture, aka. the current texture. */
61         int cur_tex;
62
63         /* like bftgl, we draw every glyph in a big texture, so this is the
64          * current position inside the texture.
65          */
66         int x_offs;
67         int y_offs;
68
69         /* and the space from one to other. */
70         unsigned int pad;
71
72         /* and the bigger glyph in the font. */
73         int max_glyph_width;
74         int max_glyph_height;
75
76         /* next two integer power of two, to build the texture. */
77         int p2_width;
78         int p2_height;
79
80         /* number of glyphs in the font. */
81         int num_glyphs;
82
83         /* number of glyphs that we load here. */
84         int rem_glyphs;
85
86         /* ascender and descender value. */
87         float ascender;
88         float descender;
89 } GlyphCacheBLF;
90
91 typedef struct GlyphBLF {
92         struct GlyphBLF *next;
93         struct GlyphBLF *prev;
94
95         /* and the character, as UTF8 */
96         unsigned int c;
97
98         /* Freetype2 index. */
99         FT_UInt index;
100
101         /* texture id where this glyph is store. */
102         GLuint tex;
103
104         /* position inside the texture where this glyph is store. */
105         int xoff;
106         int yoff;
107
108         /* glyph width and height. */
109         int width;
110         int height;
111
112         /* glyph bounding box. */
113         rctf box;
114
115         /* uv coords. */
116         float uv[2][2];
117
118         /* advance value. */
119         float advance;
120
121         /* X and Y bearing of the glyph.
122          * The X bearing is from the origin to the glyph left bbox edge.
123          * The Y bearing is from the baseline to the top of the glyph edge.
124          */
125         float pos_x;
126         float pos_y;
127 } GlyphBLF;
128
129 typedef struct FontBLF {
130         /* font name. */
131         char *name;
132
133         /* filename or NULL. */
134         char *filename;
135
136         /* reference count. */
137         int ref;
138
139         /* aspect ratio or scale. */
140         float aspect;
141
142         /* initial position for draw the text. */
143         float pos[3];
144
145         /* angle in degrees. */
146         float angle[3];
147
148         /* this is the matrix that we load before rotate/scale/translate. */
149         float mat[4][4];
150
151         /* clipping rectangle. */
152         rctf clip_rec;
153
154         /* and clipping mode. */
155         int clip_mode;
156
157         /* font dpi (default 72). */
158         int dpi;
159
160         /* font size. */
161         int size;
162
163         /* max texture size. */
164         int max_tex_size;
165
166         /* freetype2 face. */
167         FT_Face face;
168
169         /* list of glyph cache for this font. */
170         ListBase cache;
171
172         /* current glyph cache, size and dpi. */
173         GlyphCacheBLF *glyph_cache;
174 } FontBLF;
175
176 #endif /* WITH_FREETYPE2 */
177
178 typedef struct LangBLF {
179         struct LangBLF *next;
180         struct LangBLF *prev;
181
182         char *line;
183         char *language;
184         char *code;
185         int id;
186 } LangBLF;
187
188 #define BLF_LANG_FIND_BY_LINE 0
189 #define BLF_LANG_FIND_BY_LANGUAGE 1
190 #define BLF_LANG_FIND_BY_CODE 2
191
192 /* font->clip_mode */
193 #define BLF_CLIP_DISABLE 0
194 #define BLF_CLIP_OUT 1
195
196 #endif /* BLF_INTERNAL_TYPES_H */