added median advance detection
[swftools.git] / lib / pdf / InfoOutputDev.h
index de69047..699c4c7 100644 (file)
 
 #include "GfxFont.h"
 #include "OutputDev.h"
-#include "SplashFont.h"
 #include "SplashOutputDev.h"
+#ifdef HAVE_POPPLER
+#include <splash/SplashTypes.h>
+#include <splash/SplashPath.h>
+#include <splash/SplashFont.h>
+#include <splash/SplashFontFile.h>
+#else
+#include "SplashTypes.h"
 #include "SplashPath.h"
+#include "SplashFont.h"
+#include "SplashFontFile.h"
+#endif
+
+#ifdef HAVE_POPPLER
+#include <goo/GooHash.h>
+#else
 #include "GHash.h"
+#endif
+
+struct AdvanceSample
+{
+    double advance;
+    struct AdvanceSample*next;
+};
 
 struct GlyphInfo
 {
     SplashPath*path;
     int unicode;
     int glyphid;
+    double advance;
     double x1,y1,x2,y2;
+
+    double estimateAdvance();
+
+    AdvanceSample*advance_samples;
 };
 
 struct FontInfo
 {
     FontInfo();
     ~FontInfo();
+
+    double lastx,lasty;
+    int lastchar;
+
+    double ascender,descender;
+
     void grow(int size);
 
     GfxFont*font;
@@ -59,11 +90,13 @@ class InfoOutputDev: public OutputDev
     FontInfo* currentfont;
     GlyphInfo* currentglyph;
     SplashOutputDev*splash;
+
     public:
     int x1,y1,x2,y2;
     int num_links;
     int num_images;
     int num_fonts;
+    int num_polygons;
 
     InfoOutputDev(XRef*xref);
     virtual ~InfoOutputDev(); 
@@ -72,6 +105,7 @@ class InfoOutputDev: public OutputDev
     virtual GBool useDrawChar();
     virtual GBool interpretType3Chars();
     virtual void startPage(int pageNum, GfxState *state, double crop_x1, double crop_y1, double crop_x2, double crop_y2);
+    virtual void endPage();
     virtual void drawLink(Link *link, Catalog *catalog);
     virtual double getMaximumFontSize(char*id);
     virtual void updateFont(GfxState *state);
@@ -80,6 +114,9 @@ class InfoOutputDev: public OutputDev
     virtual void type3D0(GfxState *state, double wx, double wy);
     virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury);
     virtual void endType3Char(GfxState *state);
+  
+    virtual void fill(GfxState *state);
+    virtual void eoFill(GfxState *state);
 
     virtual void drawChar(GfxState *state, double x, double y,
                          double dx, double dy,