ref: ac3147a9c58f339f9b978ab087464912c16bc8f8
dir: /sys/src/libdraw/mkfont.c/
#include <u.h> #include <libc.h> #include <draw.h> /* * Cobble fake font using existing subfont */ Font* mkfont(Subfont *subfont, Rune min) { Font *font; Cachefont *c; font = malloc(sizeof(Font)); if(font == nil) return nil; memset(font, 0, sizeof(Font)); font->display = subfont->bits->display; font->name = strdup("<synthetic>"); font->ncache = NFCACHE+NFLOOK; font->nsubf = NFSUBF; font->cache = malloc(font->ncache * sizeof(font->cache[0])); font->subf = malloc(font->nsubf * sizeof(font->subf[0])); if(font->name==nil || font->cache==nil || font->subf==nil){ Err: free(font->name); free(font->cache); free(font->subf); free(font->sub); free(font); return 0; } memset(font->cache, 0, font->ncache*sizeof(font->cache[0])); memset(font->subf, 0, font->nsubf*sizeof(font->subf[0])); font->height = subfont->height; font->ascent = subfont->ascent; font->age = 1; font->sub = malloc(sizeof(Cachefont*)); if(font->sub == nil) goto Err; c = malloc(sizeof(Cachefont)); if(c == nil) goto Err; font->nsub = 1; font->sub[0] = c; c->min = min; c->max = min+subfont->n-1; c->offset = 0; c->name = nil; /* noticed by agefont() */ c->subfontname = nil; font->subf[0].age = 0; font->subf[0].cf = c; font->subf[0].f = subfont; return font; }