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

Last change on this file since 461 was 461, checked in by Silvan Scherrer, 11 years ago

poppler update to 0.14.2

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