Move shadow option (for text) from editor/interface to blenfont.
[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 GlyphTextureBLF {
82         /* texture id where this glyph is store. */
83         GLuint tex;
84
85         /* position inside the texture where this glyph is store. */
86         int xoff;
87         int yoff;
88
89         /* glyph width and height. */
90         int width;
91         int height;
92
93         /* uv coords. */
94         float uv[2][2];
95
96         /* X and Y bearing of the glyph.
97          * The X bearing is from the origin to the glyph left bbox edge.
98          * The Y bearing is from the baseline to the top of the glyph edge.
99          */
100         float pos_x;
101         float pos_y;
102 } GlyphTextureBLF;
103
104 typedef struct GlyphBitmapBLF {
105         /* image data. */
106         unsigned char *image;
107
108         int width;
109         int height;
110         int pitch;
111
112         float pos_x;
113         float pos_y;
114 } GlyphBitmapBLF;
115
116 typedef struct GlyphBLF {
117         struct GlyphBLF *next;
118         struct GlyphBLF *prev;
119
120         /* and the character, as UTF8 */
121         unsigned int c;
122
123         /* glyph box. */
124         rctf box;
125
126         /* advance size. */
127         float advance;
128
129         /* texture information. */
130         GlyphTextureBLF *tex_data;
131
132         /* bitmap information. */
133         GlyphBitmapBLF *bitmap_data;
134 } GlyphBLF;
135
136 typedef struct FontBLF {
137         /* font name. */
138         char *name;
139
140         /* filename or NULL. */
141         char *filename;
142
143         /* draw mode, texture or bitmap. */
144         int mode;
145
146         /* aspect ratio or scale. */
147         float aspect;
148
149         /* initial position for draw the text. */
150         float pos[3];
151
152         /* angle in degrees. */
153         float angle;
154         
155         /* blur: 3 or 5 large kernel */
156         int blur;
157
158         /* shadow level. */
159         int shadow;
160
161         /* and shadow offset. */
162         int shadow_x;
163         int shadow_y;
164
165         /* shadow color. */
166         float shadow_col[4];
167         
168         /* this is the matrix that we load before rotate/scale/translate. */
169         float mat[4][4];
170
171         /* clipping rectangle. */
172         rctf clip_rec;
173
174         /* font dpi (default 72). */
175         int dpi;
176
177         /* font size. */
178         int size;
179
180         /* kerning space, user setting. */
181         float kerning;
182
183         /* max texture size. */
184         int max_tex_size;
185
186         /* font options. */
187         int flags;
188
189         /* list of glyph cache for this font. */
190         ListBase cache;
191
192         /* current glyph cache, size and dpi. */
193         GlyphCacheBLF *glyph_cache;
194
195         /* freetype2 face. */
196         FT_Face face;
197 } FontBLF;
198
199 typedef struct DirBLF {
200         struct DirBLF *next;
201         struct DirBLF *prev;
202
203         /* full path where search fonts. */
204         char *path;
205 } DirBLF;
206
207 #endif /* BLF_INTERNAL_TYPES_H */