source: trunk/poppler/mypoppler/poppler/SplashOutputDev.h @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 15 years ago

First import

File size: 6.7 KB
Line 
1//========================================================================
2//
3// SplashOutputDev.h
4//
5// Copyright 2003 Glyph & Cog, LLC
6//
7//========================================================================
8
9#ifndef SPLASHOUTPUTDEV_H
10#define SPLASHOUTPUTDEV_H
11
12#ifdef USE_GCC_PRAGMAS
13#pragma interface
14#endif
15
16#include "goo/gtypes.h"
17#include "splash/SplashTypes.h"
18#include "poppler-config.h"
19#include "OutputDev.h"
20#include "GfxState.h"
21
22class Gfx8BitFont;
23class SplashBitmap;
24class Splash;
25class SplashPath;
26class SplashPattern;
27class SplashFontEngine;
28class SplashFont;
29class T3FontCache;
30struct T3FontCacheTag;
31struct T3GlyphStack;
32
33//------------------------------------------------------------------------
34
35// number of Type 3 fonts to cache
36#define splashOutT3FontCacheSize 8
37
38//------------------------------------------------------------------------
39// SplashOutputDev
40//------------------------------------------------------------------------
41
42class SplashOutputDev: public OutputDev {
43public:
44
45  // Constructor.
46  SplashOutputDev(SplashColorMode colorModeA, int bitmapRowPadA,
47                  GBool reverseVideoA, SplashColorPtr paperColorA,
48                  GBool bitmapTopDownA = gTrue,
49                  GBool allowAntialiasA = gTrue);
50
51  // Destructor.
52  virtual ~SplashOutputDev();
53
54  //----- get info about output device
55
56  // Does this device use upside-down coordinates?
57  // (Upside-down means (0,0) is the top left corner of the page.)
58  virtual GBool upsideDown() { return gTrue; }
59
60  // Does this device use drawChar() or drawString()?
61  virtual GBool useDrawChar() { return gTrue; }
62
63  // Does this device use beginType3Char/endType3Char?  Otherwise,
64  // text in Type 3 fonts will be drawn with drawChar/drawString.
65  virtual GBool interpretType3Chars() { return gTrue; }
66
67  //----- initialization and control
68
69  // Start a page.
70  virtual void startPage(int pageNum, GfxState *state);
71
72  // End a page.
73  virtual void endPage();
74
75  //----- link borders
76  virtual void drawLink(Link *link, Catalog *catalog);
77
78  //----- save/restore graphics state
79  virtual void saveState(GfxState *state);
80  virtual void restoreState(GfxState *state);
81
82  //----- update graphics state
83  virtual void updateAll(GfxState *state);
84  virtual void updateCTM(GfxState *state, double m11, double m12,
85                         double m21, double m22, double m31, double m32);
86  virtual void updateLineDash(GfxState *state);
87  virtual void updateFlatness(GfxState *state);
88  virtual void updateLineJoin(GfxState *state);
89  virtual void updateLineCap(GfxState *state);
90  virtual void updateMiterLimit(GfxState *state);
91  virtual void updateLineWidth(GfxState *state);
92  virtual void updateFillColor(GfxState *state);
93  virtual void updateStrokeColor(GfxState *state);
94  virtual void updateBlendMode(GfxState *state);
95  virtual void updateFillOpacity(GfxState *state);
96  virtual void updateStrokeOpacity(GfxState *state);
97
98  //----- update text state
99  virtual void updateFont(GfxState *state);
100
101  //----- path painting
102  virtual void stroke(GfxState *state);
103  virtual void fill(GfxState *state);
104  virtual void eoFill(GfxState *state);
105
106  //----- path clipping
107  virtual void clip(GfxState *state);
108  virtual void eoClip(GfxState *state);
109
110  //----- text drawing
111  virtual void drawChar(GfxState *state, double x, double y,
112                        double dx, double dy,
113                        double originX, double originY,
114                        CharCode code, int nBytes, Unicode *u, int uLen);
115  virtual GBool beginType3Char(GfxState *state, double x, double y,
116                               double dx, double dy,
117                               CharCode code, Unicode *u, int uLen);
118  virtual void endType3Char(GfxState *state);
119  virtual void endTextObject(GfxState *state);
120
121  //----- image drawing
122  virtual void drawImageMask(GfxState *state, Object *ref, Stream *str,
123                             int width, int height, GBool invert,
124                             GBool inlineImg);
125  virtual void drawImage(GfxState *state, Object *ref, Stream *str,
126                         int width, int height, GfxImageColorMap *colorMap,
127                         int *maskColors, GBool inlineImg);
128  virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str,
129                               int width, int height,
130                               GfxImageColorMap *colorMap,
131                               Stream *maskStr, int maskWidth, int maskHeight,
132                               GBool maskInvert);
133  virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
134                                   int width, int height,
135                                   GfxImageColorMap *colorMap,
136                                   Stream *maskStr,
137                                   int maskWidth, int maskHeight,
138                                   GfxImageColorMap *maskColorMap);
139
140  //----- Type 3 font operators
141  virtual void type3D0(GfxState *state, double wx, double wy);
142  virtual void type3D1(GfxState *state, double wx, double wy,
143                       double llx, double lly, double urx, double ury);
144
145  //----- special access
146
147  // Called to indicate that a new PDF document has been loaded.
148  void startDoc(XRef *xrefA);
149 
150  void setPaperColor(SplashColorPtr paperColorA);
151
152  GBool isReverseVideo() { return reverseVideo; }
153  void setReverseVideo(GBool reverseVideoA) { reverseVideo = reverseVideoA; }
154
155  // Get the bitmap and its size.
156  SplashBitmap *getBitmap() { return bitmap; }
157  int getBitmapWidth();
158  int getBitmapHeight();
159
160  // Returns the last rasterized bitmap, transferring ownership to the
161  // caller.
162  SplashBitmap *takeBitmap();
163
164  // Get the Splash object.
165  Splash *getSplash() { return splash; }
166
167  // Get the modified region.
168  void getModRegion(int *xMin, int *yMin, int *xMax, int *yMax);
169
170  // Clear the modified region.
171  void clearModRegion();
172
173  // Set the Splash fill color.
174  void setFillColor(int r, int g, int b);
175
176  SplashFont *getCurrentFont() { return font; }
177
178private:
179
180#if SPLASH_CMYK
181  SplashPattern *getColor(GfxGray gray, GfxRGB *rgb, GfxCMYK *cmyk);
182#else
183  SplashPattern *getColor(GfxGray gray, GfxRGB *rgb);
184#endif
185  SplashPath *convertPath(GfxState *state, GfxPath *path);
186  void drawType3Glyph(T3FontCache *t3Font,
187                      T3FontCacheTag *tag, Guchar *data,
188                      double x, double y);
189  static GBool imageMaskSrc(void *data, SplashColorPtr line);
190  static GBool imageSrc(void *data, SplashColorPtr line);
191  static GBool alphaImageSrc(void *data, SplashColorPtr line);
192  static GBool maskedImageSrc(void *data, SplashColorPtr line);
193
194  SplashColorMode colorMode;
195  int bitmapRowPad;
196  GBool bitmapTopDown;
197  GBool allowAntialias;
198  GBool reverseVideo;           // reverse video mode
199  SplashColor paperColor;       // paper color
200
201  XRef *xref;                   // xref table for current document
202
203  SplashBitmap *bitmap;
204  Splash *splash;
205  SplashFontEngine *fontEngine;
206
207  T3FontCache *                 // Type 3 font cache
208    t3FontCache[splashOutT3FontCacheSize];
209  int nT3Fonts;                 // number of valid entries in t3FontCache
210  T3GlyphStack *t3GlyphStack;   // Type 3 glyph context stack
211
212  SplashFont *font;             // current font
213  GBool needFontUpdate;         // set when the font needs to be updated
214  SplashPath *textClipPath;     // clipping path built with text object
215};
216
217#endif
Note: See TracBrowser for help on using the repository browser.