diff -X diff.exclude -ru text2skin/graphtft/font.c text2skin-1.1-cvs_ext-0.10-1.5.3/graphtft/font.c
--- text2skin/graphtft/font.c	2006-07-01 06:43:20.000000000 -0700
+++ text2skin-1.1-cvs_ext-0.10-1.5.3/graphtft/font.c	2007-06-11 09:11:58.000000000 -0700
@@ -38,155 +38,13 @@
 
 bool cGraphtftFont::Load(string Filename, string CacheName, int Size, int Language, int Width, int format)
 {
-	if ( _cache.find(CacheName) != _cache.end() )
-		return true;	
-	
-	int error = FT_New_Face(_library, Filename.c_str(), format, &_face);
-
-	// every thing ok?
-	if (error == FT_Err_Unknown_File_Format)
-	{
-		esyslog("ERROR: Font file (%s) could be opened and read, but it appears that its font format is unsupported", Filename.c_str());
-		return false;
-	}
-	else if (error)
-	{
-		esyslog("ERROR: Font file (%s) could be opened or read, or simply it is broken", Filename.c_str());
-		return false;
-	}
-
-	// set slot
-	_slot = _face->glyph;
-
-	if (Width > 0)
-		Width = Size * Width / 100;
-
-	// set Size
-	FT_Set_Char_Size
-	(
-		_face,          // handle to face object
-		Width*64,       // char_width in 1/64th of points
-		Size*64,	// char_height in 1/64th of points
-		0,              // horizontal device resolution (dpi)
-		0               // vertical device resolution (dpi)
-	);
-
-	iconv_t cd;
-	char from_code[255];
-	wchar_t	 	utf_buff[256];
-
-	// XXX: Get this values from i18n
-	switch(Language) {
-	case 11:
-		strcpy(from_code,"ISO8859-7");
-		break;
-	case 13:
-	case 17:
-		strcpy(from_code,"ISO8859-2");
-		break;
-	case 16:
-		strcpy(from_code,"ISO8859-5");
-		break;
-	default :
-		strcpy(from_code,"ISO8859-15");
-		break;
-	}
-
-	if ((cd = iconv_open("WCHAR_T",from_code)) == (iconv_t)-1) {
-			esyslog("ERROR: Iconv encoding not supported: %m");
-	        return false; //encoding no supportet
-	}
-
-	for (int c = 0; c < 256; c++) {
-	
-		char char_buff = c;
-		wchar_t wchar_buff;
-
-		char *in_buff,*out_buff;
-		size_t in_len, out_len, count;
-
-		in_len=1; out_len=4;
-		in_buff=(char*)&char_buff;
-		out_buff=(char *)&wchar_buff;
-		count = iconv(cd,&in_buff,&in_len,&out_buff,&out_len);
-		if ( (size_t)-1 == count ){
-			//printf("ERROR - PREPARING TABLE CHAR %d \n", c);
-			utf_buff[c] = 0;	
-		}
-		utf_buff[c] = wchar_buff;
-	}
-	iconv_close(cd);
-
-	cFont::tPixelData value;
-	int num_rows_global = (_face->size->metrics.height / 64 )+1;
-	int num_rows = num_rows_global + 2;
-	
-	cFont::tPixelData * font_data = new cFont::tPixelData[225 * num_rows];
-	
-	for (int i = 0; i < 225; i++)
-		for (int j = 0; j < num_rows; j++)
-			font_data[(i*num_rows)+j]=0x0000000000000000;
-	
-	// Time to put char 32..255 in font_data
-	FT_UInt glyph_index;	
-	for ( int num_char = 32, num_char_array = 0; num_char < 256; num_char++, num_char_array++ )
-	{
-
-		 //Get FT char index 
-		 glyph_index = FT_Get_Char_Index( _face, utf_buff[num_char] );
-		
-		 //Load the char
-		 error = FT_Load_Glyph( _face, glyph_index, FT_LOAD_DEFAULT ); 
-		 if ( error ) continue; /* ignore errors */  
-		
-		// now, convert to vdr font data
-		int width = (_slot->metrics.horiAdvance / 64) + 1;
-		int bearingX = (_slot->metrics.horiBearingX / 64) +1;
-		width = (width > (int)sizeof(cFont::tPixelData) * 8) ? (((int)sizeof(cFont::tPixelData) * 8)-2) :width ;
-
-		font_data[(num_char_array*num_rows)+0]=width;
-		font_data[(num_char_array*num_rows)+1]=num_rows_global;
-
-		// convert to a mono bitmap
-		error = FT_Render_Glyph( _face->glyph, ft_render_mode_mono );
-		if ( error ) continue;
-
-		int  top = _slot->bitmap_top;
-		int  y_off = Size - top;
-
-		unsigned char *bmp = _slot->bitmap.buffer;
-		
-      		for (int y = 0; y < _slot->bitmap.rows; ++y , y_off++) {
-	        	int pos = 0;
-			int bit = 0x80;
-			value = 0x00;
-
-			for (int x = 0; x < _slot->bitmap.width; ++x) {
-				if (bmp[pos] & bit && x < width + 1 )
-					value = value | (cFont::tPixelData)1 << width - bearingX - x ;
-				
-				bit >>= 1;
-				if (bit == 0) {
-					bit = 0x80;
-					++pos;
-				}
-			}
-			bmp += _slot->bitmap.pitch;
-			font_data[(num_char_array*num_rows)+y_off+2] = value;
-		}
-		
-	}
-	// If all was ok, put the vdr font into the cache and return true
-	cFont* newFont = NULL;
-	newFont = new cFont(font_data);
-	if (newFont) {
-		_cache[CacheName] = newFont;
-		_del[CacheName] = font_data;
-		return true;
-	}
-	delete(font_data);
-	// Something went wrong!
-	return false;
+    if ( _cache.find(CacheName) != _cache.end() )
+        return true;
+    cFont* newFont = LoadFreetypeFont(Filename.c_str(), Size);
+    if ( newFont == NULL )
+        return false;
+    _cache[CacheName] = newFont;
+    return true;
 }
 
 const cFont* cGraphtftFont::GetFont(string CacheName){
@@ -209,11 +67,6 @@
 	for (; it != _cache.end(); ++it)
 		delete((*it).second);
 	_cache.clear();
-
-	del_map::iterator del_it = _del.begin();
-	for (; del_it != _del.end(); ++del_it)
-		delete((*del_it).second);
-	_del.clear();
 }
 				
 cGraphtftFont GraphtftFont;
diff -X diff.exclude -ru text2skin/graphtft/font.h text2skin-1.1-cvs_ext-0.10-1.5.3/graphtft/font.h
--- text2skin/graphtft/font.h	2004-12-19 14:03:24.000000000 -0800
+++ text2skin-1.1-cvs_ext-0.10-1.5.3/graphtft/font.h	2007-06-11 09:12:09.000000000 -0700
@@ -24,7 +24,6 @@
 {
 private:
 	typedef map<string,cFont*> cache_map;
-	typedef map<string,cFont::tPixelData*> del_map;
 	
 public:
 	cGraphtftFont();
@@ -36,11 +35,10 @@
 	void Clear();
 
 private:
-	FT_Library		_library;
-	FT_Face			_face;
-	FT_GlyphSlot		_slot;
+	 FT_Library		_library;
+	 FT_Face			_face;
+	 FT_GlyphSlot		_slot;
 	cache_map 		_cache;
-	del_map			_del;
 
 };
 
