//----------------------------------------------------------------------------- // Name: Glyphs.cpp // // Desc: Functions and global variables for keeping track of font glyphs // // Hist: 09.06.02 - Revised Fontmaker sample // // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #ifndef GLYPHS_H #define GLYPHS_H //----------------------------------------------------------------------------- // Name: struct GLYPH_ATTR // Desc: A structure to hold attributes for one glpyh. The left, right, etc. // values are texture coordinate offsets into the resulting texture image // (which ends up in the .tga file). The offset, width, etc. values are // spacing information, used when rendering the font. //----------------------------------------------------------------------------- struct FILE_GLYPH_ATTR { FLOAT fLeft, fTop, fRight, fBottom; }; struct GLYPH_ATTR : public FILE_GLYPH_ATTR { int a, b, c; int x, y, w, h; }; //----------------------------------------------------------------------------- // Name: class CTextureFont // Desc: A class to hold all information about a texture-based font //----------------------------------------------------------------------------- class CTextureFont { public: // current ttf font LOGFONT m_LogFont; HFONT m_hFont; BOOL m_bAntialiasEffect; BOOL m_bShadowEffect; BOOL m_bOutlineEffect; int m_nBlur; int m_nScanlines; // Glyph info BYTE* m_ValidGlyphs; WCHAR m_cMaxGlyph; WORD* m_TranslatorTable; BOOL m_bIncludeNullCharacter; DWORD m_dwNumGlyphs; GLYPH_ATTR* m_pGlyphs; // Texture info DWORD m_dwTextureWidth; DWORD m_dwTextureHeight; DWORD* m_pBits; CHAR m_strFontName[MAX_PATH]; // current custom font const char *m_pCustomFilename; unsigned char m_customGlyphs[256]; char *m_pCustomGlyphFiles[256]; int m_maxCustomCharHeight; public: HRESULT DeleteGlyph( WORD wGlyph ); HRESULT InsertGlyph( WORD wGlyph ); HRESULT ExtractValidGlyphsFromRange( WORD wStartGlyph, WORD wEndGlyph ); HRESULT ExtractValidGlyphsFromFile( const CHAR* strFileName ); HRESULT BuildTranslatorTable(); HRESULT CalculateAndRenderGlyphs(); HRESULT ReadCustomFontFile( CHAR* strFileName ); HRESULT ReadFontInfoFile( CHAR* strFileName ); HRESULT WriteFontInfoFile( CHAR* strFileName ); HRESULT WriteFontImageFile( CHAR* strFileName, bool bAdditiveMode, bool bCustomFont ); VOID ClearFont(); VOID DestroyObjects(); CTextureFont(); ~CTextureFont(); private: GLYPH_ATTR* RenderCustomGlyphs( HBITMAP hBitmap ); GLYPH_ATTR* RenderTTFGlyphs( HFONT hFont, HBITMAP hBitmap, DWORD dwTextureWidth, DWORD dwTextureHeight, BOOL bOutlineEffect, BOOL bShadowEffect, int nScanlineEffect, int nBlurEffect, BOOL bAntialias, BYTE* ValidGlyphs, DWORD dwNumGlyphs ); }; #endif // GLYPHS_H