@ -126,7 +126,7 @@ static const ImU64 IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
// For InputTextEx()
static bool InputTextFilterCharacter ( unsigned int * p_char , ImGuiInputTextFlags flags , ImGuiInputTextCallback callback , void * user_data , ImGuiInputSource input_source ) ;
static int InputTextCalcTextLenAndLineCount ( const char * text_begin , const char * * out_text_end ) ;
static ImVec2 InputTextCalcTextSizeW ( const ImWchar * text_begin , const ImWchar * text_end , const ImWchar * * remaining = NULL , ImVec2 * out_offset = NULL , bool stop_on_new_line = false ) ;
static ImVec2 InputTextCalcTextSizeW ( ImGuiContext * ctx , const ImWchar * text_begin , const ImWchar * text_end , const ImWchar * * remaining = NULL , ImVec2 * out_offset = NULL , bool stop_on_new_line = false ) ;
//-------------------------------------------------------------------------
// [SECTION] Widgets: Text, etc.
@ -3563,9 +3563,9 @@ static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char**
return line_count ;
}
static ImVec2 InputTextCalcTextSizeW ( const ImWchar * text_begin , const ImWchar * text_end , const ImWchar * * remaining , ImVec2 * out_offset , bool stop_on_new_line )
static ImVec2 InputTextCalcTextSizeW ( ImGuiContext * ctx , const ImWchar * text_begin , const ImWchar * text_end , const ImWchar * * remaining , ImVec2 * out_offset , bool stop_on_new_line )
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * ctx ;
ImFont * font = g . Font ;
const float line_height = g . FontSize ;
const float scale = line_height / font - > FontSize ;
@ -3614,14 +3614,14 @@ namespace ImStb
static int STB_TEXTEDIT_STRINGLEN ( const ImGuiInputTextState * obj ) { return obj - > CurLenW ; }
static ImWchar STB_TEXTEDIT_GETCHAR ( const ImGuiInputTextState * obj , int idx ) { return obj - > TextW [ idx ] ; }
static float STB_TEXTEDIT_GETWIDTH ( ImGuiInputTextState * obj , int line_start_idx , int char_idx ) { ImWchar c = obj - > TextW [ line_start_idx + char_idx ] ; if ( c = = ' \n ' ) return STB_TEXTEDIT_GETWIDTH_NEWLINE ; ImGuiContext & g = * GImGui ; return g . Font - > GetCharAdvance ( c ) * ( g . FontSize / g . Font - > FontSize ) ; }
static float STB_TEXTEDIT_GETWIDTH ( ImGuiInputTextState * obj , int line_start_idx , int char_idx ) { ImWchar c = obj - > TextW [ line_start_idx + char_idx ] ; if ( c = = ' \n ' ) return STB_TEXTEDIT_GETWIDTH_NEWLINE ; ImGuiContext & g = * obj - > Ctx ; return g . Font - > GetCharAdvance ( c ) * ( g . FontSize / g . Font - > FontSize ) ; }
static int STB_TEXTEDIT_KEYTOTEXT ( int key ) { return key > = 0x200000 ? 0 : key ; }
static ImWchar STB_TEXTEDIT_NEWLINE = ' \n ' ;
static void STB_TEXTEDIT_LAYOUTROW ( StbTexteditRow * r , ImGuiInputTextState * obj , int line_start_idx )
{
const ImWchar * text = obj - > TextW . Data ;
const ImWchar * text_remaining = NULL ;
const ImVec2 size = InputTextCalcTextSizeW ( text + line_start_idx , text + obj - > CurLenW , & text_remaining , NULL , true ) ;
const ImVec2 size = InputTextCalcTextSizeW ( obj - > Ctx , text + line_start_idx , text + obj - > CurLenW , & text_remaining , NULL , true ) ;
r - > x0 = 0.0f ;
r - > x1 = size . x ;
r - > baseline_y_delta = size . y ;
@ -3637,7 +3637,7 @@ static int is_word_boundary_from_left(ImGuiInputTextState* obj, int idx)
static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL ( ImGuiInputTextState * obj , int idx ) { idx - - ; while ( idx > = 0 & & ! is_word_boundary_from_right ( obj , idx ) ) idx - - ; return idx < 0 ? 0 : idx ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( ImGuiInputTextState * obj , int idx ) { idx + + ; int len = obj - > CurLenW ; while ( idx < len & & ! is_word_boundary_from_left ( obj , idx ) ) idx + + ; return idx > len ? len : idx ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( ImGuiInputTextState * obj , int idx ) { idx + + ; int len = obj - > CurLenW ; while ( idx < len & & ! is_word_boundary_from_right ( obj , idx ) ) idx + + ; return idx > len ? len : idx ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( ImGuiInputTextState * obj , int idx ) { if ( ImGui : : GetIO ( ) . ConfigMacOSXBehaviors ) return STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( obj , idx ) ; else return STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( obj , idx ) ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( ImGuiInputTextState * obj , int idx ) { ImGuiContext & g = * obj - > Ctx ; if ( g . IO . ConfigMacOSXBehaviors ) return STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( obj , idx ) ; else return STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( obj , idx ) ; }
# define STB_TEXTEDIT_MOVEWORDLEFT STB_TEXTEDIT_MOVEWORDLEFT_IMPL // They need to be #define for stb_textedit.h
# define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_IMPL
@ -4675,11 +4675,11 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
searches_result_line_no [ 1 ] = line_count ;
// Calculate 2d position by finding the beginning of the line and measuring distance
cursor_offset . x = InputTextCalcTextSizeW ( ImStrbolW ( searches_input_ptr [ 0 ] , text_begin ) , searches_input_ptr [ 0 ] ) . x ;
cursor_offset . x = InputTextCalcTextSizeW ( & g , ImStrbolW ( searches_input_ptr [ 0 ] , text_begin ) , searches_input_ptr [ 0 ] ) . x ;
cursor_offset . y = searches_result_line_no [ 0 ] * g . FontSize ;
if ( searches_result_line_no [ 1 ] > = 0 )
{
select_start_offset . x = InputTextCalcTextSizeW ( ImStrbolW ( searches_input_ptr [ 1 ] , text_begin ) , searches_input_ptr [ 1 ] ) . x ;
select_start_offset . x = InputTextCalcTextSizeW ( & g , ImStrbolW ( searches_input_ptr [ 1 ] , text_begin ) , searches_input_ptr [ 1 ] ) . x ;
select_start_offset . y = searches_result_line_no [ 1 ] * g . FontSize ;
}
@ -4748,7 +4748,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
}
else
{
ImVec2 rect_size = InputTextCalcTextSizeW ( p , text_selected_end , & p , NULL , true ) ;
ImVec2 rect_size = InputTextCalcTextSizeW ( & g , p , text_selected_end , & p , NULL , true ) ;
if ( rect_size . x < = 0.0f ) rect_size . x = IM_FLOOR ( g . Font - > GetCharAdvance ( ( ImWchar ) ' ' ) * 0.50f ) ; // So we can see selected empty lines
ImRect rect ( rect_pos + ImVec2 ( 0.0f , bg_offy_up - g . FontSize ) , rect_pos + ImVec2 ( rect_size . x , bg_offy_dn ) ) ;
rect . ClipWith ( clip_rect ) ;