summaryrefslogtreecommitdiff
path: root/graphtft/font.c
blob: 278e9dcf7b78041fb87ed38e2c74b313e8c12a36 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 *  $Id: font.c,v 1.4 2005/01/30 18:09:42 lordjaxom Exp $
 *
 * Taken from GraphTFT 
 */

#include "font.h"
#include <iconv.h>
#include <stdio.h>

cGraphtftFont::cGraphtftFont()
{
	_library = 0;
	_face = 0;

	// init freetype2 lib
	int error = FT_Init_FreeType(&_library);
	if (error)
	{
		esyslog("ERROR: Could not init freetype library");	
	}
}

cGraphtftFont::~cGraphtftFont()
{
	Clear();

	if (_face)
	{
		FT_Done_Face(_face);
	}

	if (_library)
	{
		FT_Done_FreeType(_library);
	}
}

bool cGraphtftFont::Load(string Filename, string CacheName, int Size, int Language, int Width, int format)
{
	if ( _cache.find(CacheName) != _cache.end() )
		return true;	
	cFont* newFont = cFont::CreateFont(Filename.c_str(), Size);
	if ( newFont == NULL )
		return false;
	_cache[CacheName] = newFont;
	return true;
}

const cFont* cGraphtftFont::GetFont(string CacheName){
	if (CacheName == "Sml") return cFont::GetFont(fontSml);
	else if (CacheName == "Fix") return cFont::GetFont(fontFix);
	else if ( _cache.find(CacheName) != _cache.end() ){
		return _cache[CacheName];
	}
	return cFont::GetFont(fontOsd);
}

void cGraphtftFont::Clear(string CacheName)
{
	Clear();	
}

void cGraphtftFont::Clear()
{
	cache_map::iterator it = _cache.begin();
	for (; it != _cache.end(); ++it)
		delete((*it).second);
	_cache.clear();
}