X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_afm.c;h=8f0228a12c27d63d1dd39658dc515b80fd9bb26d;hb=5a7eb5b62b485b61ddb80a40ef22f4337cf2289f;hp=c9996d0b24031dd946a3816647af1820546ee283;hpb=0c87c2676bb826f8defb40d7d45e771ecd40550c;p=rrdtool.git diff --git a/src/rrd_afm.c b/src/rrd_afm.c index c9996d0..8f0228a 100644 --- a/src/rrd_afm.c +++ b/src/rrd_afm.c @@ -1,10 +1,14 @@ /**************************************************************************** - * RRDtool 1.1.x Copyright Tobias Oetiker, 1997 - 2002 + * RRDtool 1.2.5 Copyright by Tobi Oetiker, 1997-2005 **************************************************************************** * rrd_afm.h Parsing afm tables to find width of strings. ****************************************************************************/ +#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) +#include "../confignt/config.h" +#else #include "config.h" +#endif #include "rrd_afm.h" #include "rrd_afm_data.h" @@ -16,6 +20,8 @@ #include #endif +#include "unused.h" + #if 0 # define DEBUG 1 # define DLOG(x) fprintf x @@ -30,7 +36,8 @@ */ #define ENABLE_LIGATURES 0 -static const afm_fontinfo *afm_last_used_font; +static const afm_fontinfo *afm_last_used_font = NULL; +static const char *last_unknown_font = NULL; #define is_font(p, name) \ (!strcmp(p->postscript_name, name) || !strcmp(p->fullname, name)) @@ -51,22 +58,47 @@ static const afm_fontinfo *afm_searchfont(const char *name) return NULL; } + +/* returns always a font, never NULL. + The rest of the code depends on the result never being NULL. + See rrd_afm.h */ static const afm_fontinfo *afm_findfont(const char *name) { const afm_fontinfo *p = afm_searchfont(name); if (p) return p; - if (1 || DEBUG) fprintf(stderr, "Can't find font '%s'\n", name); - p = afm_searchfont("Helvetica"); + if (!last_unknown_font || strcmp(name, last_unknown_font)) { + fprintf(stderr, "Can't find font '%s'\n", name); + last_unknown_font = name; + } + p = afm_searchfont(RRD_AFM_DEFAULT_FONT); if (p) return p; - return NULL; + return afm_fontinfolist; // anything, just anything. } const char *afm_get_font_postscript_name(const char* font) { const afm_fontinfo *p = afm_findfont(font); - return p ? p->postscript_name : "Helvetica"; + return p->postscript_name; +} + +const char *afm_get_font_name(const char* font) +{ + const afm_fontinfo *p = afm_findfont(font); + return p->fullname; +} + +double afm_get_ascender(const char* font, double size) +{ + const afm_fontinfo *p = afm_findfont(font); + return size * p->ascender / 1000.0; +} + +double afm_get_descender(const char* font, double size) +{ + const afm_fontinfo *p = afm_findfont(font); + return size * p->descender / 1000.0; } static int afm_find_char_index(const afm_fontinfo *fontinfo, @@ -155,8 +187,8 @@ static long afm_find_kern(const afm_fontinfo *fontinfo, } /* measure width of a text string */ -double afm_get_text_width ( double start, const char* font, double size, - double tabwidth, const char* text) +double afm_get_text_width ( double UNUSED(start), const char* font, double size, + double UNUSED(tabwidth), const char* text) { const afm_fontinfo *fontinfo = afm_findfont(font); long width = 0;