X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.h;h=0f41f75bb953edca2547cd3aae3e8e466c007e8f;hp=bf4df4c06c164b126ef863837c4e780abd5b1120;hb=cbcb36e38ef35e0a1b950fa8cfa3d90e5aeaa19b;hpb=77a2b9688db7ae0c9bda7801f19042adcc4ef1ce diff --git a/lib/pdf/GFXOutputDev.h b/lib/pdf/GFXOutputDev.h index bf4df4c..0f41f75 100644 --- a/lib/pdf/GFXOutputDev.h +++ b/lib/pdf/GFXOutputDev.h @@ -3,16 +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: @@ -20,7 +17,16 @@ class GFXOutputState { int textRender; char createsoftmask; char transparencygroup; + char softmask; + char softmask_alpha; + char isolated; + GFXOutputState(); + + gfxresult_t* grouprecording; // for transparency groups + gfxresult_t* softmaskrecording; // for soft masks + + gfxdevice_t* olddevice; }; typedef struct _parameter @@ -30,32 +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 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 @@ -70,12 +69,8 @@ public: //virtual GBool useShadedFills() { return gTrue; } - //----- initialization and control - - void setXRef(PDFDoc*doc, XRef *xref); - //----- link borders - virtual void drawLink(Link *link, Catalog *catalog) ; + virtual void processLink(Link *link, Catalog *catalog); //----- save/restore graphics state virtual void saveState(GfxState *state) ; @@ -84,13 +79,17 @@ 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); virtual void updateLineJoin(GfxState *state); virtual void updateLineCap(GfxState *state); virtual void updateFillOpacity(GfxState *state); - + virtual void updateStrokeOpacity(GfxState *state); + virtual void updateFillOverprint(GfxState *state); + virtual void updateStrokeOverprint(GfxState *state); + virtual void updateTransfer(GfxState *state); virtual void updateAll(GfxState *state) { @@ -110,6 +109,23 @@ public: //----- path clipping virtual void clip(GfxState *state) ; virtual void eoClip(GfxState *state) ; + virtual void clipToStrokePath(GfxState *state); + + //----- shaded fills + virtual GBool useTilingPatternFill(); + virtual GBool useShadedFills(); + + /* + 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) {} + */ //----- text drawing virtual void beginString(GfxState *state, GString *s) ; @@ -140,7 +156,6 @@ public: GfxImageColorMap *maskColorMap); //----- transparency groups and soft masks (xpdf >= ~ 3.01.16) -#if xpdfUpdateVersion >= 16 virtual void beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, @@ -149,7 +164,6 @@ public: virtual void paintTransparencyGroup(GfxState *state, double *bbox); virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor); virtual void clearSoftMask(GfxState *state); -#endif //----- type 3 chars virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); @@ -158,24 +172,44 @@ 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(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; GFXOutputState states[64]; int statepos; @@ -185,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; @@ -193,8 +227,6 @@ public: 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 ttfinfo; // did we write "File contains TrueType Fonts" yet? - int gradientinfo; // did we write "File contains Gradients yet? int type3active; // are we between beginType3()/endType3()? @@ -202,35 +234,45 @@ public: char type3Warning; - char* substitutetarget[256]; - char* substitutesource[256]; + const char* substitutetarget[256]; + const char* substitutesource[256]; int substitutepos; + int user_movex,user_movey; + int user_clipx1,user_clipx2,user_clipy1,user_clipy2; + /* upper left corner of clipping rectangle (cropbox)- needs to be added to all drawing coordinates to give the impression that all pages start at (0,0)*/ - int clipmovex,clipmovey; - - int user_movex,user_movey; - int user_clipx1,user_clipx2,user_clipy1,user_clipy2; + int clipmovex; + int clipmovey; 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; /* config */ - int forceType0Fonts; 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__