Edit

kc3-lang/ftgl/src/FTCharmap.cpp

Branch :

  • Show log

    Commit

  • Author : henry
    Date : 2001-10-30 02:51:30
    Hash : e6d42357
    Message : Fixed c_stor to ensure that a valid charmap is created

  • src/FTCharmap.cpp
  • #include	"FTCharmap.h"
    
    
    FTCharmap::FTCharmap( FT_Face face)
    :	ftFace( face),
    	err(0)
    {
    	// Check that the default is valid
    	if( !face->charmap)
    	{
    		FT_Set_Charmap( ftFace, ftFace->charmaps[0]);
    	}
    	
    	ftEncoding = face->charmap->encoding;
    }
    
    
    FTCharmap::~FTCharmap()
    {
    	charMap.clear();
    }
    
    
    bool FTCharmap::CharMap( FT_Encoding encoding)
    {
    	if( ftEncoding == encoding)
    	{
    		return true;
    	}
    	
    	err = FT_Select_Charmap( ftFace, encoding );
    	
    	if( !err)
    	{
    		ftEncoding = encoding;
    		charMap.clear();
    	}
    	
    	return !err;
    }
    
    
    bool FTCharmap::CharMap( FT_UShort platform, FT_UShort encoding)
    {
    	FT_CharMap  found = 0;
    	FT_CharMap  charmap;
     
    	for( int n = 0; n < ftFace->num_charmaps; n++ )
    	{
    		charmap = ftFace->charmaps[n];
    
    		if( charmap->platform_id == platform && charmap->encoding_id == encoding)
    		{
    			found = charmap;
    			break;
    		}
    	}
     
    	if( !found )
    	{
    		return false;
    	}
     
    	if( ftEncoding == found->encoding)
    	{
    		return true;
    	}
    	
    	/* now, select the charmap for the face object */
    	err = FT_Set_Charmap( ftFace, found );
    	
    	if( !err)
    	{
    		ftEncoding = found->encoding;
    		charMap.clear();
    	}
    	
    	return !err;
    }
    
    
    unsigned int FTCharmap::CharIndex( unsigned int index )
    {
    	CharacterMap::const_iterator result = charMap.find( index);
    		
    	if( result == charMap.end())
    	{
    		unsigned int glyph = FT_Get_Char_Index( ftFace, index);
    		charMap.insert( CharacterMap::value_type( index, glyph));
    		return glyph;
    	}
    	else
    	{
    		return result->second;
    	}
    
    }