@ -1932,9 +1932,8 @@ Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Co
{
int length = strlen ( text ) ;
int index ; / / Index position in sprite font
int letter = 0 ; / / Current character
int positionX = 0 ; / / Image drawing position
int textOffsetX = 0 ; / / Image drawing position X
int textOffsetY = 0 ; / / Offset between lines ( on line break ' \n ' )
/ / NOTE : Text image is generated at font base size , later scaled to desired font size
Vector2 imSize = MeasureTextEx ( font , text , ( float ) font . baseSize , spacing ) ;
@ -1944,29 +1943,35 @@ Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Co
for ( int i = 0 ; i < length ; i + + )
{
int next = 0 ;
letter = GetNextCodepoint ( & text [ i ] , & next ) ;
index = GetGlyphIndex ( font , letter ) ;
/ / Get next codepoint from byte string and glyph index in font
int codepointByteCount = 0 ;
int codepoint = GetNextCodepoint ( & text [ i ] , & codepointByteCount ) ;
int index = GetGlyphIndex ( font , codepoint ) ;
if ( letter = = 0x3f ) next = 1 ;
i + = ( next - 1 ) ;
/ / NOTE : Normally we exit the decoding sequence as soon as a bad byte is found ( and return 0x3f )
/ / but we need to draw all of the bad bytes using the ' ? ' symbol moving one byte
if ( codepoint = = 0x3f ) codepointByteCount = 1 ;
if ( letter = = ' \n ' )
if ( codepoint = = ' \n ' )
{
/ / TODO : Support line break
/ / NOTE : Fixed line spacing of 1.5 line - height
/ / TODO : Support custom line spacing defined by user
textOffsetY + = font . baseSize + font . baseSize / 2 ) ;
textOffsetX = 0.0f ;
}
else
{
if ( letter ! = ' ' )
{
if ( p">( codepoint lass="o">! = ' ' ) & & ( cod epoin t ! = ' \t ' ) )
{
ImageDraw ( & imText , font . chars [ index ] . image , ( Rectangle ) { 0 , 0 , font . chars [ index ] . image . width , font . chars [ index ] . image . height } ,
( Rectangle ) { ( float ) ( positionX + font . chars [ index ] . offsetX ) , ( float ) font . chars [ index ] . offsetY ,
font . chars [ index ] . image . width , font . chars [ index ] . image . height } , tint ) ;
Rectangle rec = { textOffsetX + font . chars [ index ] . offsetX , textOffsetY + font . chars [ index ] . offsetY , font . recs [ index ] . width , font . recs [ index ] . height } ;
ImageDraw ( & imText , font . chars [ index ] . image , ( Rectangle ) { 0 , 0 , font . chars [ index ] . image . width , font . chars [ index ] . image . height } , rec , tint ) ;
}
if ( font . chars [ index ] . advanceX = = 0 ) position X + = ( int ) ( font . recs [ index ] . width + spacing ) ;
else position X + = font . chars [ index ] . advanceX + ( int ) spacing ;
if ( font . chars [ index ] . advanceX = = 0 ) textOffset X + = ( int ) ( font . recs [ index ] . width + spacing ) ;
else textOffset X + = font . chars [ index ] . advanceX + ( int ) spacing ;
}
i + = ( codepointByteCount - 1 ) ; / / Move text bytes counter to next codepoint
}
/ / Scale image depending on text size