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

Reply via email to