#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:
int clipping;
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
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
//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) ;
//----- 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)
{
//----- 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) ;
int maskWidth, int maskHeight,
GfxImageColorMap *maskColorMap);
- //----- transparency groups and soft masks (xpdf > ~ 3.01.16)
+ //----- transparency groups and soft masks (xpdf >= ~ 3.01.16)
virtual void beginTransparencyGroup(GfxState *state, double *bbox,
GfxColorSpace *blendingColorSpace,
GBool isolated, GBool knockout,
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);
-
//----- type 3 chars
virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen);
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;
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;
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()?
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;
- int transparencyGroup;
- int createsoftmask;
-
parameter_t*parameters;
};
+class GFXGlobalParams: public GlobalParams {
+ public:
+ GFXGlobalParams();
+ ~GFXGlobalParams();
+ virtual DisplayFontParam *getDisplayFont(GString *fontName);
+};
+
#endif //__gfxoutputdev_h__