-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathft2_fontdefs.h
87 lines (71 loc) · 2.25 KB
/
ft2_fontdefs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#ifndef FT2_PRIVATE_H__
#define FT2_PRIVATE_H__
// anything should work, but I recommend multiples of 8
// since the texture size should be a power of 2
#define FONT_CHARS_PER_LINE 16
#define FONT_CHAR_LINES 16
#define FONT_CHARS_PER_MAP (FONT_CHARS_PER_LINE * FONT_CHAR_LINES)
// map.start value for incremental maps to hold a place
#define INCMAP_START 0x110000
typedef struct glyph_slot_s
{
qbool image;
// we keep the quad coords here only currently
// if you need other info, make Font_LoadMapForIndex fill it into this slot
float txmin; // texture coordinate in [0,1]
float txmax;
float tymin;
float tymax;
float vxmin;
float vxmax;
float vymin;
float vymax;
float advance_x;
float advance_y;
} glyph_slot_t;
struct ft2_font_map_s
{
Uchar start;
float size;
// the actual size used in the freetype code
// by convention, the requested size is the height of the font's bounding box.
float intSize;
int glyphSize;
ft2_font_map_t *next;
cachepic_t *pic;
qbool static_tex;
glyph_slot_t glyphs[FONT_CHARS_PER_MAP];
Uchar glyphchars[FONT_CHARS_PER_MAP];
// saves us the trouble of calculating these over and over again
double sfx, sfy;
// note: float width_of[256] was moved to `struct dp_font_s` as width_of_ft2
// these may only present in a startmap
// contains the kerning information for the first 256 characters
// for the other characters, we will lookup the kerning information
ft2_kerning_t *kerning;
// for accessing incremental maps for bigblock glyphs
font_incmap_t *incmap;
};
struct font_incmap_s
{
// associated fontmap; startmap of incmaps
struct ft2_font_map_s *fontmap;
int charcount;
int newmap_start;
// two rounds of merge will take place, keep those data until then
unsigned char *data_tier1[FONT_CHARS_PER_LINE];
unsigned char *data_tier2[FONT_CHAR_LINES];
// count of merged maps
int tier1_merged, tier2_merged;
};
struct ft2_attachment_s
{
const unsigned char *data;
fs_offset_t size;
};
//qbool Font_LoadMapForIndex(ft2_font_t *font, Uchar _ch, ft2_font_map_t **outmap);
qbool Font_LoadMapForIndex(ft2_font_t *font, int map_index, Uchar _ch, ft2_font_map_t **outmap);
void font_start(void);
void font_shutdown(void);
void font_newmap(void);
#endif // FT2_PRIVATE_H__