File: VectorGraphicOutputDev.h

package info (click to toggle)
swftools 0.9.2%2Bds1-3
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 9,488 kB
  • sloc: ansic: 122,576; sh: 8,494; cpp: 8,020; yacc: 2,260; lisp: 904; makefile: 581; python: 304
file content (220 lines) | stat: -rw-r--r-- 7,480 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#ifndef __vectorgraphicsoutputdev_h__
#define __vectorgraphicsoutputdev_h__

#include "../gfxdevice.h"
#include "../gfxsource.h"
#include "../gfxtools.h"
#include "../kdtree.h"

#include "CommonOutputDev.h"
#include "InfoOutputDev.h"
#include "CharOutputDev.h"
#include "PDFDoc.h"
#include "GlobalParams.h"

class GFXOutputState {
    public:
    int clipping;
    int textRender;
    char createsoftmask;
    char transparencygroup;
    char softmask;
    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;
};

void addGlobalFont(const char*filename);
void addGlobalLanguageDir(const char*dir);
void addGlobalFontDir(const char*dirname);

class GFXLink;
  
void drawchar_callback(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix);
void addfont_callback(gfxdevice_t*dev, gfxfont_t*font);

class VectorGraphicOutputDev:  public CommonOutputDev {
public:
  gfxdevice_t* device;

  VectorGraphicOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2);
  virtual ~VectorGraphicOutputDev() ;

  virtual void setDevice(gfxdevice_t*dev);
  virtual void setParameter(const char*key, const char*value);
  
  // Start a page.
  virtual void beginPage(GfxState *state, int pageNum);
  virtual void endPage();
    
  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);
  //----- 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 useShadedFills() { return gTrue; }

  //----- link borders
  virtual void processLink(Link *link, Catalog *catalog);
  virtual void setDefaultCTM(double *ctm);

  //----- save/restore graphics state
  virtual void saveState(GfxState *state) ;
  virtual void restoreState(GfxState *state) ;

  //----- update graphics state
  virtual void updateLineDash(GfxState *state);
  virtual void updateFont(GfxState *state);
  virtual void updateFontMatrix(GfxState *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) ;
  virtual void clipToStrokePath(GfxState *state);
  
  //----- shaded fills
  virtual GBool useTilingPatternFill();
  virtual GBool useShadedFills();

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 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);

  //----- transparency groups and soft masks (xpdf >= ~ 3.01.16)
  virtual void beginTransparencyGroup(GfxState *state, double *bbox,
				      GfxColorSpace *blendingColorSpace,
				      GBool isolated, GBool knockout,
				      GBool forSoftMask);
  virtual void endTransparencyGroup(GfxState *state);
  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 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);

  char* searchForSuitableFont(GfxFont*gfxFont);

  void finish();

  virtual GBool useDrawForm();
  virtual void drawForm(Ref id);
  virtual GBool needNonText();

  private:
  gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed);

  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);

  void strokeGfxline(GfxState *state, gfxline_t*line, int flags);
  void clipToGfxLine(GfxState *state, gfxline_t*line, char evenodd);
  void fillGfxLine(GfxState *state, gfxline_t*line, char evenodd);

  int currentpage;
  char outer_clip_box; //whether the page clip box is still on
  GFXOutputState states[64];
  int statepos;

  int type3active; // are we between beginType3()/endType3()?
  GfxState *laststate;

  gfxline_t* current_text_stroke;
  gfxline_t* current_text_clip;
  gfxfont_t* current_gfxfont;
  FontInfo*current_fontinfo;
  gfxmatrix_t current_font_matrix;

  /* config */
  int config_break_on_warning;
  int config_remapunicode;
  int config_transparent;
  int config_convertgradients;
  int config_disable_polygon_conversion;
  int config_multiply;
  int config_drawonlyshapes;
  int config_textonly;
  int config_disable_tiling_pattern_fills;

  gfxdevice_t char_output_dev;
  CharOutputDev*charDev;
  friend void drawchar_callback(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix);
  friend void addfont_callback(gfxdevice_t*dev, gfxfont_t*font);
  gfxfont_t*gfxfont_from_callback;
  int glyphnr_from_callback;
  gfxcolor_t textcolor_from_callback;
  gfxmatrix_t textmatrix_from_callback;
};

#endif //__vectorgraphicsoutputdev_h__