Coverage Report

Created: 2022-03-21 07:20

/src/xpdf-4.03/splash/Splash.h
Line
Count
Source (jump to first uncovered line)
1
//========================================================================
2
//
3
// Splash.h
4
//
5
// Copyright 2003-2013 Glyph & Cog, LLC
6
//
7
//========================================================================
8
9
#ifndef SPLASH_H
10
#define SPLASH_H
11
12
#include <aconf.h>
13
14
#ifdef USE_GCC_PRAGMAS
15
#pragma interface
16
#endif
17
18
#include "SplashTypes.h"
19
#include "SplashClip.h"
20
21
class GString;
22
class Splash;
23
class SplashBitmap;
24
struct SplashGlyphBitmap;
25
class SplashState;
26
class SplashPattern;
27
class SplashScreen;
28
class SplashPath;
29
class SplashXPath;
30
class SplashFont;
31
struct SplashPipe;
32
struct SplashDrawImageMaskRowData;
33
class ImageScaler;
34
typedef void (Splash::*SplashDrawImageMaskRowFunc)(
35
              SplashDrawImageMaskRowData *data,
36
              Guchar *maskData,
37
              int x, int y, int width);
38
struct SplashDrawImageRowData;
39
typedef void (Splash::*SplashDrawImageRowFunc)(SplashDrawImageRowData *data,
40
                 Guchar *colorData,
41
                 Guchar *alphaData,
42
                 int x, int y, int width);
43
44
//------------------------------------------------------------------------
45
46
// Retrieves the next line of pixels in an image mask.  Normally,
47
// fills in *<line> and returns true.  If the image stream is
48
// exhausted, returns false.
49
typedef GBool (*SplashImageMaskSource)(void *data, Guchar *pixel);
50
51
// Retrieves the next line of pixels in an image.  Normally, fills in
52
// *<line> and returns true.  If the image stream is exhausted,
53
// returns false.
54
typedef GBool (*SplashImageSource)(void *data, SplashColorPtr colorLine,
55
           Guchar *alphaLine);
56
57
58
//------------------------------------------------------------------------
59
60
enum SplashPipeResultColorCtrl {
61
  splashPipeResultColorNoAlphaBlendMono,
62
  splashPipeResultColorNoAlphaBlendRGB,
63
#if SPLASH_CMYK
64
  splashPipeResultColorNoAlphaBlendCMYK,
65
#endif
66
  splashPipeResultColorAlphaNoBlendMono,
67
  splashPipeResultColorAlphaNoBlendRGB,
68
#if SPLASH_CMYK
69
  splashPipeResultColorAlphaNoBlendCMYK,
70
#endif
71
  splashPipeResultColorAlphaBlendMono,
72
  splashPipeResultColorAlphaBlendRGB
73
#if SPLASH_CMYK
74
  ,
75
  splashPipeResultColorAlphaBlendCMYK
76
#endif
77
};
78
79
//------------------------------------------------------------------------
80
81
// Transparency group destination bitmap initialization control.
82
enum SplashGroupDestInitMode {
83
  splashGroupDestPreInit, // dest is already initialized
84
  splashGroupDestInitZero,  // initialize to zero (isolated group)
85
  splashGroupDestInitCopy // copy backdrop (non-isolated group)
86
};
87
88
//------------------------------------------------------------------------
89
// SplashImageCache
90
//------------------------------------------------------------------------
91
92
// This holds a cached image, and is shared by multiple Splash objects
93
// in the same thread.
94
class SplashImageCache {
95
public:
96
97
  SplashImageCache();
98
  ~SplashImageCache();
99
  GBool match(GString *aTag, int aWidth, int aHeight,
100
        SplashColorMode aMode, GBool aAlpha,
101
        GBool aInterpolate);
102
  void reset(GString *aTag, int aWidth, int aHeight,
103
       SplashColorMode aMode, GBool aAlpha,
104
       GBool aInterpolate);
105
  void incRefCount();
106
  void decRefCount();
107
108
  GString *tag;
109
  int width;
110
  int height;
111
  SplashColorMode mode;
112
  GBool alpha;
113
  GBool interpolate;
114
  Guchar *colorData;
115
  Guchar *alphaData;
116
117
  int refCount;
118
};
119
120
//------------------------------------------------------------------------
121
// Splash
122
//------------------------------------------------------------------------
123
124
class Splash {
125
public:
126
127
  // Create a new rasterizer object.
128
  Splash(SplashBitmap *bitmapA, GBool vectorAntialiasA,
129
   SplashImageCache *imageCacheA,
130
   SplashScreenParams *screenParams = NULL);
131
  Splash(SplashBitmap *bitmapA, GBool vectorAntialiasA,
132
   SplashImageCache *imageCacheA, SplashScreen *screenA);
133
134
  ~Splash();
135
136
  //----- state read
137
138
  SplashCoord *getMatrix();
139
  SplashPattern *getStrokePattern();
140
  SplashPattern *getFillPattern();
141
  SplashScreen *getScreen();
142
  SplashBlendFunc getBlendFunc();
143
  SplashCoord getStrokeAlpha();
144
  SplashCoord getFillAlpha();
145
  SplashCoord getLineWidth();
146
  int getLineCap();
147
  int getLineJoin();
148
  SplashCoord getMiterLimit();
149
  SplashCoord getFlatness();
150
  SplashCoord *getLineDash();
151
  int getLineDashLength();
152
  SplashCoord getLineDashPhase();
153
  SplashStrokeAdjustMode getStrokeAdjust();
154
  SplashClip *getClip();
155
  SplashBitmap *getSoftMask();
156
  GBool getInNonIsolatedGroup();
157
  GBool getInKnockoutGroup();
158
159
  //----- state write
160
161
  void setMatrix(SplashCoord *matrix);
162
  void setStrokePattern(SplashPattern *strokeColor);
163
  void setFillPattern(SplashPattern *fillColor);
164
  void setScreen(SplashScreen *screen);
165
  void setBlendFunc(SplashBlendFunc func);
166
  void setStrokeAlpha(SplashCoord alpha);
167
  void setFillAlpha(SplashCoord alpha);
168
  void setLineWidth(SplashCoord lineWidth);
169
  void setLineCap(int lineCap);
170
  void setLineJoin(int lineJoin);
171
  void setMiterLimit(SplashCoord miterLimit);
172
  void setFlatness(SplashCoord flatness);
173
  // the <lineDash> array will be copied
174
  void setLineDash(SplashCoord *lineDash, int lineDashLength,
175
       SplashCoord lineDashPhase);
176
  void setStrokeAdjust(SplashStrokeAdjustMode strokeAdjust);
177
  // NB: uses transformed coordinates.
178
  void clipResetToRect(SplashCoord x0, SplashCoord y0,
179
           SplashCoord x1, SplashCoord y1);
180
  // NB: uses transformed coordinates.
181
  SplashError clipToRect(SplashCoord x0, SplashCoord y0,
182
       SplashCoord x1, SplashCoord y1);
183
  // NB: uses untransformed coordinates.
184
  SplashError clipToPath(SplashPath *path, GBool eo);
185
  void setSoftMask(SplashBitmap *softMask);
186
  void setInTransparencyGroup(SplashBitmap *groupBackBitmapA,
187
            int groupBackXA, int groupBackYA,
188
            SplashGroupDestInitMode groupDestInitModeA,
189
            GBool nonIsolated, GBool knockout);
190
  void forceDeferredInit(int y, int h);
191
  void setTransfer(Guchar *red, Guchar *green, Guchar *blue, Guchar *gray);
192
  void setOverprintMask(Guint overprintMask);
193
  void setEnablePathSimplification(GBool en);
194
195
  //----- state save/restore
196
197
  void saveState();
198
  SplashError restoreState();
199
200
  //----- drawing operations
201
202
  // Fill the bitmap with <color>.  This is not subject to clipping.
203
  void clear(SplashColorPtr color, Guchar alpha = 0x00);
204
205
  // Stroke a path using the current stroke pattern.
206
  SplashError stroke(SplashPath *path);
207
208
  // Fill a path using the current fill pattern.
209
  SplashError fill(SplashPath *path, GBool eo);
210
211
  // Draw a character, using the current fill pattern.
212
  SplashError fillChar(SplashCoord x, SplashCoord y, int c, SplashFont *font);
213
214
  // Draw a glyph, using the current fill pattern.  This function does
215
  // not free any data, i.e., it ignores glyph->freeData.
216
  SplashError fillGlyph(SplashCoord x, SplashCoord y,
217
      SplashGlyphBitmap *glyph);
218
219
  // Draws an image mask using the fill color.  This will read <h>
220
  // lines of <w> pixels from <src>, starting with the top line.  "1"
221
  // pixels will be drawn with the current fill color; "0" pixels are
222
  // transparent.  The matrix:
223
  //    [ mat[0] mat[1] 0 ]
224
  //    [ mat[2] mat[3] 0 ]
225
  //    [ mat[4] mat[5] 1 ]
226
  // maps a unit square to the desired destination for the image, in
227
  // PostScript style:
228
  //    [x' y' 1] = [x y 1] * mat
229
  // Note that the Splash y axis points downward, and the image source
230
  // is assumed to produce pixels in raster order, starting from the
231
  // top line.
232
  SplashError fillImageMask(GString *imageTag,
233
          SplashImageMaskSource src, void *srcData,
234
          int w, int h, SplashCoord *mat,
235
          GBool glyphMode, GBool interpolate);
236
237
  // Draw an image.  This will read <h> lines of <w> pixels from
238
  // <src>, starting with the top line.  These pixels are assumed to
239
  // be in the source mode, <srcMode>.  If <srcAlpha> is true, the
240
  // alpha values returned by <src> are used; otherwise they are
241
  // ignored.  The following combinations of source and target modes
242
  // are supported:
243
  //    source       target
244
  //    ------       ------
245
  //    Mono8        Mono1   -- with dithering
246
  //    Mono8        Mono8
247
  //    RGB8         RGB8
248
  //    BGR8         RGB8
249
  //    CMYK8        CMYK8
250
  // The matrix behaves as for fillImageMask.
251
  SplashError drawImage(GString *imageTag,
252
      SplashImageSource src, void *srcData,
253
      SplashColorMode srcMode, GBool srcAlpha,
254
      int w, int h, SplashCoord *mat,
255
      GBool interpolate);
256
257
  // Composite a rectangular region from <src> onto this Splash
258
  // object.
259
  SplashError composite(SplashBitmap *src, int xSrc, int ySrc,
260
      int xDest, int yDest, int w, int h,
261
      GBool noClip, GBool nonIsolated);
262
263
  // Composite a rectangular region from <src> onto this Splash
264
  // object, using <srcOverprintMaskBitmap> as the overprint mask per
265
  // pixel.  This is only supported for CMYK and DeviceN bitmaps.
266
  SplashError compositeWithOverprint(SplashBitmap *src,
267
             Guint *srcOverprintMaskBitmap,
268
             int xSrc, int ySrc,
269
             int xDest, int yDest, int w, int h,
270
             GBool noClip, GBool nonIsolated);
271
272
  // Composite this Splash object onto a background color.  The
273
  // background alpha is assumed to be 1.
274
  void compositeBackground(SplashColorPtr color);
275
276
  // Copy a rectangular region from <src> onto the bitmap belonging to
277
  // this Splash object.  The destination alpha values are all set to
278
  // zero.
279
  SplashError blitTransparent(SplashBitmap *src, int xSrc, int ySrc,
280
            int xDest, int yDest, int w, int h);
281
282
  // Copy a rectangular region from the bitmap belonging to this
283
  // Splash object to <dest>.  The alpha values are corrected for a
284
  // non-isolated group.
285
  SplashError blitCorrectedAlpha(SplashBitmap *dest, int xSrc, int ySrc,
286
         int xDest, int yDest, int w, int h);
287
288
  //----- misc
289
290
  // Construct a path for a stroke, given the path to be stroked and
291
  // the line width <w>.  All other stroke parameters are taken from
292
  // the current state.  If <flatten> is true, this function will
293
  // first flatten the path and handle the linedash.
294
  SplashPath *makeStrokePath(SplashPath *path, SplashCoord w,
295
           int lineCap, int lineJoin,
296
           GBool flatten = gTrue);
297
298
  // Reduce the size of a rectangle as much as possible by moving any
299
  // edges that are completely outside the clip region.  Returns the
300
  // clipping status of the resulting rectangle.
301
  SplashClipResult limitRectToClipRect(int *xMin, int *yMin,
302
               int *xMax, int *yMax);
303
304
  // Return the associated bitmap.
305
0
  SplashBitmap *getBitmap() { return bitmap; }
306
307
  // Enable writing the per-pixel overprint mask to a separate bitmap.
308
  void setOverprintMaskBitmap(Guint *overprintMaskBitmapA)
309
0
    { overprintMaskBitmap = overprintMaskBitmapA; }
310
311
  // Set the minimum line width.
312
0
  void setMinLineWidth(SplashCoord w) { minLineWidth = w; }
313
314
  // Get a bounding box which includes all modifications since the
315
  // last call to clearModRegion.
316
  void getModRegion(int *xMin, int *yMin, int *xMax, int *yMax)
317
0
    { *xMin = modXMin; *yMin = modYMin; *xMax = modXMax; *yMax = modYMax; }
318
319
  // Clear the modified region bounding box.
320
  void clearModRegion();
321
322
  // Get clipping status for the last drawing operation subject to
323
  // clipping.
324
  SplashClipResult getClipRes() { return opClipRes; }
325
326
  // Toggle debug mode on or off.
327
  void setDebugMode(GBool debugModeA) { debugMode = debugModeA; }
328
329
0
  SplashImageCache *getImageCache() { return imageCache; }
330
331
#if 1 //~tmp: turn off anti-aliasing temporarily
332
0
  void setInShading(GBool sh) { inShading = sh; }
333
#endif
334
335
336
private:
337
338
  void pipeInit(SplashPipe *pipe, SplashPattern *pattern,
339
    Guchar aInput, GBool usesShape,
340
    GBool nonIsolatedGroup, GBool usesSrcOverprint = gFalse);
341
  void pipeRun(SplashPipe *pipe, int x0, int x1, int y,
342
         Guchar *shapePtr, SplashColorPtr cSrcPtr);
343
  void pipeRunSimpleMono1(SplashPipe *pipe, int x0, int x1, int y,
344
        Guchar *shapePtr, SplashColorPtr cSrcPtr);
345
  void pipeRunSimpleMono8(SplashPipe *pipe, int x0, int x1, int y,
346
        Guchar *shapePtr, SplashColorPtr cSrcPtr);
347
  void pipeRunSimpleRGB8(SplashPipe *pipe, int x0, int x1, int y,
348
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
349
  void pipeRunSimpleBGR8(SplashPipe *pipe, int x0, int x1, int y,
350
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
351
#if SPLASH_CMYK
352
  void pipeRunSimpleCMYK8(SplashPipe *pipe, int x0, int x1, int y,
353
        Guchar *shapePtr, SplashColorPtr cSrcPtr);
354
#endif
355
  void pipeRunShapeMono1(SplashPipe *pipe, int x0, int x1, int y,
356
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
357
  void pipeRunShapeMono8(SplashPipe *pipe, int x0, int x1, int y,
358
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
359
  void pipeRunShapeRGB8(SplashPipe *pipe, int x0, int x1, int y,
360
      Guchar *shapePtr, SplashColorPtr cSrcPtr);
361
  void pipeRunShapeBGR8(SplashPipe *pipe, int x0, int x1, int y,
362
      Guchar *shapePtr, SplashColorPtr cSrcPtr);
363
#if SPLASH_CMYK
364
  void pipeRunShapeCMYK8(SplashPipe *pipe, int x0, int x1, int y,
365
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
366
#endif
367
  void pipeRunShapeNoAlphaMono8(SplashPipe *pipe, int x0, int x1, int y,
368
                                Guchar *shapePtr, SplashColorPtr cSrcPtr);
369
  void pipeRunAAMono1(SplashPipe *pipe, int x0, int x1, int y,
370
          Guchar *shapePtr, SplashColorPtr cSrcPtr);
371
  void pipeRunAAMono8(SplashPipe *pipe, int x0, int x1, int y,
372
          Guchar *shapePtr, SplashColorPtr cSrcPtr);
373
  void pipeRunAARGB8(SplashPipe *pipe, int x0, int x1, int y,
374
         Guchar *shapePtr, SplashColorPtr cSrcPtr);
375
  void pipeRunAABGR8(SplashPipe *pipe, int x0, int x1, int y,
376
         Guchar *shapePtr, SplashColorPtr cSrcPtr);
377
#if SPLASH_CMYK
378
  void pipeRunAACMYK8(SplashPipe *pipe, int x0, int x1, int y,
379
          Guchar *shapePtr, SplashColorPtr cSrcPtr);
380
#endif
381
  void pipeRunSoftMaskMono8(SplashPipe *pipe, int x0, int x1, int y,
382
          Guchar *shapePtr, SplashColorPtr cSrcPtr);
383
  void pipeRunSoftMaskRGB8(SplashPipe *pipe, int x0, int x1, int y,
384
                           Guchar *shapePtr, SplashColorPtr cSrcPtr);
385
  void pipeRunSoftMaskBGR8(SplashPipe *pipe, int x0, int x1, int y,
386
                           Guchar *shapePtr, SplashColorPtr cSrcPtr);
387
#if SPLASH_CMYK
388
  void pipeRunSoftMaskCMYK8(SplashPipe *pipe, int x0, int x1, int y,
389
          Guchar *shapePtr, SplashColorPtr cSrcPtr);
390
#endif
391
  void pipeRunNonIsoMono8(SplashPipe *pipe, int x0, int x1, int y,
392
        Guchar *shapePtr, SplashColorPtr cSrcPtr);
393
  void pipeRunNonIsoRGB8(SplashPipe *pipe, int x0, int x1, int y,
394
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
395
  void pipeRunNonIsoBGR8(SplashPipe *pipe, int x0, int x1, int y,
396
       Guchar *shapePtr, SplashColorPtr cSrcPtr);
397
#if SPLASH_CMYK
398
  void pipeRunNonIsoCMYK8(SplashPipe *pipe, int x0, int x1, int y,
399
        Guchar *shapePtr, SplashColorPtr cSrcPtr);
400
#endif
401
  void useDestRow(int y);
402
  void copyGroupBackdropRow(int y);
403
  void transform(SplashCoord *matrix, SplashCoord xi, SplashCoord yi,
404
     SplashCoord *xo, SplashCoord *yo);
405
  void updateModX(int x);
406
  void updateModY(int y);
407
  void strokeNarrow(SplashPath *path);
408
  void drawStrokeSpan(SplashPipe *pipe, int x0, int x1, int y, GBool noClip);
409
  void strokeWide(SplashPath *path, SplashCoord w,
410
      int lineCap, int lineJoin);
411
  SplashPath *flattenPath(SplashPath *path, SplashCoord *matrix,
412
        SplashCoord flatness);
413
  void flattenCurve(SplashCoord x0, SplashCoord y0,
414
        SplashCoord x1, SplashCoord y1,
415
        SplashCoord x2, SplashCoord y2,
416
        SplashCoord x3, SplashCoord y3,
417
        SplashCoord *matrix, SplashCoord flatness2,
418
        SplashPath *fPath);
419
  SplashPath *makeDashedPath(SplashPath *xPath);
420
  SplashError fillWithPattern(SplashPath *path, GBool eo,
421
            SplashPattern *pattern, SplashCoord alpha);
422
  SplashPath *tweakFillPath(SplashPath *path);
423
  GBool pathAllOutside(SplashPath *path);
424
  SplashError fillGlyph2(int x0, int y0, SplashGlyphBitmap *glyph);
425
  void getImageBounds(SplashCoord xyMin, SplashCoord xyMax,
426
          int *xyMinI, int *xyMaxI);
427
  void drawImageMaskArbitraryNoInterp(Guchar *scaledMask,
428
              SplashDrawImageMaskRowData *dd,
429
              SplashDrawImageMaskRowFunc drawRowFunc,
430
              SplashCoord *invMat,
431
              int scaledWidth, int scaledHeight,
432
              int xMin, int yMin, int xMax, int yMax);
433
  void drawImageMaskArbitraryInterp(Guchar *scaledMask,
434
            SplashDrawImageMaskRowData *dd,
435
            SplashDrawImageMaskRowFunc drawRowFunc,
436
            SplashCoord *invMat,
437
            int scaledWidth, int scaledHeight,
438
            int xMin, int yMin, int xMax, int yMax);
439
  void mirrorImageMaskRow(Guchar *maskIn, Guchar *maskOut, int width);
440
  void drawImageMaskRowNoClip(SplashDrawImageMaskRowData *data,
441
            Guchar *maskData,
442
            int x, int y, int width);
443
  void drawImageMaskRowClipNoAA(SplashDrawImageMaskRowData *data,
444
        Guchar *maskData,
445
        int x, int y, int width);
446
  void drawImageMaskRowClipAA(SplashDrawImageMaskRowData *data,
447
            Guchar *maskData,
448
            int x, int y, int width);
449
  ImageScaler *getImageScaler(GString *imageTag,
450
            SplashImageSource src, void *srcData,
451
            int w, int h, int nComps,
452
            int scaledWidth, int scaledHeight,
453
            SplashColorMode srcMode,
454
            GBool srcAlpha, GBool interpolate);
455
  void getScaledImage(GString *imageTag,
456
          SplashImageSource src, void *srcData,
457
          int w, int h, int nComps,
458
          int scaledWidth, int scaledHeight,
459
          SplashColorMode srcMode,
460
          GBool srcAlpha, GBool interpolate,
461
          Guchar **scaledColor, Guchar **scaledAlpha,
462
          GBool *freeScaledImage);
463
  void drawImageArbitraryNoInterp(Guchar *scaledColor, Guchar *scaledAlpha,
464
          SplashDrawImageRowData *dd,
465
          SplashDrawImageRowFunc drawRowFunc,
466
          SplashCoord *invMat,
467
          int scaledWidth, int scaledHeight,
468
          int xMin, int yMin, int xMax, int yMax,
469
          int nComps, GBool srcAlpha);
470
  void drawImageArbitraryInterp(Guchar *scaledColor, Guchar *scaledAlpha,
471
        SplashDrawImageRowData *dd,
472
        SplashDrawImageRowFunc drawRowFunc,
473
        SplashCoord *invMat,
474
        int scaledWidth, int scaledHeight,
475
        int xMin, int yMin, int xMax, int yMax,
476
        int nComps, GBool srcAlpha);
477
  void mirrorImageRow(Guchar *colorIn, Guchar *alphaIn,
478
          Guchar *colorOut, Guchar *alphaOut,
479
          int width, int nComps, GBool srcAlpha);
480
  void drawImageRowNoClipNoAlpha(SplashDrawImageRowData *data,
481
         Guchar *colorData, Guchar *alphaData,
482
         int x, int y, int width);
483
  void drawImageRowNoClipAlpha(SplashDrawImageRowData *data,
484
             Guchar *colorData, Guchar *alphaData,
485
             int x, int y, int width);
486
  void drawImageRowClipNoAlphaNoAA(SplashDrawImageRowData *data,
487
           Guchar *colorData,
488
           Guchar *alphaData,
489
           int x, int y, int width);
490
  void drawImageRowClipNoAlphaAA(SplashDrawImageRowData *data,
491
         Guchar *colorData,
492
         Guchar *alphaData,
493
         int x, int y, int width);
494
  void drawImageRowClipAlphaNoAA(SplashDrawImageRowData *data,
495
         Guchar *colorData,
496
         Guchar *alphaData,
497
         int x, int y, int width);
498
  void drawImageRowClipAlphaAA(SplashDrawImageRowData *data,
499
             Guchar *colorData,
500
             Guchar *alphaData,
501
             int x, int y, int width);
502
  void dumpPath(SplashPath *path);
503
  void dumpXPath(SplashXPath *path);
504
505
506
  static SplashPipeResultColorCtrl pipeResultColorNoAlphaBlend[];
507
  static SplashPipeResultColorCtrl pipeResultColorAlphaNoBlend[];
508
  static SplashPipeResultColorCtrl pipeResultColorAlphaBlend[];
509
  static int pipeNonIsoGroupCorrection[];
510
511
  SplashBitmap *bitmap;
512
  int bitmapComps;
513
  SplashState *state;
514
  Guchar *scanBuf;
515
  Guchar *scanBuf2;
516
  SplashBitmap      // for transparency groups, this is the bitmap
517
    *groupBackBitmap;   //   containing the alpha0/color0 values
518
  int groupBackX, groupBackY; // offset within groupBackBitmap
519
  SplashGroupDestInitMode groupDestInitMode;
520
  int groupDestInitYMin, groupDestInitYMax;
521
  Guint *overprintMaskBitmap;
522
  SplashCoord minLineWidth;
523
  int modXMin, modYMin, modXMax, modYMax;
524
  SplashClipResult opClipRes;
525
  GBool vectorAntialias;
526
  GBool inShading;
527
  GBool debugMode;
528
529
  SplashImageCache *imageCache;
530
};
531
532
#endif