Blame


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