X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=pdf%2Fxpdf%2FXOutputDev.h;h=7a6544dd6fd97aa447862725407972c3b6dc13d9;hb=884f739665dc56e66f51e104350f2affd33f2dd8;hp=c0bcfd20d118e90661e636dc178f4247a5980cce;hpb=50e9d31c05e9ca11ad43cc570556094782c1b956;p=evince.git diff --git a/pdf/xpdf/XOutputDev.h b/pdf/xpdf/XOutputDev.h index c0bcfd20..7a6544dd 100644 --- a/pdf/xpdf/XOutputDev.h +++ b/pdf/xpdf/XOutputDev.h @@ -2,41 +2,68 @@ // // XOutputDev.h // -// Copyright 1996 Derek B. Noonburg +// Copyright 1996-2003 Glyph & Cog, LLC // //======================================================================== #ifndef XOUTPUTDEV_H #define XOUTPUTDEV_H -#ifdef __GNUC__ +#include + +#ifdef USE_GCC_PRAGMAS #pragma interface #endif #include #include #include -#if HAVE_T1LIB_H -#include -#include -#endif #include "config.h" +#include "Object.h" +#include "CharTypes.h" +#include "GlobalParams.h" #include "OutputDev.h" class GString; -class GfxColor; +class GList; +struct GfxRGB; class GfxFont; class GfxSubpath; class TextPage; -struct RGBColor; -class FontEncoding; class XOutputFontCache; +struct T3FontCacheTag; +class T3FontCache; +struct T3GlyphStack; +class XOutputDev; +class Link; +class Catalog; +class DisplayFontParam; +class UnicodeMap; +class CharCodeToUnicode; + +#if HAVE_T1LIB_H +class T1FontEngine; +class T1FontFile; +class T1Font; +#endif + +#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) +class FTFontEngine; +class FTFontFile; +class FTFont; +#endif + +#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) +class TTFontEngine; +class TTFontFile; +class TTFont; +#endif //------------------------------------------------------------------------ // Constants //------------------------------------------------------------------------ -#define maxRGBCube 8 // max size of RGB color cube +#define maxRGBCube 7 // max size of RGB color cube #define numTmpPoints 256 // number of XPoints in temporary array #define numTmpSubpaths 16 // number of elements in temporary arrays @@ -51,54 +78,6 @@ struct BoundingRect { short yMin, yMax; // min/max y values }; -struct RGBColor { - double r, g, b; -}; - -//------------------------------------------------------------------------ -// Parameters -//------------------------------------------------------------------------ - -// Install a private colormap. -extern GBool installCmap; - -// Size of RGB color cube. -extern int rgbCubeSize; - -#if HAVE_T1LIB_H -// Type of t1lib font rendering to use: -// "none" -- don't use t1lib -// "plain" -- t1lib, without anti-aliasing -// "low" -- t1lib, with low-level anti-aliasing -// "high" -- t1lib, with high-level anti-aliasing -extern GString *t1libControl; -#endif - -// If any of these are set, xpdf will use t1lib to render those font(s) -// instead of using the X server font(s). -extern GString *t1Courier; -extern GString *t1CourierBold; -extern GString *t1CourierBoldOblique; -extern GString *t1CourierOblique; -extern GString *t1Helvetica; -extern GString *t1HelveticaBold; -extern GString *t1HelveticaBoldOblique; -extern GString *t1HelveticaOblique; -extern GString *t1Symbol; -extern GString *t1TimesBold; -extern GString *t1TimesBoldItalic; -extern GString *t1TimesItalic; -extern GString *t1TimesRoman; -extern GString *t1ZapfDingbats; - -// Use the EUC-JP encoding. -extern GBool useEUCJP; - -#if JAPANESE_SUPPORT -// X font name pattern to use for Japanese text. -extern GString *japan12Font; -#endif - //------------------------------------------------------------------------ // XOutputFont //------------------------------------------------------------------------ @@ -106,16 +85,19 @@ extern GString *japan12Font; class XOutputFont { public: - XOutputFont(GfxFont *gfxFont, double m11, double m12, - double m21, double m22, Display *display, - XOutputFontCache *cache); + XOutputFont(Ref *idA, double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA, + double m11A, double m12A, double m21A, double m22A, + Display *displayA, XOutputDev *xOutA); virtual ~XOutputFont(); // Does this font match the ID and transform? - GBool matches(Ref id1, double m11, double m12, double m21, double m22) - { return id.num == id1.num && id.gen == id1.gen && - m11 == tm11 && m12 == tm12 && m21 == tm21 && m22 == tm22; } + GBool matches(Ref *idA, double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA) + { return id.num == idA->num && id.gen == idA->gen && + m11Orig == m11OrigA && m12Orig == m12OrigA && + m21Orig == m21OrigA && m22Orig == m22OrigA; } // Was font created successfully? virtual GBool isOk() = 0; @@ -123,21 +105,29 @@ public: // Update with this font. virtual void updateGC(GC gc) = 0; - // Draw character at ,. - virtual void drawChar(GfxState *state, Pixmap pixmap, GC gc, - double x, double y, int c) = 0; + // Draw character / at , (in device space). + virtual void drawChar(GfxState *state, Pixmap pixmap, int w, int h, + GC gc, GfxRGB *rgb, + double x, double y, double dx, double dy, + CharCode c, Unicode *u, int uLen) = 0; - // Does this font use hex char codes? - GBool isHex() { return hex; } + // Returns true if this XOutputFont subclass provides the + // getCharPath function. + virtual GBool hasGetCharPath() { return gFalse; } + + // Add the character outline for / to the current path. + virtual void getCharPath(GfxState *state, + CharCode c, Unicode *u, int ulen); protected: Ref id; // font ID - double tm11, tm12, // original transform matrix - tm21, tm22; + double m11Orig, m12Orig, // original transform matrix + m21Orig, m22Orig; + double m11, m12, m21, m22; // actual transform matrix (possibly + // modified for font substitution) Display *display; // X display - GBool hex; // subsetted font with hex char codes - // (this flag is used for text output) + XOutputDev *xOut; }; #if HAVE_T1LIB_H @@ -148,11 +138,12 @@ protected: class XOutputT1Font: public XOutputFont { public: - XOutputT1Font(GfxFont *gfxFont, GString *pdfBaseFont, - double m11, double m12, double m21, double m22, - double size, double ntm11, double ntm12, - double ntm21, double ntm22, - Display *display, XOutputFontCache *cache); + XOutputT1Font(Ref *idA, T1FontFile *fontFileA, + double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA, + double m11A, double m12A, + double m21A, double m22A, + Display *displayA, XOutputDev *xOutA); virtual ~XOutputT1Font(); @@ -162,33 +153,43 @@ public: // Update with this font. virtual void updateGC(GC gc); - // Draw character at ,. - virtual void drawChar(GfxState *state, Pixmap pixmap, GC gc, - double x, double y, int c); + // Draw character / at ,. + virtual void drawChar(GfxState *state, Pixmap pixmap, int w, int h, + GC gc, GfxRGB *rgb, + double x, double y, double dx, double dy, + CharCode c, Unicode *u, int uLen); + + // Returns true if this XOutputFont subclass provides the + // getCharPath function. + virtual GBool hasGetCharPath() { return gTrue; } + + // Add the character outline for / to the current path. + virtual void getCharPath(GfxState *state, + CharCode c, Unicode *u, int ulen); private: - float size; // font size - int t1ID; // t1lib font ID - GBool t1libAA; // true for anti-aliased fonts + T1FontFile *fontFile; + T1Font *font; }; -#endif +#endif // HAVE_T1LIB_H +#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) //------------------------------------------------------------------------ -// XOutputServerFont +// XOutputFTFont //------------------------------------------------------------------------ -class XOutputServerFont: public XOutputFont { +class XOutputFTFont: public XOutputFont { public: - XOutputServerFont(GfxFont *gfxFont, char *fontNameFmt, - FontEncoding *encoding, - double m11, double m12, double m21, double m22, - double size, double ntm11, double ntm12, - double ntm21, double ntm22, - Display *display, XOutputFontCache *cache); + XOutputFTFont(Ref *idA, FTFontFile *fontFileA, + double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA, + double m11A, double m12A, + double m21A, double m22A, + Display *displayA, XOutputDev *xOutA); - virtual ~XOutputServerFont(); + virtual ~XOutputFTFont(); // Was font created successfully? virtual GBool isOk(); @@ -196,15 +197,130 @@ public: // Update with this font. virtual void updateGC(GC gc); - // Draw character at ,. - virtual void drawChar(GfxState *state, Pixmap pixmap, GC gc, - double x, double y, int c); + // Draw character / at ,. + virtual void drawChar(GfxState *state, Pixmap pixmap, int w, int h, + GC gc, GfxRGB *rgb, + double x, double y, double dx, double dy, + CharCode c, Unicode *u, int uLen); + + // Returns true if this XOutputFont subclass provides the + // getCharPath function. + virtual GBool hasGetCharPath() { return gTrue; } + + // Add the character outline for / to the current path. + virtual void getCharPath(GfxState *state, + CharCode c, Unicode *u, int ulen); + +private: + + FTFontFile *fontFile; + FTFont *font; +}; +#endif // FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) + +#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) +//------------------------------------------------------------------------ +// XOutputTTFont +//------------------------------------------------------------------------ + +class XOutputTTFont: public XOutputFont { +public: + + XOutputTTFont(Ref *idA, TTFontFile *fontFileA, + double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA, + double m11A, double m12A, + double m21A, double m22A, + Display *displayA, XOutputDev *xOutA); + + virtual ~XOutputTTFont(); + + // Was font created successfully? + virtual GBool isOk(); + + // Update with this font. + virtual void updateGC(GC gc); + + // Draw character / at ,. + virtual void drawChar(GfxState *state, Pixmap pixmap, int w, int h, + GC gc, GfxRGB *rgb, + double x, double y, double dx, double dy, + CharCode c, Unicode *u, int uLen); + +private: + + TTFontFile *fontFile; + TTFont *font; +}; +#endif // !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) + +//------------------------------------------------------------------------ +// XOutputServer8BitFont +//------------------------------------------------------------------------ + +class XOutputServer8BitFont: public XOutputFont { +public: + + XOutputServer8BitFont(Ref *idA, GString *xlfdFmt, + UnicodeMap *xUMapA, CharCodeToUnicode *fontUMap, + double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA, + double m11A, double m12A, double m21A, double m22A, + Display *displayA, XOutputDev *xOutA); + + virtual ~XOutputServer8BitFont(); + + // Was font created successfully? + virtual GBool isOk(); + + // Update with this font. + virtual void updateGC(GC gc); + + // Draw character / at ,. + virtual void drawChar(GfxState *state, Pixmap pixmap, int w, int h, + GC gc, GfxRGB *rgb, + double x, double y, double dx, double dy, + CharCode c, Unicode *u, int uLen); + +private: + + XFontStruct *xFont; // the X font + Gushort map[256]; // forward map (char code -> X font code) + UnicodeMap *xUMap; +}; + +//------------------------------------------------------------------------ +// XOutputServer16BitFont +//------------------------------------------------------------------------ + +class XOutputServer16BitFont: public XOutputFont { +public: + + XOutputServer16BitFont(Ref *idA, GString *xlfdFmt, + UnicodeMap *xUMapA, CharCodeToUnicode *fontUMap, + double m11OrigA, double m12OrigA, + double m21OrigA, double m22OrigA, + double m11A, double m12A, double m21A, double m22A, + Display *displayA, XOutputDev *xOutA); + + virtual ~XOutputServer16BitFont(); + + // Was font created successfully? + virtual GBool isOk(); + + // Update with this font. + virtual void updateGC(GC gc); + + // Draw character / at ,. + virtual void drawChar(GfxState *state, Pixmap pixmap, int w, int h, + GC gc, GfxRGB *rgb, + double x, double y, double dx, double dy, + CharCode c, Unicode *u, int uLen); private: XFontStruct *xFont; // the X font - Gushort map[256]; // forward map (PDF code -> font code) - Guchar revMap[256]; // reverese map (font code -> PDF code) + UnicodeMap *xUMap; }; //------------------------------------------------------------------------ @@ -212,11 +328,47 @@ private: //------------------------------------------------------------------------ #if HAVE_T1LIB_H -struct XOutputT1BaseFont { +class XOutputT1FontFile { +public: + XOutputT1FontFile(int numA, int genA, GBool substA, + T1FontFile *fontFileA, GString *tmpFileNameA) + { num = numA; gen = genA; subst = substA; + fontFile = fontFileA; tmpFileName = tmpFileNameA; } + ~XOutputT1FontFile(); + int num, gen; + GBool subst; + T1FontFile *fontFile; + GString *tmpFileName; +}; +#endif + +#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) +class XOutputFTFontFile { +public: + XOutputFTFontFile(int numA, int genA, GBool substA, + FTFontFile *fontFileA, GString *tmpFileNameA) + { num = numA; gen = genA; subst = substA; + fontFile = fontFileA; tmpFileName = tmpFileNameA; } + ~XOutputFTFontFile(); + int num, gen; + GBool subst; + FTFontFile *fontFile; + GString *tmpFileName; +}; +#endif + +#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) +class XOutputTTFontFile { +public: + XOutputTTFontFile(int numA, int genA, GBool substA, + TTFontFile *fontFileA, GString *tmpFileNameA) + { num = numA; gen = genA; subst = substA; + fontFile = fontFileA; tmpFileName = tmpFileNameA; } + ~XOutputTTFontFile(); int num, gen; - int t1ID; - char **enc; - char *encStr; + GBool subst; + TTFontFile *fontFile; + GString *tmpFileName; }; #endif @@ -224,50 +376,101 @@ class XOutputFontCache { public: // Constructor. - XOutputFontCache(Display *display); + XOutputFontCache(Display *displayA, Guint depthA, + XOutputDev *xOutA, + FontRastControl t1libControlA, + FontRastControl freetypeControlA); // Destructor. ~XOutputFontCache(); // Initialize (or re-initialize) the font cache for a new document. - void startDoc(int screenNum, Guint depth, - Colormap colormap); + void startDoc(int screenNum, Visual *visual, + Colormap colormap, GBool trueColor, + int rMul, int gMul, int bMul, + int rShift, int gShift, int bShift, + Gulong *colors, int numColors); // Get a font. This creates a new font if necessary. - XOutputFont *getFont(GfxFont *gfxFont, double m11, double m12, + XOutputFont *getFont(XRef *xref, GfxFont *gfxFont, double m11, double m12, double m21, double m22); -#if HAVE_T1LIB_H - // Get a t1lib font. - int getT1Font(GfxFont *gfxFont, GString *pdfBaseFont); - - // Use anti-aliased Type 1 fonts? - GBool getT1libAA() { return t1libAA; } -#endif - private: void delFonts(); void clear(); + XOutputFont *tryGetFont(XRef *xref, DisplayFontParam *dfp, GfxFont *gfxFont, + double m11Orig, double m12Orig, + double m21Orig, double m22Orig, + double m11, double m12, double m21, double m22, + GBool subst); +#if HAVE_T1LIB_H + XOutputFont *tryGetT1Font(XRef *xref, GfxFont *gfxFont, + double m11, double m12, double m21, double m22); + XOutputFont *tryGetT1FontFromFile(XRef *xref, GString *fileName, + GBool deleteFile, GfxFont *gfxFont, + double m11Orig, double m12Orig, + double m21Orig, double m22Orig, + double m11, double m12, + double m21, double m22, GBool subst); +#endif +#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) + XOutputFont *tryGetFTFont(XRef *xref, GfxFont *gfxFont, + double m11, double m12, double m21, double m22); + XOutputFont *tryGetFTFontFromFile(XRef *xref, GString *fileName, + GBool deleteFile, GfxFont *gfxFont, + double m11Orig, double m12Orig, + double m21Orig, double m22Orig, + double m11, double m12, + double m21, double m22, + GBool embedded, GBool subst); +#endif +#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) + XOutputFont *tryGetTTFont(XRef *xref, GfxFont *gfxFont, + double m11, double m12, double m21, double m22); + XOutputFont *tryGetTTFontFromFile(XRef *xref, GString *fileName, + GBool deleteFile, GfxFont *gfxFont, + double m11Orig, double m12Orig, + double m21Orig, double m22Orig, + double m11, double m12, + double m21, double m22, GBool subst); +#endif + XOutputFont *tryGetServerFont(GString *xlfd, GString *encodingName, + GfxFont *gfxFont, + double m11Orig, double m12Orig, + double m21Orig, double m22Orig, + double m11, double m12, + double m21, double m22); Display *display; // X display pointer + XOutputDev *xOut; + Guint depth; // pixmap depth + + XOutputFont * + fonts[xOutFontCacheSize]; + int nFonts; #if HAVE_T1LIB_H - GBool useT1lib; // if false, t1lib is not used at all - GBool t1libAA; // true for anti-aliased fonts - GBool t1libAAHigh; // low or high-level anti-aliasing - GBool t1Init; // set when t1lib has been initialized - XOutputT1Font * // Type 1 fonts in reverse-LRU order - t1Fonts[t1FontCacheSize]; - int nT1Fonts; // number of valid entries in t1Fonts[] - XOutputT1BaseFont * // list of t1lib base fonts - t1BaseFonts; - int t1BaseFontsSize; // size of t1BaseFonts array + FontRastControl t1libControl; // t1lib settings + T1FontEngine *t1Engine; // Type 1 font engine + GList *t1FontFiles; // list of Type 1 font files + // [XOutputT1FontFile] #endif - XOutputServerFont * // X server fonts in reverse-LRU order - serverFonts[serverFontCacheSize]; - int nServerFonts; // number of valid entries in serverFonts[] +#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H + FontRastControl // FreeType settings + freetypeControl; +#endif +#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) + FTFontEngine *ftEngine; // FreeType font engine + GList *ftFontFiles; // list of FreeType font files + // [XOutputFTFontFile] +#endif +#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H) + TTFontEngine *ttEngine; // TrueType font engine + GList *ttFontFiles; // list of TrueType font files + // [XOutputTTFontFile] +#endif }; //------------------------------------------------------------------------ @@ -289,8 +492,11 @@ class XOutputDev: public OutputDev { public: // Constructor. - XOutputDev(Display *display1, Pixmap pixmap1, Guint depth1, - Colormap colormap, unsigned long paperColor); + XOutputDev(Display *displayA, int screenNumA, + Visual *visualA, Colormap colormapA, + GBool reverseVideoA, unsigned long paperColorA, + GBool installCmap, int rgbCubeSize, + int forceDepth = 0); // Destructor. virtual ~XOutputDev(); @@ -304,6 +510,10 @@ public: // Does this device use drawChar() or drawString()? virtual GBool useDrawChar() { return gTrue; } + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gTrue; } + //----- initialization and control // Start a page. @@ -313,8 +523,7 @@ public: virtual void endPage(); //----- link borders - virtual void drawLinkBorder(double x1, double y1, double x2, double y2, - double w); + virtual void drawLink(Link *link, Catalog *catalog); //----- save/restore graphics state virtual void saveState(GfxState *state); @@ -349,47 +558,66 @@ public: virtual void beginString(GfxState *state, GString *s); virtual void endString(GfxState *state); virtual void drawChar(GfxState *state, double x, double y, - double dx, double dy, Guchar c); - virtual void drawChar16(GfxState *state, double x, double y, - double dx, double dy, int c); + double dx, double dy, + double originX, double originY, + CharCode code, Unicode *u, int uLen); + virtual GBool beginType3Char(GfxState *state, + CharCode code, Unicode *u, int uLen); + virtual void endType3Char(GfxState *state); //----- image drawing - virtual void drawImageMask(GfxState *state, Stream *str, + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg); - virtual void drawImage(GfxState *state, Stream *str, int width, - int height, GfxImageColorMap *colorMap, - GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + int *maskColors, GBool inlineImg); + + //----- Type 3 font operators + virtual void type3D0(GfxState *state, double wx, double wy); + virtual void type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury); //----- special access // Called to indicate that a new PDF document has been loaded. - void startDoc(); + void startDoc(XRef *xrefA); // Find a string. If is true, starts looking at ,; // otherwise starts looking at top of page. If is true, // stops looking at ,; otherwise stops looking at bottom // of page. If found, sets the text bounding rectange and returns // true; otherwise returns false. - GBool findText(char *s, GBool top, GBool bottom, + GBool findText(Unicode *s, int len, GBool top, GBool bottom, int *xMin, int *yMin, int *xMax, int *yMax); // Get the text which is inside the specified rectangle. GString *getText(int xMin, int yMin, int xMax, int yMax); -protected: + GBool isReverseVideo() { return reverseVideo; } // Update pixmap ID after a page change. - void setPixmap(Pixmap pixmap1, int pixmapW1, int pixmapH1) - { pixmap = pixmap1; pixmapW = pixmapW1; pixmapH = pixmapH1; } + void setPixmap(Pixmap pixmapA, int pixmapWA, int pixmapHA) + { pixmap = pixmapA; pixmapW = pixmapWA; pixmapH = pixmapHA; } + + // Get the off-screen pixmap, its size, various display info. + Pixmap getPixmap() { return pixmap; } + int getPixmapWidth() { return pixmapW; } + int getPixmapHeight() { return pixmapH; } + Display *getDisplay() { return display; } + Guint getDepth() { return depth; } + + Gulong findColor(GfxRGB *rgb); private: + XRef *xref; // the xref table for this PDF file Display *display; // X display pointer int screenNum; // X screen number Pixmap pixmap; // pixmap to draw into int pixmapW, pixmapH; // size of pixmap Guint depth; // pixmap depth + Visual *visual; // X visual Colormap colormap; // X colormap int flatness; // line flatness GC paperGC; // GC for background @@ -401,7 +629,10 @@ private: int rShift, gShift, bShift; // RGB shifts (for TrueColor) Gulong // color cube colors[maxRGBCube * maxRGBCube * maxRGBCube]; + unsigned long paperColor; // paper color (pixel value) int numColors; // size of color cube + double redMap[256]; // map pixel (from color cube) to red value + GBool reverseVideo; // reverse video mode XPoint // temporary points array tmpPoints[numTmpPoints]; int // temporary arrays for fill/clip @@ -410,8 +641,14 @@ private: tmpRects[numTmpSubpaths]; GfxFont *gfxFont; // current PDF font XOutputFont *font; // current font + GBool needFontUpdate; // set when the font needs to be updated XOutputFontCache *fontCache; // font cache + T3FontCache * // Type 3 font cache + t3FontCache[xOutT3FontCacheSize]; + int nT3Fonts; // number of valid entries in t3FontCache + T3GlyphStack *t3GlyphStack; // Type 3 glyph context stack XOutputState *save; // stack of saved states + TextPage *text; // text from the current page void updateLineAttrs(GfxState *state, GBool updateDash); @@ -425,8 +662,10 @@ private: double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); void addPoint(XPoint **points, int *size, int *k, int x, int y); - Gulong findColor(GfxColor *color); - Gulong findColor(RGBColor *x, RGBColor *err); + void drawType3Glyph(T3FontCache *t3Font, + T3FontCacheTag *tag, Guchar *data, + double x, double y, GfxRGB *color); + Gulong findColor(GfxRGB *x, GfxRGB *err); }; #endif