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