//======================================================================== // // SFont.h // // Base class for font rasterizers. // // Copyright 2001-2003 Glyph & Cog, LLC // //======================================================================== #ifndef SFONT_H #define SFONT_H #include #ifdef USE_GCC_PRAGMAS #pragma interface #endif #include #include #include "gtypes.h" #include "CharTypes.h" class GfxState; //------------------------------------------------------------------------ class SFontEngine { public: SFontEngine(Display *displayA, Visual *visualA, int depthA, Colormap colormapA); virtual ~SFontEngine(); // Use a TrueColor visual. Pixel values are computed as: // // (r << rShift) + (g << gShift) + (b << bShift) // // where r, g, and b are scaled to the ranges [0,rMax], [0,gMax], // and [0,bMax], respectively. virtual void useTrueColor(int rMaxA, int rShiftA, int gMaxA, int gShiftA, int bMaxA, int bShiftA); // Use an RGB color cube. is an array containing // ** pixel values in red,green,blue order, e.g., // for =2, there will be 8 entries: // // |--- colors[i] ---| // i red green blue // - ----- ----- ----- // 0 0000 0000 0000 // 1 0000 0000 ffff // 2 0000 ffff 0000 // 3 0000 ffff ffff // 4 ffff 0000 0000 // 5 ffff 0000 ffff // 6 ffff ffff 0000 // 7 ffff ffff ffff // // The array is not copied and must remain valid for the // lifetime of this SFont object. virtual void useColorCube(Gulong *colorsA, int nRGBA); protected: // Find the closest match to (,,). Gulong findColor(int r, int g, int b); //----- X parameters Display *display; Visual *visual; int depth; Colormap colormap; GBool trueColor; // true for TrueColor, false for RGB cube //----- TrueColor parameters int rMax, gMax, bMax; int rShift, gShift, bShift; //----- RGB color cube parameters Gulong *colors; int nRGB; }; //------------------------------------------------------------------------ class SFontFile { public: // A typical subclass will provide a constructor along the lines of: // // SomeFontFile(SomeFontEngine *engine, char *fontFileName); SFontFile(); virtual ~SFontFile(); private: }; //------------------------------------------------------------------------ class SFont { public: // A typical subclass will provide a constructor along the lines of: // // SomeFont(SomeFontFile *fontFile, double *m); // // where is a transform matrix consisting of four elements, // using the PostScript ordering conventions (without any // translation): // // [x' y'] = [x y] * [m0 m1] // [m2 m3] // // This is the level at which fonts are cached, and so the font // cannot be transformed after it is created. SFont(); virtual ~SFont(); // Draw a character / at , in color (,,). The // RGB values should each be in the range [0,65535]. Draws into // , clipped to the rectangle (0,0)-(-1,-1). Returns true // if the character was drawn successfully. virtual GBool drawChar(Drawable d, int w, int h, GC gc, int x, int y, int r, int g, int b, CharCode c, Unicode u) = 0; // Add the outline of the specified character to the current path by // calling state->moveTo, lineTo, and curveTo. Returns true if // successful. If this SFont subclass doesn't implement character // paths, returns false immediately without modifying the current // path. virtual GBool getCharPath(CharCode c, Unicode u, GfxState *state); protected: }; #endif