summaryrefslogtreecommitdiff
path: root/splash/SplashFTFontFile.cc
diff options
context:
space:
mode:
Diffstat (limited to 'splash/SplashFTFontFile.cc')
-rw-r--r--splash/SplashFTFontFile.cc71
1 files changed, 63 insertions, 8 deletions
diff --git a/splash/SplashFTFontFile.cc b/splash/SplashFTFontFile.cc
index 5761117..5b01fcf 100644
--- a/splash/SplashFTFontFile.cc
+++ b/splash/SplashFTFontFile.cc
@@ -2,6 +2,8 @@
//
// SplashFTFontFile.cc
//
+// Copyright 2003-2013 Glyph & Cog, LLC
+//
//========================================================================
#include <aconf.h>
@@ -13,6 +15,7 @@
#endif
#include "gmem.h"
+#include "GString.h"
#include "SplashFTFontEngine.h"
#include "SplashFTFont.h"
#include "SplashFTFontFile.h"
@@ -23,15 +26,25 @@
SplashFontFile *SplashFTFontFile::loadType1Font(SplashFTFontEngine *engineA,
SplashFontFileID *idA,
+#if LOAD_FONTS_FROM_MEM
+ GString *fontBufA,
+#else
char *fileNameA,
GBool deleteFileA,
- const char **encA) {
+#endif
+ const char **encA,
+ GBool useLightHintingA) {
FT_Face faceA;
int *codeToGIDA;
const char *name;
int i;
+#if LOAD_FONTS_FROM_MEM
+ if (FT_New_Memory_Face(engineA->lib, (FT_Byte *)fontBufA->getCString(),
+ fontBufA->getLength(), 0, &faceA)) {
+#else
if (FT_New_Face(engineA->lib, fileNameA, 0, &faceA)) {
+#endif
return NULL;
}
codeToGIDA = (int *)gmallocn(256, sizeof(int));
@@ -42,59 +55,101 @@ SplashFontFile *SplashFTFontFile::loadType1Font(SplashFTFontEngine *engineA,
}
}
- return new SplashFTFontFile(engineA, idA, fileNameA, deleteFileA,
- faceA, codeToGIDA, 256, gFalse, gTrue);
+ return new SplashFTFontFile(engineA, idA,
+#if LOAD_FONTS_FROM_MEM
+ fontBufA,
+#else
+ fileNameA, deleteFileA,
+#endif
+ faceA, codeToGIDA, 256,
+ gFalse, useLightHintingA);
}
SplashFontFile *SplashFTFontFile::loadCIDFont(SplashFTFontEngine *engineA,
SplashFontFileID *idA,
+#if LOAD_FONTS_FROM_MEM
+ GString *fontBufA,
+#else
char *fileNameA,
GBool deleteFileA,
+#endif
int *codeToGIDA,
int codeToGIDLenA) {
FT_Face faceA;
+#if LOAD_FONTS_FROM_MEM
+ if (FT_New_Memory_Face(engineA->lib, (FT_Byte *)fontBufA->getCString(),
+ fontBufA->getLength(), 0, &faceA)) {
+#else
if (FT_New_Face(engineA->lib, fileNameA, 0, &faceA)) {
+#endif
return NULL;
}
- return new SplashFTFontFile(engineA, idA, fileNameA, deleteFileA,
+ return new SplashFTFontFile(engineA, idA,
+#if LOAD_FONTS_FROM_MEM
+ fontBufA,
+#else
+ fileNameA, deleteFileA,
+#endif
faceA, codeToGIDA, codeToGIDLenA,
gFalse, gFalse);
}
SplashFontFile *SplashFTFontFile::loadTrueTypeFont(SplashFTFontEngine *engineA,
SplashFontFileID *idA,
+#if LOAD_FONTS_FROM_MEM
+ GString *fontBufA,
+#else
char *fileNameA,
- int fontNum,
GBool deleteFileA,
+#endif
+ int fontNum,
int *codeToGIDA,
int codeToGIDLenA) {
FT_Face faceA;
+#if LOAD_FONTS_FROM_MEM
+ if (FT_New_Memory_Face(engineA->lib, (FT_Byte *)fontBufA->getCString(),
+ fontBufA->getLength(), fontNum, &faceA)) {
+#else
if (FT_New_Face(engineA->lib, fileNameA, fontNum, &faceA)) {
+#endif
return NULL;
}
- return new SplashFTFontFile(engineA, idA, fileNameA, deleteFileA,
+ return new SplashFTFontFile(engineA, idA,
+#if LOAD_FONTS_FROM_MEM
+ fontBufA,
+#else
+ fileNameA, deleteFileA,
+#endif
faceA, codeToGIDA, codeToGIDLenA,
gTrue, gFalse);
}
SplashFTFontFile::SplashFTFontFile(SplashFTFontEngine *engineA,
SplashFontFileID *idA,
+#if LOAD_FONTS_FROM_MEM
+ GString *fontBufA,
+#else
char *fileNameA, GBool deleteFileA,
+#endif
FT_Face faceA,
int *codeToGIDA, int codeToGIDLenA,
- GBool trueTypeA, GBool type1A):
+ GBool trueTypeA, GBool useLightHintingA):
+#if LOAD_FONTS_FROM_MEM
+ SplashFontFile(idA, fontBufA)
+#else
SplashFontFile(idA, fileNameA, deleteFileA)
+#endif
{
engine = engineA;
face = faceA;
codeToGID = codeToGIDA;
codeToGIDLen = codeToGIDLenA;
trueType = trueTypeA;
- type1 = type1A;
+ useLightHinting = useLightHintingA;
}
SplashFTFontFile::~SplashFTFontFile() {