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

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 16 years ago

First import

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