#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:
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 startPage(int pageNum, GfxState *state);
+ 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 processLink(Link *link, Catalog *catalog);
//----- 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);
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) {}
- */
+virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(GfxState *state,
+ POPPLER_TILING_PATERN_GFX
+ Object *str,
+ int paintType, Dict *resDict,
+ double *mat, double *bbox,
+ int x0, int y0, int x1, int y1,
+ double xStep, double yStep);
+ 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) ;
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();
virtual GBool useDrawForm();
virtual void drawForm(Ref id);
virtual GBool needNonText();
- virtual void endPage();
//virtual void dump();
//virtual void beginStringOp(GfxState *state);
//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;
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;
+ int config_textonly;
+ char* config_linkdatafile;
+ double config_fontquality;
+};
- parameter_t*parameters;
+class GFXGlobalParams: public GlobalParams {
+ public:
+ GFXGlobalParams();
+ ~GFXGlobalParams();
+ virtual DisplayFontParam *getDisplayFont(GString *fontName);
};
#endif //__gfxoutputdev_h__