Cleanup: remove redundant doxygen \file argument
[blender.git] / source / blender / blenfont / intern / blf_internal_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup blf
21  */
22
23
24 #ifndef __BLF_INTERNAL_TYPES_H__
25 #define __BLF_INTERNAL_TYPES_H__
26
27 #include "GPU_vertex_buffer.h"
28 #include "GPU_texture.h"
29
30 #define BLF_BATCH_DRAW_LEN_MAX 2048 /* in glyph */
31
32 typedef struct BatchBLF {
33         struct FontBLF *font; /* can only batch glyph from the same font */
34         struct GPUBatch *batch;
35         struct GPUVertBuf *verts;
36         struct GPUVertBufRaw pos_step, tex_step, col_step;
37         unsigned int pos_loc, tex_loc, col_loc;
38         unsigned int glyph_len;
39         float ofs[2];    /* copy of font->pos */
40         float mat[4][4]; /* previous call modelmatrix. */
41         bool enabled, active, simple_shader;
42         GPUTexture *tex_bind_state;
43 } BatchBLF;
44
45 extern BatchBLF g_batch;
46
47 typedef struct KerningCacheBLF {
48         struct KerningCacheBLF *next, *prev;
49
50         /* kerning mode. */
51         FT_UInt mode;
52
53         /* only cache a ascii glyph pairs. Only store the x
54          * offset we are interested in, instead of the full FT_Vector. */
55         int table[0x80][0x80];
56 } KerningCacheBLF;
57
58 typedef struct GlyphCacheBLF {
59         struct GlyphCacheBLF *next;
60         struct GlyphCacheBLF *prev;
61
62         /* font size. */
63         unsigned int size;
64
65         /* and dpi. */
66         unsigned int dpi;
67
68         /* and the glyphs. */
69         ListBase bucket[257];
70
71         /* fast ascii lookup */
72         struct GlyphBLF *glyph_ascii_table[256];
73
74         /* texture array, to draw the glyphs. */
75         GPUTexture **textures;
76
77         /* size of the array. */
78         unsigned int textures_len;
79
80         /* and the last texture, aka. the current texture. */
81         unsigned int texture_current;
82
83         /* like bftgl, we draw every glyph in a big texture, so this is the
84          * current position inside the texture.
85          */
86         int offset_x;
87         int offset_y;
88
89         /* and the space from one to other. */
90         int pad;
91
92         /* and the bigger glyph in the font. */
93         int glyph_width_max;
94         int glyph_height_max;
95
96         /* next two integer power of two, to build the texture. */
97         int p2_width;
98         int p2_height;
99
100         /* number of glyphs in the font. */
101         int glyphs_len_max;
102
103         /* number of glyphs not yet loaded (decreases every glyph loaded). */
104         int glyphs_len_free;
105
106         /* ascender and descender value. */
107         float ascender;
108         float descender;
109 } GlyphCacheBLF;
110
111 typedef struct GlyphBLF {
112         struct GlyphBLF *next;
113         struct GlyphBLF *prev;
114
115         /* and the character, as UTF8 */
116         unsigned int c;
117
118         /* freetype2 index, to speed-up the search. */
119         FT_UInt idx;
120
121         /* glyph box. */
122         rctf box;
123
124         /* advance size. */
125         float advance;
126         /* avoid conversion to int while drawing */
127         int advance_i;
128
129         /* texture id where this glyph is store. */
130         GPUTexture *tex;
131
132         /* position inside the texture where this glyph is store. */
133         int offset_x;
134         int offset_y;
135
136         /* Bitmap data, from freetype. Take care that this
137          * can be NULL.
138          */
139         unsigned char *bitmap;
140
141         /* glyph width and height. */
142         int width;
143         int height;
144         int pitch;
145
146         /* uv coords. */
147         float uv[2][2];
148
149         /* X and Y bearing of the glyph.
150          * The X bearing is from the origin to the glyph left bbox edge.
151          * The Y bearing is from the baseline to the top of the glyph edge.
152          */
153         float pos_x;
154         float pos_y;
155
156         /* with value of zero mean that we need build the texture. */
157         char build_tex;
158 } GlyphBLF;
159
160 typedef struct FontBufInfoBLF {
161         /* for draw to buffer, always set this to NULL after finish! */
162         float *fbuf;
163
164         /* the same but unsigned char */
165         unsigned char *cbuf;
166
167         /* buffer size, keep signed so comparisons with negative values work */
168         int w;
169         int h;
170
171         /* number of channels. */
172         int ch;
173
174         /* display device used for color management */
175         struct ColorManagedDisplay *display;
176
177         /* and the color, the alphas is get from the glyph!
178          * color is srgb space */
179         float col_init[4];
180         /* cached conversion from 'col_init' */
181         unsigned char col_char[4];
182         float col_float[4];
183
184 } FontBufInfoBLF;
185
186 typedef struct FontBLF {
187         /* font name. */
188         char *name;
189
190         /* # of times this font was loaded */
191         unsigned int reference_count;
192
193         /* filename or NULL. */
194         char *filename;
195
196         /* aspect ratio or scale. */
197         float aspect[3];
198
199         /* initial position for draw the text. */
200         float pos[3];
201
202         /* angle in radians. */
203         float angle;
204
205 #if 0 /* BLF_BLUR_ENABLE */
206         /* blur: 3 or 5 large kernel */
207         int blur;
208 #endif
209
210         /* shadow level. */
211         int shadow;
212
213         /* and shadow offset. */
214         int shadow_x;
215         int shadow_y;
216
217         /* shadow color. */
218         unsigned char shadow_color[4];
219
220         /* main text color. */
221         unsigned char color[4];
222
223         /* Multiplied this matrix with the current one before
224          * draw the text! see blf_draw__start.
225          */
226         float m[16];
227
228         /* clipping rectangle. */
229         rctf clip_rec;
230
231         /* the width to wrap the text, see BLF_WORD_WRAP */
232         int wrap_width;
233
234         /* font dpi (default 72). */
235         unsigned int dpi;
236
237         /* font size. */
238         unsigned int size;
239
240         /* max texture size. */
241         int tex_size_max;
242
243         /* cache current OpenGL texture to save calls into the API */
244         GPUTexture *tex_bind_state;
245
246         /* font options. */
247         int flags;
248
249         /* list of glyph cache for this font. */
250         ListBase cache;
251
252         /* current glyph cache, size and dpi. */
253         GlyphCacheBLF *glyph_cache;
254
255         /* list of kerning cache for this font. */
256         ListBase kerning_caches;
257
258         /* current kerning cache for this font and kerning mode. */
259         KerningCacheBLF *kerning_cache;
260
261         /* freetype2 lib handle. */
262         FT_Library ft_lib;
263
264         /* Mutex lock for library */
265         SpinLock *ft_lib_mutex;
266
267         /* freetype2 face. */
268         FT_Face face;
269
270         /* freetype kerning */
271         FT_UInt kerning_mode;
272
273         /* data for buffer usage (drawing into a texture buffer) */
274         FontBufInfoBLF buf_info;
275 } FontBLF;
276
277 typedef struct DirBLF {
278         struct DirBLF *next;
279         struct DirBLF *prev;
280
281         /* full path where search fonts. */
282         char *path;
283 } DirBLF;
284
285 #define BLF_TEXTURE_UNSET ((unsigned int)-1)
286
287 #endif /* __BLF_INTERNAL_TYPES_H__ */