int glyphs[0]; // offsets to glyphs from start of rec
} SF_bdffont;
-char * m_fontfiles[8];
+char * m_fontfiles[9];
static char s[1026];
extern SFONT *SF_font3, *SF_font3double;
-SFONT * (*ttfontloader)( char *fspec, int *err) = NULL;
+SFONT * (*ttfontloader)( char *fspec, SFONT *like, int *err) = NULL;
void (*ttfontsdone)() = NULL;
-static SFONT *tryloadfont( char *fspec)
+static SFONT *tryloadfont( char *fspec, SFONT *like)
{
int err,size;
char *p;
p = strchr(fspec,'|');
if (p) *p = 0;
if (ttfontloader)
- b = ttfontloader(fspec,&err);
+ b = ttfontloader(fspec, like, &err);
if (!b)
b = loadfont(fspec,&err,&size);
if (b) break;
if (!m_vga_fonts)
{
- for (i=0;i<8;i++)
+ for (i = 0; i <= 8; i++)
if (m_fontfiles[i])
{
- SFONT *b = tryloadfont(m_fontfiles[i]);
+ SFONT *b = tryloadfont(m_fontfiles[i],
+ i == 8 ? myfonts[FIXED_WIDTH_FONT] : NULL);
if (!b) fprintf(stderr,"WARNING: could not load font%d [%s]\n",i,m_fontfiles[i]);
else
{
if (ttfontsdone) ttfontsdone();
// now set the graphics font
- if (myfonts[4]->height(myfonts[4]) < 16)
- myfonts[8] = SF_font3;
- else
- myfonts[8] = SF_font3double;
+ if (!myfonts[8])
+ if (myfonts[4]->height(myfonts[4]) < 16)
+ myfonts[8] = SF_font3;
+ else
+ myfonts[8] = SF_font3double;
//for (i=0;i<8;i++){ SFONT *s = myfonts[i]; printf("%d %p %d %d %d %d %d\n",
//i,s,s->minchar(s),s->maxchar(s),s->ascent(s),s->descent(s),s->height(s));}
extern int m_random_seed;
extern int m_fullscreen;
extern int m_reqW, m_reqH;
-extern char * m_fontfiles[8];
+extern char * m_fontfiles[9];
extern bool m_localfiles;
extern int m_no_sound;
extern int m_vga_fonts;
typedef struct sfontstruct SFONT;
-extern SFONT * (*ttfontloader)( char *fspec, int *err);
+extern SFONT * (*ttfontloader)( char *fspec, SFONT *like, int *err);
extern void (*ttfontsdone)();
struct sfontstruct {
f->glyphs[ch] = res;
}
-static SFONT * loadftype( char *fname, int size, int *err)
+static SFONT * loadftype( char *fname, int size, SFONT *like, int *err)
{
MYFONT *res;
FT_Face face;
*err = FT_New_Face( library, fname, 0, &face ); /* create face object */
if (*err){ res->sfont.destroy(&res->sfont); return NULL; }
- *err = FT_Set_Pixel_Sizes( face, size, size);
+ if (like) {
+ SF_glyph *zero = like->getglyph(like, '0', TRUE);
+ *err = FT_Set_Pixel_Sizes( face, zero->dx, like->height(like));
+ } else
+ *err = FT_Set_Pixel_Sizes( face, size, size);
if (*err){ res->sfont.destroy(&res->sfont); return NULL; }
res->ascent = face->size->metrics.ascender/64;
#define SYSFONTS "/usr/share/fonts/freetype"
#endif
-SFONT * sf_loadftype( char *fspec, int *err)
+SFONT * sf_loadftype( char *fspec, SFONT *like, int *err)
{
char buf[FILENAME_MAX], *fn, *at, *fenv;
int size = DEFSIZE, fnlen=-1;
if (!fn) return NULL;
- return loadftype(fn,size,err);
+ return loadftype(fn, size, like, err);
}
//////////////////////////////////////////
m_fontfiles[5] = sf_GetProfileString("Fonts","fixedbold",NULL);
m_fontfiles[6] = sf_GetProfileString("Fonts","fixeditalic",NULL);
m_fontfiles[7] = sf_GetProfileString("Fonts","fixedbolditalic",NULL);
+ m_fontfiles[8] = sf_GetProfileString("Fonts","graphics",NULL);
ResDir = sf_GetProfileString("Resources","Dir",ResDir);
ResPict = sf_GetProfileString("Resources","Pict",ResPict);