/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 |