X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=5f397f1c4922c232cbea539196cfd017ed2af9a6;hb=95d485fb6a0e26b89822eb47d58840b4c1671f48;hp=deb6f0a6c3622395f66bde381b18578b9008620f;hpb=339d6e2778383e1eb7807e0cc16f2e93e402e877;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index deb6f0a..5f397f1 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -93,9 +93,6 @@ typedef struct _fontfile static fontfile_t* global_fonts = 0; static fontfile_t* global_fonts_next = 0; -static fontfile_t* global_fontdirs = 0; -static fontfile_t* global_fontdirs_next = 0; - static int fontnum = 0; /* config */ @@ -395,17 +392,6 @@ char* fontconfig_searchForFont(char*name) fprintf(fi, "WINDOWSFONTDIR\n"); #endif fprintf(fi, "~/.fonts\n"); - - /* add external font dirs to fontconfig's config. Maybe fc will make more out - of them than we did - FIXME: we don't do that yet if there's a system config file - */ - fontfile_t*fd = global_fontdirs; - while(fd) { - fprintf(fi, "%s\n", fd->filename); - fd = fd->next; - } - #ifdef WIN32 fprintf(fi, "WINDOWSTEMPDIR_FONTCONFIG_CACHE\n"); #endif @@ -428,6 +414,14 @@ char* fontconfig_searchForFont(char*name) config_use_fontconfig = 0; return 0; } + + /* add external fonts to fontconfig's config, too. */ + fontfile_t*fd = global_fonts; + while(fd) { + FcConfigAppFontAddFile(config, (FcChar8*)fd->filename); + fd = fd->next; + } + FcFontSet * set = FcConfigGetFonts(config, FcSetSystem); msg(" FontConfig initialized. Found %d fonts", set?set->nfont:0); if(!set || !set->nfont) { @@ -538,7 +532,7 @@ DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName) const char*bestfilename = 0; #ifndef HAVE_FONTCONFIG - /* if we don't have fontconfig, try a simple approach */ + /* if we don't have fontconfig, try a simple filename-comparison approach */ fontfile_t*f = global_fonts; while(f) { if(strstr(f->filename, name)) { @@ -1633,7 +1627,8 @@ void GFXOutputDev::processLink(Link *link, Catalog *catalog) LinkDest *dest=NULL; if (ha->getDest()==NULL) dest=catalog->findDest(ha->getNamedDest()); - else dest=ha->getDest(); + else + dest=ha->getDest()->copy(); if (dest){ if (dest->isPageRef()){ Ref pageref=dest->getPageRef(); @@ -1642,6 +1637,7 @@ void GFXOutputDev::processLink(Link *link, Catalog *catalog) else page=dest->getPageNum(); sprintf(buf, "%d", page); s = strdup(buf); + delete dest; } } break; @@ -2461,7 +2457,7 @@ void addGlobalFont(const char*filename) } f->len = len; - msg(" Adding font \"%s\".", filename); + msg(" Adding font \"%s\".", filename); if(global_fonts_next) { global_fonts_next->next = f; global_fonts_next = global_fonts_next->next; @@ -2492,13 +2488,13 @@ void addGlobalLanguageDir(const char*dir) void addGlobalFontDir(const char*dirname) { #ifdef HAVE_DIRENT_H - msg(" Adding %s to font directories", dirname); DIR*dir = opendir(dirname); if(!dir) { msg(" Couldn't open directory %s", dirname); return; } struct dirent*ent; + int fonts = 0; while(1) { ent = readdir (dir); if (!ent) @@ -2522,22 +2518,14 @@ void addGlobalFontDir(const char*dirname) strcat(fontname, dirseparator()); strcat(fontname, name); addGlobalFont(fontname); + fonts++; } } + msg(" Added %s to font directories (%d fonts)", dirname, fonts); closedir(dir); #else msg(" No dirent.h"); #endif - - fontfile_t* f = (fontfile_t*)malloc(sizeof(fontfile_t)); - memset(f, 0, sizeof(fontfile_t)); - f->filename = dirname; - if(global_fontdirs_next) { - global_fontdirs_next->next = f; - global_fontdirs_next = global_fontdirs_next->next; - } else { - global_fontdirs_next = global_fontdirs = f; - } } void GFXOutputDev::beginTransparencyGroup(GfxState *state, double *bbox,