Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#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 == 0)
                return 0;
        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==0 || font->cache==0 || font->subf==0){
    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 == 0)
                goto Err;
        c = malloc(sizeof(Cachefont));
        if(c == 0)
                goto Err;
        font->nsub = 1;
        font->sub[0] = c;
        c->min = min;
        c->max = min+subfont->n-1;
        c->offset = 0;
        c->name = 0;    /* noticed by freeup() and agefont() */
        c->subfontname = 0;
        font->subf[0].age = 0;
        font->subf[0].cf = c;
        font->subf[0].f = subfont;
        return font;
}