aboutsummaryrefslogtreecommitdiff
path: root/src/libdraw/subfont.c
blob: 494cd574332c7e7180e597e6a8df7249f2cb1cd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <u.h>
#include <libc.h>
#include <draw.h>

Subfont*
allocsubfont(char *name, int n, int height, int ascent, Fontchar *info, Image *i)
{
	Subfont *f, *cf;

	assert(height != 0 /* allocsubfont */);

	f = malloc(sizeof(Subfont));
	if(f == 0)
		return 0;
	f->n = n;
	f->height = height;
	f->ascent = ascent;
	f->info = info;
	f->bits = i;
	f->ref = 1;
	if(name){
		/*
		 * if already caching this subfont, leave older
		 * (and hopefully more widely used) copy in cache.
		 * this case should not happen -- we got called
		 * because cachechars needed this subfont and it
		 * wasn't in the cache.
		 */
		f->name = strdup(name);
		if((cf=lookupsubfont(i->display, name)) == 0)
			installsubfont(name, f);
		else
			freesubfont(cf);	/* drop ref we just picked up */
	}else
		f->name = 0;
	return f;
}