|
@@ -0,0 +1,55 @@
|
|
|
+// imgui_stl.cpp
|
|
|
+// Wrappers for STL types (std::string, etc.)
|
|
|
+// This is also an example of how you may wrap your own similar types.
|
|
|
+
|
|
|
+#include "imgui.h"
|
|
|
+#include "imgui_stl.h"
|
|
|
+
|
|
|
+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
|
|
|
+ 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)
|
|
|
+{
|
|
|
+ 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)
|
|
|
+{
|
|
|
+ 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);
|
|
|
+}
|