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

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

PDF plugin: Poppler library updated to version 0.10.2

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