1*7dd7cddfSDavid du Colombier #include <u.h> 2*7dd7cddfSDavid du Colombier #include <libc.h> 3*7dd7cddfSDavid du Colombier #include <draw.h> 4*7dd7cddfSDavid du Colombier 5*7dd7cddfSDavid du Colombier /* 6*7dd7cddfSDavid du Colombier * Cobble fake font using existing subfont 7*7dd7cddfSDavid du Colombier */ 8*7dd7cddfSDavid du Colombier Font* mkfont(Subfont * subfont,Rune min)9*7dd7cddfSDavid du Colombiermkfont(Subfont *subfont, Rune min) 10*7dd7cddfSDavid du Colombier { 11*7dd7cddfSDavid du Colombier Font *font; 12*7dd7cddfSDavid du Colombier Cachefont *c; 13*7dd7cddfSDavid du Colombier 14*7dd7cddfSDavid du Colombier font = malloc(sizeof(Font)); 15*7dd7cddfSDavid du Colombier if(font == 0) 16*7dd7cddfSDavid du Colombier return 0; 17*7dd7cddfSDavid du Colombier memset(font, 0, sizeof(Font)); 18*7dd7cddfSDavid du Colombier font->display = subfont->bits->display; 19*7dd7cddfSDavid du Colombier font->name = strdup("<synthetic>"); 20*7dd7cddfSDavid du Colombier font->ncache = NFCACHE+NFLOOK; 21*7dd7cddfSDavid du Colombier font->nsubf = NFSUBF; 22*7dd7cddfSDavid du Colombier font->cache = malloc(font->ncache * sizeof(font->cache[0])); 23*7dd7cddfSDavid du Colombier font->subf = malloc(font->nsubf * sizeof(font->subf[0])); 24*7dd7cddfSDavid du Colombier if(font->name==0 || font->cache==0 || font->subf==0){ 25*7dd7cddfSDavid du Colombier Err: 26*7dd7cddfSDavid du Colombier free(font->name); 27*7dd7cddfSDavid du Colombier free(font->cache); 28*7dd7cddfSDavid du Colombier free(font->subf); 29*7dd7cddfSDavid du Colombier free(font->sub); 30*7dd7cddfSDavid du Colombier free(font); 31*7dd7cddfSDavid du Colombier return 0; 32*7dd7cddfSDavid du Colombier } 33*7dd7cddfSDavid du Colombier memset(font->cache, 0, font->ncache*sizeof(font->cache[0])); 34*7dd7cddfSDavid du Colombier memset(font->subf, 0, font->nsubf*sizeof(font->subf[0])); 35*7dd7cddfSDavid du Colombier font->height = subfont->height; 36*7dd7cddfSDavid du Colombier font->ascent = subfont->ascent; 37*7dd7cddfSDavid du Colombier font->age = 1; 38*7dd7cddfSDavid du Colombier font->sub = malloc(sizeof(Cachefont*)); 39*7dd7cddfSDavid du Colombier if(font->sub == 0) 40*7dd7cddfSDavid du Colombier goto Err; 41*7dd7cddfSDavid du Colombier c = malloc(sizeof(Cachefont)); 42*7dd7cddfSDavid du Colombier if(c == 0) 43*7dd7cddfSDavid du Colombier goto Err; 44*7dd7cddfSDavid du Colombier font->nsub = 1; 45*7dd7cddfSDavid du Colombier font->sub[0] = c; 46*7dd7cddfSDavid du Colombier c->min = min; 47*7dd7cddfSDavid du Colombier c->max = min+subfont->n-1; 48*7dd7cddfSDavid du Colombier c->offset = 0; 49*7dd7cddfSDavid du Colombier c->name = 0; /* noticed by freeup() and agefont() */ 50*7dd7cddfSDavid du Colombier c->subfontname = 0; 51*7dd7cddfSDavid du Colombier font->subf[0].age = 0; 52*7dd7cddfSDavid du Colombier font->subf[0].cf = c; 53*7dd7cddfSDavid du Colombier font->subf[0].f = subfont; 54*7dd7cddfSDavid du Colombier return font; 55*7dd7cddfSDavid du Colombier } 56