1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
#ifndef __FTCharmap__
#define __FTCharmap__
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include "FTCharToGlyphIndexMap.h"
#include "FTGL.h"
/**
* FTCharmap takes care of specifying the encoding for a font and mapping
* character codes to glyph indices.
*
* It doesn't preprocess all indices, only on an as needed basis. This may
* seem like a performance penalty but it is quicker than using the 'raw'
* freetype calls and will save significant amounts of memory when dealing
* with unicode encoding
*
* @see "Freetype 2 Documentation"
*
*/
class FTFace;
class FTGL_EXPORT FTCharmap
{
public:
/**
* Constructor
*/
FTCharmap( FTFace* face);
/**
* Destructor
*/
virtual ~FTCharmap();
/**
* Queries for the current character map code.
*
* @return The current character map code.
*/
FT_Encoding Encoding() const { return ftEncoding;}
/**
* Sets the character map for the face.
* Valid encodings as at Freetype 2.0.4
* ft_encoding_none
* ft_encoding_symbol
* ft_encoding_unicode
* ft_encoding_latin_2
* ft_encoding_sjis
* ft_encoding_gb2312
* ft_encoding_big5
* ft_encoding_wansung
* ft_encoding_johab
* ft_encoding_adobe_standard
* ft_encoding_adobe_expert
* ft_encoding_adobe_custom
* ft_encoding_apple_roman
*
* @param encoding the Freetype encoding symbol. See above.
* @return <code>true</code> if charmap was valid and set
* correctly. If the requested encoding is
* unavailable it will be set to ft_encoding_none.
*/
bool CharMap( FT_Encoding encoding);
/**
* Get the FTGlyphContainer index of the input character.
*
* @param characterCode The character code of the requested glyph in
* the current encoding eg apple roman.
* @return The FTGlyphContainer index for the character or zero
* if it wasn't found
*/
signed int GlyphListIndex( const unsigned int characterCode);
/**
* Get the font glyph index of the input character.
*
* @param characterCode The character code of the requested glyph in
* the current encoding eg apple roman.
* @return The glyph index for the character.
*/
signed int FontIndex( const unsigned int characterCode);
/**
* Set the FTGlyphContainer index of the character code.
*
* @param characterCode The character code of the requested glyph in
* the current encoding eg apple roman.
* @param containerIndex The index into the FTGlyphContainer of the
* character code.
*/
void InsertIndex( const unsigned int characterCode, const unsigned int containerIndex);
/**
* Queries for errors.
*
* @return The current error code. Zero means no error.
*/
FT_Error Error() const { return err;}
private:
/**
* Current character map code.
*/
FT_Encoding ftEncoding;
/**
* The current Freetype face.
*/
const FT_Face ftFace;
/**
* A structure that maps glyph indices to character codes
*
* < character code, face glyph index>
*/
typedef FTCharToGlyphIndexMap CharacterMap;
CharacterMap charMap;
/**
* Current error code.
*/
FT_Error err;
};
#endif // __FTCharmap__