doxygen: prevent GPL license block from being parsed as doxygen comment.
[blender.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 GlyphCacheBLF {
32         struct GlyphCacheBLF *next;
33         struct GlyphCacheBLF *prev;
34
35         /* font size. */
36         int size;
37
38         /* and dpi. */
39         int dpi;
40
41         /* and the glyphs. */
42         ListBase bucket[257];
43
44         /* texture array, to draw the glyphs. */
45         GLuint *textures;
46
47         /* size of the array. */
48         int ntex;
49
50         /* and the last texture, aka. the current texture. */
51         int cur_tex;
52
53         /* like bftgl, we draw every glyph in a big texture, so this is the
54          * current position inside the texture.
55          */
56         int x_offs;
57         int y_offs;
58
59         /* and the space from one to other. */
60         unsigned int pad;
61
62         /* and the bigger glyph in the font. */
63         int max_glyph_width;
64         int max_glyph_height;
65
66         /* next two integer power of two, to build the texture. */
67         int p2_width;
68         int p2_height;
69
70         /* number of glyphs in the font. */
71         int num_glyphs;
72
73         /* number of glyphs that we load here. */
74         int rem_glyphs;
75
76         /* ascender and descender value. */
77         float ascender;
78         float descender;
79 } GlyphCacheBLF;
80
81 typedef struct GlyphBLF {
82         struct GlyphBLF *next;
83         struct GlyphBLF *prev;
84
85         /* and the character, as UTF8 */
86         unsigned int c;
87
88         /* freetype2 index, to speed-up the search. */
89         FT_UInt idx;
90
91         /* glyph box. */
92         rctf box;
93
94         /* advance size. */
95         float advance;
96
97         /* texture id where this glyph is store. */
98         GLuint tex;
99
100         /* position inside the texture where this glyph is store. */
101         int xoff;
102         int yoff;
103
104         /* Bitmap data, from freetype. Take care that this
105          * can be NULL.
106          */
107         unsigned char *bitmap;
108
109         /* glyph width and height. */
110         int width;
111         int height;
112         int pitch;
113
114         /* uv coords. */
115         float uv[2][2];
116
117         /* X and Y bearing of the glyph.
118          * The X bearing is from the origin to the glyph left bbox edge.
119          * The Y bearing is from the baseline to the top of the glyph edge.
120          */
121         float pos_x;
122         float pos_y;
123
124         /* with value of zero mean that we need build the texture. */
125         short build_tex;
126 } GlyphBLF;
127
128 typedef struct FontBLF {
129         /* font name. */
130         char *name;
131
132         /* filename or NULL. */
133         char *filename;
134
135         /* aspect ratio or scale. */
136         float aspect[3];
137
138         /* initial position for draw the text. */
139         float pos[3];
140
141         /* angle in degrees. */
142         float angle;
143         
144         /* blur: 3 or 5 large kernel */
145         int blur;
146
147         /* shadow level. */
148         int shadow;
149
150         /* and shadow offset. */
151         int shadow_x;
152         int shadow_y;
153
154         /* shadow color. */
155         float shadow_col[4];
156         
157         /* Multiplied this matrix with the current one before
158          * draw the text! see blf_draw__start.
159          */
160         double m[16];
161
162         /* clipping rectangle. */
163         rctf clip_rec;
164
165         /* font dpi (default 72). */
166         int dpi;
167
168         /* font size. */
169         int size;
170
171         /* max texture size. */
172         int max_tex_size;
173
174         /* font options. */
175         int flags;
176
177         /* list of glyph cache for this font. */
178         ListBase cache;
179
180         /* current glyph cache, size and dpi. */
181         GlyphCacheBLF *glyph_cache;
182         
183         /* fast ascii lookip */
184         GlyphBLF *glyph_ascii_table[256];
185
186         /* freetype2 lib handle. */
187         FT_Library ft_lib;
188
189         /* freetype2 face. */
190         FT_Face face;
191
192         /* for draw to buffer, always set this to NULL after finish! */
193         float *b_fbuf;
194
195         /* the same but unsigned char */
196         unsigned char *b_cbuf;
197
198         /* buffer size. */
199         unsigned int bw;
200         unsigned int bh;
201
202         /* number of channels. */
203         int bch;
204
205         /* and the color, the alphas is get from the glyph! */
206         float b_col[4];
207 } FontBLF;
208
209 typedef struct DirBLF {
210         struct DirBLF *next;
211         struct DirBLF *prev;
212
213         /* full path where search fonts. */
214         char *path;
215 } DirBLF;
216
217 #endif /* BLF_INTERNAL_TYPES_H */