splash/SplashFTFontFile.cc | 9 +++++---- splash/SplashFTFontFile.h | 3 ++- splash/SplashT1Font.cc | 39 +++++++++++++++++++++------------------ 3 files changed, 28 insertions(+), 23 deletions(-)
New commits: commit 087757866de13b6164967a1d241d3c0e47065f1a Author: Albert Astals Cid <[email protected]> Date: Thu Oct 13 12:18:52 2011 +0200 xpdf303: Merge SplashT1Font::getGlyphPath changes diff --git a/splash/SplashT1Font.cc b/splash/SplashT1Font.cc index 89813de..0fdfaaf 100644 --- a/splash/SplashT1Font.cc +++ b/splash/SplashT1Font.cc @@ -239,13 +239,12 @@ SplashPath *SplashT1Font::getGlyphPath(int c) { T1_OUTLINE *outline; T1_PATHSEGMENT *seg; T1_BEZIERSEGMENT *bez; - SplashCoord x, y, x1, y1; + int x, y, x1, y1; GBool needClose; if (outlineID < 0) { outlineID = T1_CopyFont(((SplashT1FontFile *)fontFile)->t1libID); - outlineSize = (float)splashSqrt(textMat[2]*textMat[2] + - textMat[3]*textMat[3]); + outlineSize = (float)splashDist(0, 0, textMat[2], textMat[3]); matrix.cxx = (double)textMat[0] / outlineSize; matrix.cxy = (double)textMat[1] / outlineSize; matrix.cyx = (double)textMat[2] / outlineSize; @@ -259,8 +258,11 @@ SplashPath *SplashT1Font::getGlyphPath(int c) { path = new SplashPath(); if ((outline = T1_GetCharOutline(outlineID, c, outlineSize, NULL))) { - x = 0; - y = 0; + // NB: t1lib uses integer coordinates here; we keep a running + // (x,y) total as integers, so that the final point in the path is + // exactly the same as the first point, thus avoiding weird + // mitered join glitches + x = y = 0; needClose = gFalse; for (seg = outline; seg; seg = seg->link) { switch (seg->type) { @@ -269,25 +271,26 @@ SplashPath *SplashT1Font::getGlyphPath(int c) { path->close(); needClose = gFalse; } - x += seg->dest.x * outlineMul; - y += seg->dest.y * outlineMul; - path->moveTo(x, -y); + x += seg->dest.x; + y += seg->dest.y; + path->moveTo(outlineMul * x, -outlineMul * y); break; case T1_PATHTYPE_LINE: - x += seg->dest.x * outlineMul; - y += seg->dest.y * outlineMul; - path->lineTo(x, -y); + x += seg->dest.x; + y += seg->dest.y; + path->lineTo(outlineMul * x, -outlineMul * y); needClose = gTrue; break; case T1_PATHTYPE_BEZIER: bez = (T1_BEZIERSEGMENT *)seg; - x1 = x + (SplashCoord)(bez->dest.x * outlineMul); - y1 = y + (SplashCoord)(bez->dest.y * outlineMul); - path->curveTo(x + (SplashCoord)(bez->B.x * outlineMul), - -(y + (SplashCoord)(bez->B.y * outlineMul)), - x + (SplashCoord)(bez->C.x * outlineMul), - -(y + (SplashCoord)(bez->C.y * outlineMul)), - x1, -y1); + x1 = x + bez->dest.x; + y1 = y + bez->dest.y; + path->curveTo(outlineMul * (x + bez->B.x), + -outlineMul * (y + bez->B.y), + outlineMul * (x + bez->C.x), + -outlineMul * (y + bez->C.y), + outlineMul * x1, + -outlineMul * y1); x = x1; y = y1; needClose = gTrue; commit c84f46ee16a8dcc6e2cad2359df621cc6cdb8fa5 Author: Albert Astals Cid <[email protected]> Date: Thu Oct 13 12:16:14 2011 +0200 xpdf303: Add GBool type1 to SplashFTFontFile diff --git a/splash/SplashFTFontFile.cc b/splash/SplashFTFontFile.cc index 5bedb1a..34f6ce5 100644 --- a/splash/SplashFTFontFile.cc +++ b/splash/SplashFTFontFile.cc @@ -61,7 +61,7 @@ SplashFontFile *SplashFTFontFile::loadType1Font(SplashFTFontEngine *engineA, } return new SplashFTFontFile(engineA, idA, src, - faceA, codeToGIDA, 256, gFalse); + faceA, codeToGIDA, 256, gFalse, gTrue); } SplashFontFile *SplashFTFontFile::loadCIDFont(SplashFTFontEngine *engineA, @@ -80,7 +80,7 @@ SplashFontFile *SplashFTFontFile::loadCIDFont(SplashFTFontEngine *engineA, } return new SplashFTFontFile(engineA, idA, src, - faceA, codeToGIDA, codeToGIDLenA, gFalse); + faceA, codeToGIDA, codeToGIDLenA, gFalse, gFalse); } SplashFontFile *SplashFTFontFile::loadTrueTypeFont(SplashFTFontEngine *engineA, @@ -100,7 +100,7 @@ SplashFontFile *SplashFTFontFile::loadTrueTypeFont(SplashFTFontEngine *engineA, } return new SplashFTFontFile(engineA, idA, src, - faceA, codeToGIDA, codeToGIDLenA, gTrue); + faceA, codeToGIDA, codeToGIDLenA, gTrue, gFalse); } SplashFTFontFile::SplashFTFontFile(SplashFTFontEngine *engineA, @@ -108,7 +108,7 @@ SplashFTFontFile::SplashFTFontFile(SplashFTFontEngine *engineA, SplashFontSrc *src, FT_Face faceA, int *codeToGIDA, int codeToGIDLenA, - GBool trueTypeA): + GBool trueTypeA, GBool type1A): SplashFontFile(idA, src) { engine = engineA; @@ -116,6 +116,7 @@ SplashFTFontFile::SplashFTFontFile(SplashFTFontEngine *engineA, codeToGID = codeToGIDA; codeToGIDLen = codeToGIDLenA; trueType = trueTypeA; + type1 = type1A; } SplashFTFontFile::~SplashFTFontFile() { diff --git a/splash/SplashFTFontFile.h b/splash/SplashFTFontFile.h index f4a9ebd..d642af0 100644 --- a/splash/SplashFTFontFile.h +++ b/splash/SplashFTFontFile.h @@ -69,13 +69,14 @@ private: SplashFontSrc *src, FT_Face faceA, int *codeToGIDA, int codeToGIDLenA, - GBool trueTypeA); + GBool trueTypeA, GBool type1A); SplashFTFontEngine *engine; FT_Face face; int *codeToGID; int codeToGIDLen; GBool trueType; + GBool type1; friend class SplashFTFont; }; _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
