@ -1677,14 +1677,8 @@ void ImFont::BuildLookupTable()
IM_ASSERT ( Glyphs . Size < 32 * 1024 ) ;
IndexXAdvance . clear ( ) ;
IndexXAdvance . resize ( max_codepoint + 1 ) ;
IndexLookup . clear ( ) ;
IndexLookup . resize ( max_codepoint + 1 ) ;
for ( int i = 0 ; i < max_codepoint + 1 ; i + + )
{
IndexXAdvance [ i ] = - 1.0f ;
IndexLookup [ i ] = ( short ) - 1 ;
}
GrowIndex ( max_codepoint + 1 ) ;
for ( int i = 0 ; i < Glyphs . Size ; i + + )
{
int codepoint = ( int ) Glyphs [ i ] . Codepoint ;
@ -1720,6 +1714,36 @@ void ImFont::SetFallbackChar(ImWchar c)
BuildLookupTable ( ) ;
}
void ImFont : : GrowIndex ( int new_size )
{
IM_ASSERT ( IndexXAdvance . Size = = IndexLookup . Size ) ;
int old_size = IndexLookup . Size ;
if ( new_size < = old_size )
return ;
IndexXAdvance . resize ( new_size ) ;
IndexLookup . resize ( new_size ) ;
for ( int i = old_size ; i < new_size ; i + + )
{
IndexXAdvance [ i ] = - 1.0f ;
IndexLookup [ i ] = ( short ) - 1 ;
}
}
void ImFont : : AddRemapChar ( ImWchar dst , ImWchar src , bool overwrite_dst )
{
IM_ASSERT ( IndexLookup . Size > 0 ) ; // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function.
int index_size = IndexLookup . Size ;
if ( dst < index_size & & IndexLookup . Data [ dst ] = = - 1 & & ! overwrite_dst ) // 'dst' already exists
return ;
if ( src > = index_size & & dst > = index_size ) // both 'dst' and 'src' don't exist -> no-op
return ;
GrowIndex ( dst + 1 ) ;
IndexLookup [ dst ] = ( src < index_size ) ? IndexLookup . Data [ src ] : - 1 ;
IndexXAdvance [ dst ] = ( src < index_size ) ? IndexXAdvance . Data [ src ] : 1.0f ;
}
const ImFont : : Glyph * ImFont : : FindGlyph ( unsigned short c ) const
{
if ( c < IndexLookup . Size )