@ -1701,7 +1701,7 @@ int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
}
// Based on stb_to_utf8() from github.com/nothings/stb/
static inline int ImTextCharToUtf8 ( char * buf , int buf_size , unsigned int c )
static inline int ImTextCharToUtf8 _inline ( char * buf , int buf_size , unsigned int c )
{
if ( c < 0x80 )
{
@ -1736,6 +1736,13 @@ static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c)
return 0 ;
}
const char * ImTextCharToUtf8 ( char out_buf [ 5 ] , unsigned int c )
{
int count = ImTextCharToUtf8_inline ( out_buf , 5 , c ) ;
out_buf [ count ] = 0 ;
return out_buf ;
}
// Not optimal but we very rarely use this function.
int ImTextCountUtf8BytesFromChar ( const char * in_text , const char * in_text_end )
{
@ -1752,20 +1759,20 @@ static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
return 3 ;
}
int ImTextStrToUtf8 ( char * buf, int buf_size, const ImWchar * in_text , const ImWchar * in_text_end )
int ImTextStrToUtf8 ( char * out_ buf, int out_ buf_size, const ImWchar * in_text , const ImWchar * in_text_end )
{
char * buf_ out = buf;
const char * buf_end = buf + buf_size;
while ( buf_ out < buf_end - 1 & & ( ! in_text_end | | in_text < in_text_end ) & & * in_text )
char * buf_ p = out_ buf;
const char * buf_end = out_ buf + out_ buf_size;
while ( buf_ p < buf_end - 1 & & ( ! in_text_end | | in_text < in_text_end ) & & * in_text )
{
unsigned int c = ( unsigned int ) ( * in_text + + ) ;
if ( c < 0x80 )
* buf_ out + + = ( char ) c ;
* buf_ p + + = ( char ) c ;
else
buf_ out + = ImTextCharToUtf8 ( buf_out , ( int ) ( buf_end - buf_out - 1 ) , c ) ;
buf_ p + = ImTextCharToUtf8_inline ( buf_p , ( int ) ( buf_end - buf_p - 1 ) , c ) ;
}
* buf_ out = 0 ;
return ( int ) ( buf_ out - buf) ;
* buf_ p = 0 ;
return ( int ) ( buf_ p - out_ buf) ;
}
int ImTextCountUtf8BytesFromStr ( const ImWchar * in_text , const ImWchar * in_text_end )
@ -11459,8 +11466,9 @@ void ImGui::DebugNodeFont(ImFont* font)
" You can also render at multiple sizes and select which one to use at runtime. \n \n "
" (Glimmer of hope: the atlas system will be rewritten in the future to make scaling more flexible.) " ) ;
Text ( " Ascent: %f, Descent: %f, Height: %f " , font - > Ascent , font - > Descent , font - > Ascent - font - > Descent ) ;
Text ( " Fallback character: '%c' (U+%04X) " , font - > FallbackChar , font - > FallbackChar ) ;
Text ( " Ellipsis character: '%c' (U+%04X) " , font - > EllipsisChar , font - > EllipsisChar ) ;
char c_str [ 5 ] ;
Text ( " Fallback character: '%s' (U+%04X) " , ImTextCharToUtf8 ( c_str , font - > FallbackChar ) , font - > FallbackChar ) ;
Text ( " Ellipsis character: '%s' (U+%04X) " , ImTextCharToUtf8 ( c_str , font - > EllipsisChar ) , font - > EllipsisChar ) ;
const int surface_sqrt = ( int ) ImSqrt ( ( float ) font - > MetricsTotalSurface ) ;
Text ( " Texture Area: about %d px ~%dx%d px " , font - > MetricsTotalSurface , surface_sqrt , surface_sqrt ) ;
for ( int config_i = 0 ; config_i < font - > ConfigDataCount ; config_i + + )