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