added new output devices
[swftools.git] / lib / pdf / GFXOutputDev.h
index f16ab05..0f41f75 100644 (file)
@@ -3,17 +3,13 @@
 
 #include "../gfxdevice.h"
 #include "../gfxsource.h"
+#include "../gfxtools.h"
 
 #include "config.h"
 #include "InfoOutputDev.h"
 #include "PDFDoc.h"
-
-typedef struct _fontlist
-{
-    char*filename;
-    gfxfont_t*font;
-    _fontlist*next;
-} fontlist_t;
+#include "GlobalParams.h"
+#include "CommonOutputDev.h"
 
 class GFXOutputState {
     public:
@@ -40,33 +36,25 @@ typedef struct _parameter
     struct _parameter*next;
 } parameter_t;
 
-void addGlobalFont(char*filename);
-void addGlobalLanguageDir(char*dir);
-void addGlobalFontDir(char*dirname);
+void addGlobalFont(const char*filename);
+void addGlobalLanguageDir(const char*dir);
+void addGlobalFontDir(const char*dirname);
 
-class GFXOutputDev:  public OutputDev {
+class GFXOutputDev:  public CommonOutputDev {
 public:
   gfxdevice_t* device;
 
-  // Constructor.
-  GFXOutputDev(parameter_t*p);
-  void setDevice(gfxdevice_t*dev);
-
-  // Destructor.
+  GFXOutputDev(InfoOutputDev*info, PDFDoc*doc);
   virtual ~GFXOutputDev() ;
 
-  void setMove(int x,int y);
-  void setClip(int x1,int y1,int x2,int y2);
-  void setParameter(char*key, char*value);
-
-  void setInfo(InfoOutputDev*info) {this->info = info;}
+  virtual void setDevice(gfxdevice_t*dev);
+  virtual void setMove(int x,int y);
+  virtual void setClip(int x1,int y1,int x2,int y2);
+  virtual void setParameter(const char*key, const char*value);
   
   // Start a page.
-  void startFrame(int width, int height);
-
   virtual void startPage(int pageNum, GfxState *state, double x1, double y1, double x2, double y2) ;
-
-  void endframe();
+  virtual void endPage();
 
   //----- get info about output device
 
@@ -81,10 +69,6 @@ public:
   
   //virtual GBool useShadedFills() { return gTrue; }
 
-  //----- initialization and control
-
-  void setXRef(PDFDoc*doc, XRef *xref);
-
   //----- link borders
   virtual void processLink(Link *link, Catalog *catalog);
 
@@ -95,6 +79,7 @@ public:
   //----- update graphics state
 
   virtual void updateFont(GfxState *state);
+  virtual void updateFontMatrix(GfxState *state);
   virtual void updateFillColor(GfxState *state);
   virtual void updateStrokeColor(GfxState *state);
   virtual void updateLineWidth(GfxState *state);
@@ -124,6 +109,7 @@ public:
   //----- path clipping
   virtual void clip(GfxState *state) ;
   virtual void eoClip(GfxState *state) ;
+  virtual void clipToStrokePath(GfxState *state);
  
   //----- shaded fills
   virtual GBool useTilingPatternFill();
@@ -186,28 +172,42 @@ public:
   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);
 
-  void preparePage(int pdfpage, int outputpage);
+  virtual void preparePage(int pdfpage, int outputpage);
 
   char* searchForSuitableFont(GfxFont*gfxFont);
 
   void finish();
 
+  virtual GBool useDrawForm();
+  virtual void drawForm(Ref id);
+  virtual GBool needNonText();
+
+  //virtual void dump();
+  //virtual void beginStringOp(GfxState *state);
+  //virtual void drawString(GfxState *state, GString *s);
+  //virtual void endStringOp(GfxState *state);
+  //virtual GBool getVectorAntialias() { return gFalse; }
+  //virtual void setVectorAntialias(GBool vaa) {}
+  //virtual void psXObject(Stream *psStream, Stream *level1Stream) {}
+
   private:
   void drawGeneralImage(GfxState *state, Object *ref, Stream *str,
                                   int width, int height, GfxImageColorMap*colorMap, GBool invert,
                                   GBool inlineImg, int mask, int *maskColors,
                                   Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert, GfxImageColorMap*maskColorMap);
-  int setGfxFont(char*id, char*name, char*filename, double quality);
-  void strokeGfxline(GfxState *state, gfxline_t*line);
+  int setGfxFont(char*id, char*name, char*filename, double maxSize, CharCodeToUnicode*ctu);
+  void strokeGfxline(GfxState *state, gfxline_t*line, int flags);
   void clipToGfxLine(GfxState *state, gfxline_t*line);
   void fillGfxLine(GfxState *state, gfxline_t*line);
 
-  void showfeature(char*feature,char fully, char warn);
-  void warnfeature(char*feature,char fully);
-  void infofeature(char*feature);
+  void showfeature(const char*feature,char fully, char warn);
+  void warnfeature(const char*feature,char fully);
+  void infofeature(const char*feature);
 
   char outer_clip_box; //whether the page clip box is still on
-  
+
+  gfxfontlist_t*gfxfontlist;
+
   GBool do_interpretType3Chars;
 
   InfoOutputDev*info;
@@ -219,7 +219,7 @@ public:
   PDFDoc*doc;
   XRef*xref;
 
-  char* searchFont(char*name);
+  char* searchFont(const char*name);
   char* substituteFont(GfxFont*gfxFont, char*oldname);
   char* writeEmbeddedFontToFile(XRef*ref, GfxFont*font);
   int t1id;
@@ -234,8 +234,8 @@ public:
 
   char type3Warning;
 
-  char* substitutetarget[256];
-  char* substitutesource[256];
+  const char* substitutetarget[256];
+  const char* substitutesource[256];
   int substitutepos;
 
   int user_movex,user_movey;
@@ -247,16 +247,13 @@ public:
   int clipmovex;
   int clipmovey;
 
-  double width,height;
-
   gfxline_t* current_text_stroke;
   gfxline_t* current_text_clip;
   char* current_font_id;
   gfxfont_t* current_gfxfont;
+  FontInfo*current_fontinfo;
   gfxmatrix_t current_font_matrix;
 
-  fontlist_t* fontlist;
-
   int*pages;
   int pagebuflen;
   int pagepos;
@@ -264,8 +261,18 @@ public:
   /* config */
   int config_use_fontconfig;
   int config_break_on_warning;
+  int config_remapunicode;
+  int config_transparent;
+  int config_extrafontdata;
 
   parameter_t*parameters;
 };
 
+class GFXGlobalParams:  public GlobalParams {
+    public:
+    GFXGlobalParams();
+    ~GFXGlobalParams();
+    virtual DisplayFontParam *getDisplayFont(GString *fontName);
+};
+
 #endif //__gfxoutputdev_h__