Coverage Report

Created: 2026-02-04 06:14

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