You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							85 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							85 lines
						
					
					
						
							3.3 KiB
						
					
					
				| // dear imgui: wrappers for C++ standard library (STL) types (std::string, etc.) | |
| // This is also an example of how you may wrap your own similar types. | |
|  | |
| // Changelog: | |
| // - v0.10: Initial version. Added InputText() / InputTextMultiline() calls with std::string | |
|  | |
| // See more C++ related extension (fmt, RAII, syntaxis sugar) on Wiki: | |
| //   https://github.com/ocornut/imgui/wiki/Useful-Extensions#cness | |
|  | |
| #include "imgui.h" | |
| #include "imgui_stdlib.h" | |
|  | |
| // Clang warnings with -Weverything | |
| #if defined(__clang__) | |
| #pragma clang diagnostic push | |
| #pragma clang diagnostic ignored "-Wsign-conversion"    // warning: implicit conversion changes signedness | |
| #endif | |
|  | |
| struct InputTextCallback_UserData | |
| { | |
|     std::string*            Str; | |
|     ImGuiInputTextCallback  ChainCallback; | |
|     void*                   ChainCallbackUserData; | |
| }; | |
| 
 | |
| static int InputTextCallback(ImGuiInputTextCallbackData* data) | |
| { | |
|     InputTextCallback_UserData* user_data = (InputTextCallback_UserData*)data->UserData; | |
|     if (data->EventFlag == ImGuiInputTextFlags_CallbackResize) | |
|     { | |
|         // Resize string callback | |
|         // If for some reason we refuse the new length (BufTextLen) and/or capacity (BufSize) we need to set them back to what we want. | |
|         std::string* str = user_data->Str; | |
|         IM_ASSERT(data->Buf == str->c_str()); | |
|         str->resize(data->BufTextLen); | |
|         data->Buf = (char*)str->c_str(); | |
|     } | |
|     else if (user_data->ChainCallback) | |
|     { | |
|         // Forward to user callback, if any | |
|         data->UserData = user_data->ChainCallbackUserData; | |
|         return user_data->ChainCallback(data); | |
|     } | |
|     return 0; | |
| } | |
| 
 | |
| bool ImGui::InputText(const char* label, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) | |
| { | |
|     IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); | |
|     flags |= ImGuiInputTextFlags_CallbackResize; | |
| 
 | |
|     InputTextCallback_UserData cb_user_data; | |
|     cb_user_data.Str = str; | |
|     cb_user_data.ChainCallback = callback; | |
|     cb_user_data.ChainCallbackUserData = user_data; | |
|     return InputText(label, (char*)str->c_str(), str->capacity() + 1, flags, InputTextCallback, &cb_user_data); | |
| } | |
| 
 | |
| bool ImGui::InputTextMultiline(const char* label, std::string* str, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) | |
| { | |
|     IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); | |
|     flags |= ImGuiInputTextFlags_CallbackResize; | |
| 
 | |
|     InputTextCallback_UserData cb_user_data; | |
|     cb_user_data.Str = str; | |
|     cb_user_data.ChainCallback = callback; | |
|     cb_user_data.ChainCallbackUserData = user_data; | |
|     return InputTextMultiline(label, (char*)str->c_str(), str->capacity() + 1, size, flags, InputTextCallback, &cb_user_data); | |
| } | |
| 
 | |
| bool ImGui::InputTextWithHint(const char* label, const char* hint, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) | |
| { | |
|     IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); | |
|     flags |= ImGuiInputTextFlags_CallbackResize; | |
| 
 | |
|     InputTextCallback_UserData cb_user_data; | |
|     cb_user_data.Str = str; | |
|     cb_user_data.ChainCallback = callback; | |
|     cb_user_data.ChainCallbackUserData = user_data; | |
|     return InputTextWithHint(label, hint, (char*)str->c_str(), str->capacity() + 1, flags, InputTextCallback, &cb_user_data); | |
| } | |
| 
 | |
| #if defined(__clang__) | |
| #pragma clang diagnostic pop | |
| #endif
 | |
| 
 |