Small cleanup, all this options are now in the User Preferences, RNA.
[blender-staging.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         /* texture id where this glyph is store. */
89         GLuint tex;
90
91         /* position inside the texture where this glyph is store. */
92         int xoff;
93         int yoff;
94
95         /* glyph width and height. */
96         int width;
97         int height;
98
99         /* glyph bounding box. */
100         rctf box;
101
102         /* uv coords. */
103         float uv[2][2];
104
105         /* advance value. */
106         float advance;
107
108         /* X and Y bearing of the glyph.
109          * The X bearing is from the origin to the glyph left bbox edge.
110          * The Y bearing is from the baseline to the top of the glyph edge.
111          */
112         float pos_x;
113         float pos_y;
114 } GlyphBLF;
115
116 typedef struct FontBLF {
117         /* font name. */
118         char *name;
119
120         /* filename or NULL. */
121         char *filename;
122
123         /* font type, can be freetype2 or internal. */
124         int type;
125
126         /* reference count. */
127         int ref;
128
129         /* aspect ratio or scale. */
130         float aspect;
131
132         /* initial position for draw the text. */
133         float pos[3];
134
135         /* angle in degrees. */
136         float angle;
137
138         /* this is the matrix that we load before rotate/scale/translate. */
139         float mat[4][4];
140
141         /* clipping rectangle. */
142         rctf clip_rec;
143
144         /* font dpi (default 72). */
145         int dpi;
146
147         /* font size. */
148         int size;
149
150         /* max texture size. */
151         int max_tex_size;
152
153         /* font options. */
154         int flags;
155
156         /* list of glyph cache for this font. */
157         ListBase cache;
158
159         /* current glyph cache, size and dpi. */
160         GlyphCacheBLF *glyph_cache;
161
162         /* engine data. */
163         void *engine;
164
165         /* engine functions. */
166         void (*size_set)(struct FontBLF *, int, int);
167         void (*draw)(struct FontBLF *, char *);
168         void (*boundbox_get)(struct FontBLF *, char *, rctf *);
169         float (*width_get)(struct FontBLF *, char *);
170         float (*height_get)(struct FontBLF *, char *);
171         void (*free)(struct FontBLF *);
172 } FontBLF;
173
174 typedef struct CharDataBLF {
175         signed char width, height;
176         signed char xorig, yorig;
177         signed char advance;
178         
179         short data_offset;
180 } CharDataBLF;
181
182 typedef struct FontDataBLF {
183         int xmin, ymin;
184         int xmax, ymax;
185
186         CharDataBLF chars[256];
187         unsigned char *bitmap_data;
188
189         GLuint texid;
190 } FontDataBLF;
191
192 typedef struct DirBLF {
193         struct DirBLF *next;
194         struct DirBLF *prev;
195
196         /* full path where search fonts. */
197         char *path;
198 } DirBLF;
199
200 /* font->clip_mode */
201 #define BLF_CLIP_DISABLE 0
202 #define BLF_CLIP_OUT 1
203
204 /* font->type */
205 #define BLF_FONT_FREETYPE2 0
206 #define BLF_FONT_INTERNAL 1
207
208 #endif /* BLF_INTERNAL_TYPES_H */