poppler: add new axial and radialShadedFill parameters
[swftools.git] / lib / pdf / BitmapOutputDev.h
index 3e821c7..8e72ff6 100644 (file)
 #include "../gfxsource.h"
 #include "../gfxtools.h"
 
-#include "config.h"
+#include "../../config.h"
 #include "GFXOutputDev.h"
 #include "InfoOutputDev.h"
 #include "PDFDoc.h"
 #include "CommonOutputDev.h"
+#include "popplercompat.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 ~BitmapOutputDev();
+
+    virtual void dbg_newdata(char*newdata);
    
     // CommonOutputDev:
     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);
-    virtual void preparePage(int pdfpage, int outputpage);
+    virtual void setPageMap(int*page2page, int pagemap_size);
 
     // OutputDev:
     virtual GBool upsideDown();
@@ -51,15 +66,16 @@ public:
     virtual GBool interpretType3Chars();
     virtual GBool needNonText();
     virtual void setDefaultCTM(double *ctm);
-/*    virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
+    virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
                               int rotate, GBool useMediaBox, GBool crop,
                               int sliceX, int sliceY, int sliceW, int sliceH,
                               GBool printing, Catalog *catalog,
                               GBool (*abortCheckCbk)(void *data) = NULL,
-                              void *abortCheckCbkData = NULL);*/
+                              void *abortCheckCbkData = NULL);
 
-    virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2);
+    virtual void startPage(int pageNum, GfxState *state);
     virtual void endPage();
+    virtual void finishPage();
 
     virtual void saveState(GfxState *state);
     virtual void restoreState(GfxState *state);
@@ -96,15 +112,17 @@ public:
     virtual void stroke(GfxState *state);
     virtual void fill(GfxState *state);
     virtual void eoFill(GfxState *state);
-    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 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);
+    virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading POPPLER_RAXIAL_MIN_MAX);
+    virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading POPPLER_RAXIAL_MIN_MAX);
 
     virtual void clip(GfxState *state);
     virtual void eoClip(GfxState *state);
@@ -127,21 +145,27 @@ public:
 
     virtual void drawImageMask(GfxState *state, Object *ref, Stream *str,
                               int width, int height, GBool invert,
+                              POPPLER_INTERPOLATE
                               GBool inlineImg);
     virtual void drawImage(GfxState *state, Object *ref, Stream *str,
                           int width, int height, GfxImageColorMap *colorMap,
+                          POPPLER_INTERPOLATE
                           int *maskColors, GBool inlineImg);
     virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str,
                                 int width, int height,
                                 GfxImageColorMap *colorMap,
+                                POPPLER_INTERPOLATE
                                 Stream *maskStr, int maskWidth, int maskHeight,
-                                GBool maskInvert);
+                                GBool maskInvert
+                                POPPLER_MASK_INTERPOLATE);
     virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
                                     int width, int height,
                                     GfxImageColorMap *colorMap,
+                                    POPPLER_INTERPOLATE
                                     Stream *maskStr,
                                     int maskWidth, int maskHeight,
-                                    GfxImageColorMap *maskColorMap);
+                                    GfxImageColorMap *maskColorMap
+                                    POPPLER_MASK_INTERPOLATE);
 
     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);
@@ -157,19 +181,64 @@ public:
     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 flushEverything();
+    void clearClips();
+    void clearBoolPolyDev();
+    void clearBoolTextDev();
+    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(SplashBitmap*boolpoly, SplashBitmap*booltext, int x1, int y1, int x2, int y2);
+    
+    virtual gfxbbox_t getImageBBox(GfxState*state);
+    virtual gfxbbox_t getBBox(GfxState*state);
+
+    char config_extrafontdata;
+    char config_optimizeplaincolorfills;
+
+    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*stalepolybitmap;
+    SplashBitmap*booltextbitmap;
+    SplashBitmap*staletextbitmap;
+
+    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