Improvements to bmesh edge rotate
[blender-staging.git] / source / blender / blenfont / intern / blf_internal_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. 
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2008 Blender Foundation.
19  * All rights reserved.
20  * 
21  * Contributor(s): Blender Foundation.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file blender/blenfont/intern/blf_internal_types.h
27  *  \ingroup blf
28  */
29
30
31 #ifndef __BLF_INTERNAL_TYPES_H__
32 #define __BLF_INTERNAL_TYPES_H__
33
34 typedef struct GlyphCacheBLF {
35         struct GlyphCacheBLF *next;
36         struct GlyphCacheBLF *prev;
37
38         /* font size. */
39         int size;
40
41         /* and dpi. */
42         int dpi;
43
44         /* and the glyphs. */
45         ListBase bucket[257];
46
47         /* fast ascii lookup */
48         struct GlyphBLF *glyph_ascii_table[256];
49
50         /* texture array, to draw the glyphs. */
51         GLuint *textures;
52
53         /* size of the array. */
54         int ntex;
55
56         /* and the last texture, aka. the current texture. */
57         int cur_tex;
58
59         /* like bftgl, we draw every glyph in a big texture, so this is the
60          * current position inside the texture.
61          */
62         int x_offs;
63         int y_offs;
64
65         /* and the space from one to other. */
66         unsigned int pad;
67
68         /* and the bigger glyph in the font. */
69         int max_glyph_width;
70         int max_glyph_height;
71
72         /* next two integer power of two, to build the texture. */
73         int p2_width;
74         int p2_height;
75
76         /* number of glyphs in the font. */
77         int num_glyphs;
78
79         /* number of glyphs that we load here. */
80         int rem_glyphs;
81
82         /* ascender and descender value. */
83         float ascender;
84         float descender;
85 } GlyphCacheBLF;
86
87 typedef struct GlyphBLF {
88         struct GlyphBLF *next;
89         struct GlyphBLF *prev;
90
91         /* and the character, as UTF8 */
92         unsigned int c;
93
94         /* freetype2 index, to speed-up the search. */
95         FT_UInt idx;
96
97         /* glyph box. */
98         rctf box;
99
100         /* advance size. */
101         float advance;
102
103         /* texture id where this glyph is store. */
104         GLuint tex;
105
106         /* position inside the texture where this glyph is store. */
107         int xoff;
108         int yoff;
109
110         /* Bitmap data, from freetype. Take care that this
111          * can be NULL.
112          */
113         unsigned char *bitmap;
114
115         /* glyph width and height. */
116         int width;
117         int height;
118         int pitch;
119
120         /* uv coords. */
121         float uv[2][2];
122
123         /* X and Y bearing of the glyph.
124          * The X bearing is from the origin to the glyph left bbox edge.
125          * The Y bearing is from the baseline to the top of the glyph edge.
126          */
127         float pos_x;
128         float pos_y;
129
130         /* with value of zero mean that we need build the texture. */
131         short build_tex;
132 } GlyphBLF;
133
134 typedef struct FontBLF {
135         /* font name. */
136         char *name;
137
138         /* filename or NULL. */
139         char *filename;
140
141         /* aspect ratio or scale. */
142         float aspect[3];
143
144         /* initial position for draw the text. */
145         float pos[3];
146
147         /* angle in degrees. */
148         float angle;
149         
150         /* blur: 3 or 5 large kernel */
151         int blur;
152
153         /* shadow level. */
154         int shadow;
155
156         /* and shadow offset. */
157         int shadow_x;
158         int shadow_y;
159
160         /* shadow color. */
161         float shadow_col[4];
162
163         /* store color here when drawing shadow or blur. */
164         float orig_col[4];
165
166         /* Multiplied this matrix with the current one before
167          * draw the text! see blf_draw__start.
168          */
169         double m[16];
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         /* max texture size. */
181         int max_tex_size;
182
183         /* current opengl texture  bind, avoids calling glGet */
184         int tex_bind_state;
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 lib handle. */
196         FT_Library ft_lib;
197
198         /* freetype2 face. */
199         FT_Face face;
200
201         /* for draw to buffer, always set this to NULL after finish! */
202         float *b_fbuf;
203
204         /* the same but unsigned char */
205         unsigned char *b_cbuf;
206
207         /* buffer size, keep signed so comparisons with negative values work */
208         int bw;
209         int bh;
210
211         /* number of channels. */
212         int bch;
213
214         /* and the color, the alphas is get from the glyph! */
215         float b_col[4];
216 } FontBLF;
217
218 typedef struct DirBLF {
219         struct DirBLF *next;
220         struct DirBLF *prev;
221
222         /* full path where search fonts. */
223         char *path;
224 } DirBLF;
225
226 #endif /* __BLF_INTERNAL_TYPES_H__ */