MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / grfont_Load

Function grfont_Load

grtext/grfont.cpp:275–403  ·  view source on GitHub ↗

returns a handle to a loaded font.

Source from the content-addressed store, hash-verified

273
274// returns a handle to a loaded font.
275int grfont_Load(const char *fname) {
276 FONTFILE ff;
277 tFontFileInfo fnt;
278 char fontname[32];
279 int num_char, i, handle = -1;
280
281 ASSERT(Font_init);
282
283 // check if font is in list. if so, just return the handle.
284
285 // find free slot in font list.
286 for (i = 0; i < MAX_FONTS; i++) {
287 if (Fonts[i].references == 0)
288 break;
289 }
290 ASSERT(i < MAX_FONTS);
291
292 handle = i;
293
294 // open file.
295 ff = OPEN_FONT(fname);
296 if (!ff) {
297 return false;
298 } else if (ff == (FONTFILE)0xffffffff) {
299 mprintf(0, "Illegal font file: %s.\n", fname);
300 return false;
301 }
302
303 // read header information
304 fnt.width = READ_FONT_SHORT(ff);
305 fnt.height = READ_FONT_SHORT(ff);
306 fnt.flags = READ_FONT_SHORT(ff);
307 fnt.baseline = READ_FONT_SHORT(ff);
308 fnt.min_ascii = READ_FONT_BYTE(ff);
309 fnt.max_ascii = READ_FONT_BYTE(ff);
310 READ_FONT_DATA(ff, fontname, 32, 1);
311
312 // read new info
313 if (fnt.flags & FT_FFI2) {
314 fnt.ffi2.tracking = READ_FONT_SHORT(ff);
315 READ_FONT_DATA(ff, fnt.ffi2.reserved, sizeof(fnt.ffi2.reserved), 1);
316 } else {
317 fnt.ffi2.tracking = 0;
318 }
319
320 fnt.brightness = ((fnt.baseline >> 8) / 10.0f);
321/*
322 mprintf(0, "%s font.\n", fname);
323 mprintf(0, " <ht %d>::<min %d>::<max %d>::<base %d>", fnt.height, fnt.min_ascii, fnt.max_ascii, fnt.baseline);
324*/
325 num_char = fnt.max_ascii - fnt.min_ascii + 1;
326
327 if (fnt.max_ascii < 'a') {
328 fnt.flags |= FT_UPPERCASE;
329 }
330
331 // Read in all widths
332 if (fnt.flags & FT_PROPORTIONAL) {

Callers 5

FontKernFunction · 0.85
FontCreateFunction · 0.85
FontViewFunction · 0.85
InitSystemsFunction · 0.85
LoadFontFunction · 0.85

Calls 7

OPEN_FONTFunction · 0.70
READ_FONT_SHORTFunction · 0.70
READ_FONT_BYTEFunction · 0.70
READ_FONT_DATAFunction · 0.70
READ_FONT_INTFunction · 0.70
CLOSE_FONTFunction · 0.70

Tested by

no test coverage detected