source: trunk/poppler/mypoppler/poppler/Gfx.h @ 257

Last change on this file since 257 was 257, checked in by Eugene Romanenko, 13 years ago

PDF plugin: Poppler library updated to version 0.10.0

File size: 10.8 KB
Line 
1//========================================================================
2//
3// Gfx.h
4//
5// Copyright 1996-2003 Glyph & Cog, LLC
6//
7//========================================================================
8
9//========================================================================
10//
11// Modified under the Poppler project - http://poppler.freedesktop.org
12//
13// All changes made under the Poppler project to this file are licensed
14// under GPL version 2 or later
15//
16// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com>
17// Copyright (C) 2007 Iñigo Martínez <inigomartinez@gmail.com>
18// Copyright (C) 2008 Brad Hards <bradh@kde.org>
19//
20// To see a description of the changes please see the Changelog file that
21// came with your tarball or type make ChangeLog if you are building from git
22//
23//========================================================================
24
25#ifndef GFX_H
26#define GFX_H
27
28#ifdef USE_GCC_PRAGMAS
29#pragma interface
30#endif
31
32#include "goo/gtypes.h"
33#include "goo/GooList.h"
34#include "Object.h"
35
36class GooString;
37class XRef;
38class Array;
39class Stream;
40class Parser;
41class Dict;
42class Function;
43class OutputDev;
44class GfxFontDict;
45class GfxFont;
46class GfxPattern;
47class GfxTilingPattern;
48class GfxShadingPattern;
49class GfxShading;
50class GfxFunctionShading;
51class GfxAxialShading;
52class GfxRadialShading;
53class GfxGouraudTriangleShading;
54class GfxPatchMeshShading;
55struct GfxPatch;
56class GfxState;
57struct GfxColor;
58class GfxColorSpace;
59class Gfx;
60class PDFRectangle;
61class AnnotBorder;
62class AnnotColor;
63class Catalog;
64
65//------------------------------------------------------------------------
66
67enum GfxClipType {
68  clipNone,
69  clipNormal,
70  clipEO
71};
72
73enum TchkType {
74  tchkBool,                     // boolean
75  tchkInt,                      // integer
76  tchkNum,                      // number (integer or real)
77  tchkString,                   // string
78  tchkName,                     // name
79  tchkArray,                    // array
80  tchkProps,                    // properties (dictionary or name)
81  tchkSCN,                      // scn/SCN args (number of name)
82  tchkNone                      // used to avoid empty initializer lists
83};
84
85#define maxArgs 33
86
87struct Operator {
88  char name[4];
89  int numArgs;
90  TchkType tchk[maxArgs];
91  void (Gfx::*func)(Object args[], int numArgs);
92};
93
94//------------------------------------------------------------------------
95
96class GfxResources {
97public:
98
99  GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA);
100  ~GfxResources();
101
102  GfxFont *lookupFont(char *name);
103  GBool lookupXObject(char *name, Object *obj);
104  GBool lookupXObjectNF(char *name, Object *obj);
105  GBool lookupMarkedContentNF(char *name, Object *obj);
106  void lookupColorSpace(char *name, Object *obj);
107  GfxPattern *lookupPattern(char *name);
108  GfxShading *lookupShading(char *name);
109  GBool lookupGState(char *name, Object *obj);
110
111  GfxResources *getNext() { return next; }
112
113private:
114
115  GfxFontDict *fonts;
116  Object xObjDict;
117  Object colorSpaceDict;
118  Object patternDict;
119  Object shadingDict;
120  Object gStateDict;
121  Object propertiesDict;
122  GfxResources *next;
123};
124
125//------------------------------------------------------------------------
126// Gfx
127//------------------------------------------------------------------------
128
129class Gfx {
130public:
131
132  // Constructor for regular output.
133  Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalog,
134      double hDPI, double vDPI, PDFRectangle *box,
135      PDFRectangle *cropBox, int rotate,
136      GBool (*abortCheckCbkA)(void *data) = NULL,
137      void *abortCheckCbkDataA = NULL);
138
139  // Constructor for a sub-page object.
140  Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalog,
141      PDFRectangle *box, PDFRectangle *cropBox,
142      GBool (*abortCheckCbkA)(void *data) = NULL,
143      void *abortCheckCbkDataA = NULL);
144
145  ~Gfx();
146
147  // Interpret a stream or array of streams.
148  void display(Object *obj, GBool topLevel = gTrue);
149
150  // Display an annotation, given its appearance (a Form XObject),
151  // border style, and bounding box (in default user space).
152  void drawAnnot(Object *str, AnnotBorder *border, AnnotColor *aColor,
153                 double xMin, double yMin, double xMax, double yMax);
154
155  // Save graphics state.
156  void saveState();
157
158  // Restore graphics state.
159  void restoreState();
160
161  // Get the current graphics state object.
162  GfxState *getState() { return state; }
163
164private:
165
166  XRef *xref;                   // the xref table for this PDF file
167  Catalog *catalog;             // the Catalog for this PDF file 
168  OutputDev *out;               // output device
169  GBool subPage;                // is this a sub-page object?
170  GBool printCommands;          // print the drawing commands (for debugging)
171  GBool profileCommands;        // profile the drawing commands (for debugging)
172  GfxResources *res;            // resource stack
173  int updateLevel;
174  GBool ocSuppressed;           // are we ignoring content based on OptionalContent?
175
176  GfxState *state;              // current graphics state
177  GBool fontChanged;            // set if font or text matrix has changed
178  GfxClipType clip;             // do a clip?
179  int ignoreUndef;              // current BX/EX nesting level
180  double baseMatrix[6];         // default matrix for most recent
181                                //   page/form/pattern
182  int formDepth;
183
184  GooList *markedContentStack;  // current BMC/EMC stack
185
186  Parser *parser;               // parser for page content stream(s)
187
188  GBool                         // callback to check for an abort
189    (*abortCheckCbk)(void *data);
190  void *abortCheckCbkData;
191
192  static Operator opTab[];      // table of operators
193
194  void go(GBool topLevel);
195  void execOp(Object *cmd, Object args[], int numArgs);
196  Operator *findOp(char *name);
197  GBool checkArg(Object *arg, TchkType type);
198  int getPos();
199
200  // graphics state operators
201  void opSave(Object args[], int numArgs);
202  void opRestore(Object args[], int numArgs);
203  void opConcat(Object args[], int numArgs);
204  void opSetDash(Object args[], int numArgs);
205  void opSetFlat(Object args[], int numArgs);
206  void opSetLineJoin(Object args[], int numArgs);
207  void opSetLineCap(Object args[], int numArgs);
208  void opSetMiterLimit(Object args[], int numArgs);
209  void opSetLineWidth(Object args[], int numArgs);
210  void opSetExtGState(Object args[], int numArgs);
211  void doSoftMask(Object *str, GBool alpha,
212                  GfxColorSpace *blendingColorSpace,
213                  GBool isolated, GBool knockout,
214                  Function *transferFunc, GfxColor *backdropColor);
215  void opSetRenderingIntent(Object args[], int numArgs);
216
217  // color operators
218  void opSetFillGray(Object args[], int numArgs);
219  void opSetStrokeGray(Object args[], int numArgs);
220  void opSetFillCMYKColor(Object args[], int numArgs);
221  void opSetStrokeCMYKColor(Object args[], int numArgs);
222  void opSetFillRGBColor(Object args[], int numArgs);
223  void opSetStrokeRGBColor(Object args[], int numArgs);
224  void opSetFillColorSpace(Object args[], int numArgs);
225  void opSetStrokeColorSpace(Object args[], int numArgs);
226  void opSetFillColor(Object args[], int numArgs);
227  void opSetStrokeColor(Object args[], int numArgs);
228  void opSetFillColorN(Object args[], int numArgs);
229  void opSetStrokeColorN(Object args[], int numArgs);
230
231  // path segment operators
232  void opMoveTo(Object args[], int numArgs);
233  void opLineTo(Object args[], int numArgs);
234  void opCurveTo(Object args[], int numArgs);
235  void opCurveTo1(Object args[], int numArgs);
236  void opCurveTo2(Object args[], int numArgs);
237  void opRectangle(Object args[], int numArgs);
238  void opClosePath(Object args[], int numArgs);
239
240  // path painting operators
241  void opEndPath(Object args[], int numArgs);
242  void opStroke(Object args[], int numArgs);
243  void opCloseStroke(Object args[], int numArgs);
244  void opFill(Object args[], int numArgs);
245  void opEOFill(Object args[], int numArgs);
246  void opFillStroke(Object args[], int numArgs);
247  void opCloseFillStroke(Object args[], int numArgs);
248  void opEOFillStroke(Object args[], int numArgs);
249  void opCloseEOFillStroke(Object args[], int numArgs);
250  void doPatternFill(GBool eoFill);
251  void doPatternStroke();
252  void doTilingPatternFill(GfxTilingPattern *tPat,
253                           GBool stroke, GBool eoFill);
254  void doShadingPatternFill(GfxShadingPattern *sPat,
255                            GBool stroke, GBool eoFill);
256  void opShFill(Object args[], int numArgs);
257  void doFunctionShFill(GfxFunctionShading *shading);
258  void doFunctionShFill1(GfxFunctionShading *shading,
259                         double x0, double y0,
260                         double x1, double y1,
261                         GfxColor *colors, int depth);
262  void doAxialShFill(GfxAxialShading *shading);
263  void doRadialShFill(GfxRadialShading *shading);
264  void doGouraudTriangleShFill(GfxGouraudTriangleShading *shading);
265  void gouraudFillTriangle(double x0, double y0, GfxColor *color0,
266                           double x1, double y1, GfxColor *color1,
267                           double x2, double y2, GfxColor *color2,
268                           int nComps, int depth);
269  void doPatchMeshShFill(GfxPatchMeshShading *shading);
270  void fillPatch(GfxPatch *patch, int nComps, int depth);
271  void doEndPath();
272
273  // path clipping operators
274  void opClip(Object args[], int numArgs);
275  void opEOClip(Object args[], int numArgs);
276
277  // text object operators
278  void opBeginText(Object args[], int numArgs);
279  void opEndText(Object args[], int numArgs);
280
281  // text state operators
282  void opSetCharSpacing(Object args[], int numArgs);
283  void opSetFont(Object args[], int numArgs);
284  void opSetTextLeading(Object args[], int numArgs);
285  void opSetTextRender(Object args[], int numArgs);
286  void opSetTextRise(Object args[], int numArgs);
287  void opSetWordSpacing(Object args[], int numArgs);
288  void opSetHorizScaling(Object args[], int numArgs);
289
290  // text positioning operators
291  void opTextMove(Object args[], int numArgs);
292  void opTextMoveSet(Object args[], int numArgs);
293  void opSetTextMatrix(Object args[], int numArgs);
294  void opTextNextLine(Object args[], int numArgs);
295
296  // text string operators
297  void opShowText(Object args[], int numArgs);
298  void opMoveShowText(Object args[], int numArgs);
299  void opMoveSetShowText(Object args[], int numArgs);
300  void opShowSpaceText(Object args[], int numArgs);
301  void doShowText(GooString *s);
302
303  // XObject operators
304  void opXObject(Object args[], int numArgs);
305  void doImage(Object *ref, Stream *str, GBool inlineImg);
306  void doForm(Object *str);
307  void doForm1(Object *str, Dict *resDict, double *matrix, double *bbox,
308               GBool transpGroup = gFalse, GBool softMask = gFalse,
309               GfxColorSpace *blendingColorSpace = NULL,
310               GBool isolated = gFalse, GBool knockout = gFalse,
311               GBool alpha = gFalse, Function *transferFunc = NULL,
312               GfxColor *backdropColor = NULL);
313
314  // in-line image operators
315  void opBeginImage(Object args[], int numArgs);
316  Stream *buildImageStream();
317  void opImageData(Object args[], int numArgs);
318  void opEndImage(Object args[], int numArgs);
319
320  // type 3 font operators
321  void opSetCharWidth(Object args[], int numArgs);
322  void opSetCacheDevice(Object args[], int numArgs);
323
324  // compatibility operators
325  void opBeginIgnoreUndef(Object args[], int numArgs);
326  void opEndIgnoreUndef(Object args[], int numArgs);
327
328  // marked content operators
329  void opBeginMarkedContent(Object args[], int numArgs);
330  void opEndMarkedContent(Object args[], int numArgs);
331  void opMarkPoint(Object args[], int numArgs);
332
333  void pushResources(Dict *resDict);
334  void popResources();
335};
336
337#endif
Note: See TracBrowser for help on using the repository browser.