gfx_font.hh

Go to the documentation of this file.
00001 /*
00008  * LEGAL:   COPYRIGHT (C) 2004 JIM E. BROOKS
00009  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00010  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
00011  ******************************************************************************/
00012 
00013 #ifndef GFX_FONT_HH
00014 #define GFX_FONT_HH 1
00015 
00016 #include "gfx.hh"
00017 #include "gfx_rgba.hh"
00018 
00019 namespace gfx {
00020 
00030 
00032 enum eFontMode
00033 {
00034     eFontMode_NORMAL                = (0),
00035     // justification
00036     eFontMode_CENTER                = (1<<0),
00037     eFontMode_NE                    = (1<<1),
00038     eFontMode_SE                    = (1<<2),
00039     eFontMode_SW                    = (1<<3),
00040     eFontMode_NW                    = (1<<4),
00041     // highlight, background
00042     eFontMode_BG                    = (1<<5),
00043     eFontMode_HILITE                = (1<<6),
00044     // masks
00045     eFontMode_MASK_JUSTIFY_CORNER   = (eFontMode_NE|eFontMode_SE|eFontMode_SW|eFontMode_NW),
00046     eFontMode_MASK_RIGHT            = (eFontMode_NE|eFontMode_SE),
00047     eFontMode_MASK_LEFT             = (eFontMode_NW|eFontMode_SW),
00048 };
00049 // ------------------------------------------------
00050 
00054 class FontBase
00055 {
00056 
00057 public:
00058     enum eFontError
00059     {
00060         eFontError_NOT_READY    = (1<<0),
00061         eFontError_GFXSYS       = (1<<1),
00062         eFontError_NEWLINE      = (1<<2)
00063     };
00064 
00065                     FontBase( void ) { }
00066     virtual         ~FontBase() { }
00067 
00099     virtual void    Print( const string& text, fp x, fp y, eFontMode mode ) = 0;
00100     virtual void    Print( const string& text, fp x, fp y, eFontMode mode, const RGBA rgba ) = 0;
00101     virtual void    Print( const char* text, uint textLen, fp x, fp y, eFontMode mode ) = 0;
00102     virtual void    Print( const char* text, uint textLen, fp x, fp y, eFontMode mode, const RGBA rgba ) = 0;
00103     virtual void    SetZoom( fp z ) = 0;
00104 };
00105 
00109 class FontDesc
00110 {
00111 
00112 public:
00113     enum eFontSet { eFontSet_NORMAL, eFontSet_THIN };
00114     FontDesc( const string& name, eFontSet fontSet, int height,
00115               char start, int letters, bool antialias, fp zoom )
00116     :   mName(name),
00117         mData(fontSet == eFontSet_NORMAL ? msFont1Data : msFont2Data),
00118         mDataLen(fontSet == eFontSet_NORMAL ? msFont1DataLen : msFont2DataLen),
00119         mHeight(height),
00120         mStart(start),
00121         mLetters(letters),
00122         mAntialias(antialias),
00123         mZoom(zoom)
00124     {
00125     }
00126 
00127     ~FontDesc()
00128     {
00129         // NOP
00130     }
00131 
00132 private:
00133     string              mName;
00134     SafePtr<const uchar> mData;
00135     int                 mDataLen;
00136     int                 mHeight;
00137     char                mStart;
00138     int                 mLetters;
00139     bool                mAntialias;
00140     fp                  mZoom;
00141     // Font data compiled as an enormous char[] in gfx_font[1,2].cc.
00142     CLASS_CONST uchar   msFont1Data[];
00143     CLASS_CONST uint    msFont1DataLen;
00144     CLASS_CONST uchar   msFont2Data[];
00145     CLASS_CONST uint    msFont2DataLen;
00146  
00147 friend class Font;
00148 };
00149 
00150 } // namespace gfx
00151 
00152 #if GFXSYS_OPENGL
00153 #include "gfx_font_opengl.hh"
00154 #endif
00155 
00156 #endif // GFX_FONT_HH
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:10 2007