X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.h;h=f06dd21ece10ae32e16aed9161e52654d3dc77a9;hp=8a8a1ca27564735427d14aebcc801368bd458b48;hb=f29d8006b1d8253c50808d6eb4941bdeb808c601;hpb=d047ab5d9aee6224e864c10bce623e43c56a13c3;ds=sidebyside diff --git a/lib/pdf/GFXOutputDev.h b/lib/pdf/GFXOutputDev.h index 8a8a1ca..f06dd21 100644 --- a/lib/pdf/GFXOutputDev.h +++ b/lib/pdf/GFXOutputDev.h @@ -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: @@ -25,48 +21,60 @@ class GFXOutputState { char softmask_alpha; char isolated; + gfxbbox_t clipbbox; + GFXOutputState(); gfxresult_t* grouprecording; // for transparency groups gfxresult_t* softmaskrecording; // for soft masks gfxdevice_t* olddevice; + + double *dashPattern; + int dashLength; + double dashStart; + + GfxState*state; }; -typedef struct _parameter +typedef struct _feature { - char*name; - char*value; - struct _parameter*next; -} parameter_t; + char*string; + struct _feature*next; +} feature_t; void addGlobalFont(const char*filename); void addGlobalLanguageDir(const char*dir); void addGlobalFontDir(const char*dirname); -class GFXOutputDev: public OutputDev { +class GFXOutputGlobals { public: - gfxdevice_t* device; + feature_t*featurewarnings; - // Constructor. - GFXOutputDev(parameter_t*p); - void setDevice(gfxdevice_t*dev); + int textmodeinfo; // did we write "Text will be rendered as polygon" yet? + int jpeginfo; // did we write "File contains jpegs" yet? + int pbminfo; // did we write "File contains jpegs" yet? + int linkinfo; // did we write "File contains links" yet? - // Destructor. - virtual ~GFXOutputDev() ; + GFXOutputGlobals(); + ~GFXOutputGlobals(); +}; - void setMove(int x,int y); - void setClip(int x1,int y1,int x2,int y2); - void setParameter(const char*key, const char*value); +class GFXOutputDev: public CommonOutputDev { +public: + gfxdevice_t* device; - void setInfo(InfoOutputDev*info) {this->info = info;} + GFXOutputDev(InfoOutputDev*info, PDFDoc*doc); + virtual ~GFXOutputDev() ; + + 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 +89,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); @@ -94,7 +98,9 @@ public: //----- update graphics state + virtual void updateLineDash(GfxState *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); @@ -130,17 +136,23 @@ public: virtual GBool useTilingPatternFill(); virtual GBool useShadedFills(); - /* +#if (xpdfMajorVersion < 3) || (xpdfMinorVersion < 2) || (xpdfUpdateVersion < 7) virtual void tilingPatternFill(GfxState *state, Object *str, - int paintType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) {} - virtual void functionShadedFill(GfxState *state, - GfxFunctionShading *shading) {} - virtual void axialShadedFill(GfxState *state, GfxAxialShading *shading) {} - virtual void radialShadedFill(GfxState *state, GfxRadialShading *shading) {} - */ + int paintType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); +#else + virtual void tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, + int paintType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); +#endif + virtual GBool functionShadedFill(GfxState *state, + GfxFunctionShading *shading); + virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading); + virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading); //----- text drawing virtual void beginString(GfxState *state, GString *s) ; @@ -187,8 +199,6 @@ 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); - char* searchForSuitableFont(GfxFont*gfxFont); void finish(); @@ -196,7 +206,6 @@ public: virtual GBool useDrawForm(); virtual void drawForm(Ref id); virtual GBool needNonText(); - virtual void endPage(); //virtual void dump(); //virtual void beginStringOp(GfxState *state); @@ -206,52 +215,50 @@ public: //virtual void setVectorAntialias(GBool vaa) {} //virtual void psXObject(Stream *psStream, Stream *level1Stream) {} + virtual void setPageMap(int*pagemap, int pagemap_len); + private: + gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed, int user_movex, int user_movey); + + void transformXY(GfxState*state, double x, double y, double*nx, double*ny); + 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 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 clipToGfxLine(GfxState *state, gfxline_t*line, char evenodd); + void fillGfxLine(GfxState *state, gfxline_t*line, char evenodd); + + gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src); 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 - GBool do_interpretType3Chars; + char* searchFont(const char*name); + char* substituteFont(GfxFont*gfxFont, char*oldname); + char* writeEmbeddedFontToFile(XRef*ref, GfxFont*font); + + /* for page mapping */ + int* page2page; + int num_pages; + + int currentpage; + char outer_clip_box; //whether the page clip box is still on InfoOutputDev*info; GFXOutputState states[64]; int statepos; - int currentpage; - PDFDoc*doc; XRef*xref; - char* searchFont(const char*name); - char* substituteFont(GfxFont*gfxFont, char*oldname); - char* writeEmbeddedFontToFile(XRef*ref, GfxFont*font); - int t1id; - int textmodeinfo; // did we write "Text will be rendered as polygon" yet? - int jpeginfo; // did we write "File contains jpegs" yet? - int pbminfo; // did we write "File contains jpegs" yet? - int linkinfo; // did we write "File contains links" yet? - int type3active; // are we between beginType3()/endType3()? GfxState *laststate; - char type3Warning; - - const char* substitutetarget[256]; - const char* substitutesource[256]; - int substitutepos; - int user_movex,user_movey; int user_clipx1,user_clipx2,user_clipy1,user_clipy2; @@ -261,26 +268,39 @@ 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; + gfxfont_t* last_char_gfxfont; + int last_char; + double last_char_x; + double last_char_y; + char last_char_was_space; /* config */ int config_use_fontconfig; int config_break_on_warning; int config_remapunicode; + int config_transparent; + int config_extrafontdata; + int config_convertgradients; + int config_disable_polygon_conversion; + int config_multiply; + int config_bigchar; + int config_drawonlyshapes; + int config_detectspaces; + char* config_linkdatafile; + double config_fontquality; +}; - parameter_t*parameters; +class GFXGlobalParams: public GlobalParams { + public: + GFXGlobalParams(); + ~GFXGlobalParams(); + virtual DisplayFontParam *getDisplayFont(GString *fontName); }; #endif //__gfxoutputdev_h__