2011-03-30 12:46:40 +00:00
|
|
|
#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));
|
2015-03-02 10:01:12 +00:00
|
|
|
if(font == nil)
|
|
|
|
return nil;
|
2011-03-30 12:46:40 +00:00
|
|
|
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]));
|
2015-03-02 10:01:12 +00:00
|
|
|
if(font->name==nil || font->cache==nil || font->subf==nil){
|
2011-03-30 12:46:40 +00:00
|
|
|
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*));
|
2015-03-02 10:01:12 +00:00
|
|
|
if(font->sub == nil)
|
2011-03-30 12:46:40 +00:00
|
|
|
goto Err;
|
|
|
|
c = malloc(sizeof(Cachefont));
|
2015-03-02 10:01:12 +00:00
|
|
|
if(c == nil)
|
2011-03-30 12:46:40 +00:00
|
|
|
goto Err;
|
|
|
|
font->nsub = 1;
|
|
|
|
font->sub[0] = c;
|
|
|
|
c->min = min;
|
|
|
|
c->max = min+subfont->n-1;
|
|
|
|
c->offset = 0;
|
2015-03-02 10:01:12 +00:00
|
|
|
c->name = nil; /* noticed by agefont() */
|
|
|
|
c->subfontname = nil;
|
2011-03-30 12:46:40 +00:00
|
|
|
font->subf[0].age = 0;
|
|
|
|
font->subf[0].cf = c;
|
|
|
|
font->subf[0].f = subfont;
|
|
|
|
return font;
|
|
|
|
}
|