#include "PDFDoc.h"
#include "CommonOutputDev.h"
+struct ClipState
+{
+ ClipState*next;
+ SplashBitmap*clipbitmap;
+ char written;
+ ClipState();
+};
+
+#define STATE_PARALLEL 0
+#define STATE_TEXT_IS_ABOVE 1
+#define STATE_BITMAP_IS_ABOVE 2
+
class BitmapOutputDev: public CommonOutputDev {
public:
BitmapOutputDev(InfoOutputDev*info, PDFDoc*doc);
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);
- virtual void preparePage(int pdfpage, int outputpage);
+ virtual void setPageMap(int*page2page, int pagemap_size);
// OutputDev:
virtual GBool upsideDown();
virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2);
virtual void endPage();
+ virtual void finishPage();
virtual void saveState(GfxState *state);
virtual void restoreState(GfxState *state);
virtual void stroke(GfxState *state);
virtual void fill(GfxState *state);
virtual void eoFill(GfxState *state);
+#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);
+ 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 void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor);
virtual void clearSoftMask(GfxState *state);
-private:
- void flush();
+ virtual void processLink(Link *link, Catalog *catalog);
+
+ virtual void setVectorAntialias(GBool vaa);
+ virtual GBool getVectorAntialias();
- char config_bitmapfonts;
+
+private:
+ void clearClips();
+ void clearBoolPolyDev(int x1, int y1, int x2, int y2);
+ void clearBoolTextDev(int x1, int y1, int x2, int y2);
+ void flushText();
+ void flushBitmap();
+ GBool checkNewText(int x1, int y1, int x2, int y2);
+ GBool checkNewBitmap(int x1, int y1, int x2, int y2);
+ GBool clip0and1differ(int x1,int y1,int x2,int y2);
+ GBool intersection(int x1,int y1,int x2,int y2);
+
+ virtual gfxbbox_t getImageBBox(GfxState*state);
+ virtual gfxbbox_t getBBox(GfxState*state);
+
+ char config_extrafontdata;
+
+ int layerstate;
+ GBool emptypage;
+
+ SplashPath*bboxpath;
- int width, height;
PDFDoc*doc;
XRef*xref;
SplashOutputDev*rgbdev;
- SplashOutputDev*alphadev;
+ SplashOutputDev*clip0dev;
+ SplashOutputDev*clip1dev;
+ SplashOutputDev*boolpolydev;
+ SplashOutputDev*booltextdev;
+
+ SplashBitmap*rgbbitmap;
+ SplashBitmap*clip0bitmap;
+ SplashBitmap*clip1bitmap;
+ SplashBitmap*boolpolybitmap;
+ SplashBitmap*booltextbitmap;
+
+ gfxdevice_t* gfxoutput;
GFXOutputDev*gfxdev;
InfoOutputDev*info;
gfxdevice_t*dev;
+
+ int movex, movey;
+ int width, height;
+
+ int user_movex, user_movey;
+ int user_clipx1, user_clipy1;
+ int user_clipx2, user_clipy2;
+
+ //ClipState*clipstates;
};
#endif