X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fxpdf%2FGFXOutputDev.h;fp=lib%2Fxpdf%2FGFXOutputDev.h;h=0439b95b7d24b2d691616a52a5a866d8e2b13272;hb=1279e7201aaf80eca58ad982ec11de68c85631af;hp=0000000000000000000000000000000000000000;hpb=e40d573cbf6659328121d0383d6d5ac8acd58c34;p=swftools.git diff --git a/lib/xpdf/GFXOutputDev.h b/lib/xpdf/GFXOutputDev.h new file mode 100644 index 0000000..0439b95 --- /dev/null +++ b/lib/xpdf/GFXOutputDev.h @@ -0,0 +1,213 @@ +#ifndef __gfxoutputdev_h__ +#define __gfxoutputdev_h__ + +#include "../gfxdevice.h" +#include "../gfxsource.h" + +#include "InfoOutputDev.h" +#include "PDFDoc.h" + +typedef struct _fontlist +{ + char*id; + char*filename; + gfxfont_t*font; + _fontlist*next; +} fontlist_t; + +class GFXOutputState { + public: + int clipping; + int textRender; + GFXOutputState(); +}; + +typedef struct _parameter +{ + char*name; + char*value; + struct _parameter*next; +} parameter_t; + +void addGlobalFont(char*filename); +void addGlobalLanguageDir(char*dir); +void addGlobalFontDir(char*dirname); + +class GFXOutputDev: public OutputDev { +public: + gfxdevice_t* device; + + // Constructor. + GFXOutputDev::GFXOutputDev(parameter_t*p); + void setDevice(gfxdevice_t*dev); + + // Destructor. + 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;} + + // 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(); + + //----- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown(); + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar(); + + virtual GBool interpretType3Chars(); + + //virtual GBool useShadedFills() { return gTrue; } + + //----- initialization and control + + void setXRef(PDFDoc*doc, XRef *xref); + + //----- link borders + virtual void drawLink(Link *link, Catalog *catalog) ; + + //----- save/restore graphics state + virtual void saveState(GfxState *state) ; + virtual void restoreState(GfxState *state) ; + + //----- update graphics state + + virtual void updateFont(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 updateAll(GfxState *state) + { + updateFont(state); + updateFillColor(state); + updateStrokeColor(state); + updateLineWidth(state); + updateLineJoin(state); + updateLineCap(state); + }; + + //----- path painting + virtual void stroke(GfxState *state) ; + virtual void fill(GfxState *state) ; + virtual void eoFill(GfxState *state) ; + + //----- path clipping + virtual void clip(GfxState *state) ; + virtual void eoClip(GfxState *state) ; + + //----- text drawing + virtual void beginString(GfxState *state, GString *s) ; + virtual void endString(GfxState *state) ; + virtual void endTextObject(GfxState *state); + virtual void drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, Unicode *u, int uLen); + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + int *maskColors, GBool inlineImg); + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + Stream *maskStr, int maskWidth, int maskHeight, + GBool maskInvert); + virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap); + + virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); + virtual void endType3Char(GfxState *state); + + 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(); + + 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); + void clipToGfxLine(GfxState *state, gfxline_t*line); + void fillGfxLine(GfxState *state, gfxline_t*line); + + 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(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 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()? + + GfxState *laststate; + + char type3Warning; + + char* substitutetarget[256]; + char* substitutesource[256]; + int substitutepos; + + int user_movex,user_movey; + int user_clipx1,user_clipx2,user_clipy1,user_clipy2; + + gfxline_t* current_text_stroke; + gfxline_t* current_text_clip; + char* current_font_id; + gfxfont_t* current_gfxfont; + gfxmatrix_t current_font_matrix; + + fontlist_t* fontlist; + + int*pages; + int pagebuflen; + int pagepos; + + /* config */ + int forceType0Fonts; + int config_use_fontconfig; +}; + +#endif //__gfxoutputdev_h__