Cleanup a little to add "draw to buffer" (and bring back stamp).
[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., 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 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         /* glyph box. */
89         rctf box;
90
91         /* advance size. */
92         float advance;
93
94         /* texture id where this glyph is store. */
95         GLuint tex;
96
97         /* position inside the texture where this glyph is store. */
98         int xoff;
99         int yoff;
100
101         /* Bitmap data, from freetype. Take care that this
102          * can be NULL.
103          */
104         unsigned char *bitmap;
105
106         /* glyph width and height. */
107         int width;
108         int height;
109
110         /* uv coords. */
111         float uv[2][2];
112
113         /* X and Y bearing of the glyph.
114          * The X bearing is from the origin to the glyph left bbox edge.
115          * The Y bearing is from the baseline to the top of the glyph edge.
116          */
117         float pos_x;
118         float pos_y;
119
120         /* with value of zero mean that we need build the texture. */
121         short build_tex;
122 } GlyphBLF;
123
124 typedef struct FontBLF {
125         /* font name. */
126         char *name;
127
128         /* filename or NULL. */
129         char *filename;
130
131         /* aspect ratio or scale. */
132         float aspect;
133
134         /* initial position for draw the text. */
135         float pos[3];
136
137         /* angle in degrees. */
138         float angle;
139         
140         /* blur: 3 or 5 large kernel */
141         int blur;
142
143         /* shadow level. */
144         int shadow;
145
146         /* and shadow offset. */
147         int shadow_x;
148         int shadow_y;
149
150         /* shadow color. */
151         float shadow_col[4];
152         
153         /* this is the matrix that we load before rotate/scale/translate. */
154         float mat[4][4];
155
156         /* clipping rectangle. */
157         rctf clip_rec;
158
159         /* font dpi (default 72). */
160         int dpi;
161
162         /* font size. */
163         int size;
164
165         /* max texture size. */
166         int max_tex_size;
167
168         /* font options. */
169         int flags;
170
171         /* list of glyph cache for this font. */
172         ListBase cache;
173
174         /* current glyph cache, size and dpi. */
175         GlyphCacheBLF *glyph_cache;
176
177         /* freetype2 face. */
178         FT_Face face;
179 } FontBLF;
180
181 typedef struct DirBLF {
182         struct DirBLF *next;
183         struct DirBLF *prev;
184
185         /* full path where search fonts. */
186         char *path;
187 } DirBLF;
188
189 #endif /* BLF_INTERNAL_TYPES_H */