[API] Added callback binding for InputText (#156)

* Added callback binding for InputText

* Add JavaDoc

* Change

* Add Javadoc

* Fix Import

* Teaks and improvements

- Extended example;
- Added input text callback ImGuiInputTextFlags#CallbackEdit;
- Minor code improvements.

---------

Co-authored-by: SpaiR <klimbetoo@gmail.com>
This commit is contained in:
墨恒andSpaiR authored and GitHub committed 2023-02-07 13:13:02 +02:00
1 parent f3c971ca60
commit 986aa532ff
6 files changed
+296 -6

No files matched your search

+43 -6
View File
@@ -1,6 +1,7 @@
package imgui;
import imgui.assertion.ImAssertCallback;
import imgui.callback.ImGuiInputTextCallback;
import imgui.flag.ImGuiCond;
import imgui.flag.ImGuiDragDropFlags;
import imgui.flag.ImGuiInputTextFlags;
@@ -2988,11 +2989,13 @@ public class ImGui {
/*JNI
jmethodID jImStringResizeInternalMID;
jmethodID jInputTextCallbackMID;
jfieldID inputDataSizeID;
jfieldID inputDataIsDirtyID;
jfieldID inputDataIsResizedID;
struct InputTextCallbackUserData {
JNIEnv* env;
jobject* imString;
@@ -3001,6 +3004,7 @@ public class ImGui {
char* resizedBuf;
jobject* textInputData;
char* allowedChars;
jobject* handler;
};
static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) {
@@ -3033,6 +3037,11 @@ public class ImGui {
}
}
if (userData->handler != NULL) {
JNIEnv* env = userData->env;
env->CallObjectMethod(*userData->handler, jInputTextCallbackMID, data);
}
return 0;
}
*/
@@ -3045,41 +3054,68 @@ public class ImGui {
jclass jImString = env->FindClass("imgui/type/ImString");
jImStringResizeInternalMID = env->GetMethodID(jImString, "resizeInternal", "(I)[B");
jclass jCallback = env->FindClass("imgui/callback/ImGuiInputTextCallback");
jInputTextCallbackMID = env->GetMethodID(jCallback, "accept", "(J)V");
*/
public static boolean inputText(String label, ImString text) {
return preInputText(false, label, null, text, 0, 0, ImGuiInputTextFlags.None);
return preInputText(false, label, null, text);
}
public static boolean inputText(String label, ImString text, int imGuiInputTextFlags) {
return preInputText(false, label, null, text, 0, 0, imGuiInputTextFlags);
}
public static boolean inputText(String label, ImString text, int imGuiInputTextFlags, ImGuiInputTextCallback callback) {
return preInputText(false, label, null, text, 0, 0, imGuiInputTextFlags, callback);
}
public static boolean inputTextMultiline(String label, ImString text) {
return preInputText(true, label, null, text, 0, 0, ImGuiInputTextFlags.None);
return preInputText(true, label, null, text);
}
public static boolean inputTextMultiline(String label, ImString text, float width, float height) {
return preInputText(true, label, null, text, width, height, ImGuiInputTextFlags.None);
return preInputText(true, label, null, text, width, height);
}
public static boolean inputTextMultiline(String label, ImString text, int imGuiInputTextFlags) {
return preInputText(true, label, null, text, 0, 0, imGuiInputTextFlags);
}
public static boolean inputTextMultiline(String label, ImString text, int imGuiInputTextFlags, ImGuiInputTextCallback callback) {
return preInputText(true, label, null, text, 0, 0, imGuiInputTextFlags, callback);
}
public static boolean inputTextMultiline(String label, ImString text, float width, float height, int imGuiInputTextFlags) {
return preInputText(true, label, null, text, width, height, imGuiInputTextFlags);
}
public static boolean inputTextMultiline(String label, ImString text, float width, float height, int imGuiInputTextFlags, ImGuiInputTextCallback callback) {
return preInputText(true, label, null, text, width, height, imGuiInputTextFlags, callback);
}
public static boolean inputTextWithHint(String label, String hint, ImString text) {
return preInputText(false, label, hint, text, 0, 0, ImGuiInputTextFlags.None);
return preInputText(false, label, hint, text);
}
public static boolean inputTextWithHint(String label, String hint, ImString text, int imGuiInputTextFlags) {
return preInputText(false, label, hint, text, 0, 0, imGuiInputTextFlags);
}
private static boolean preInputText(boolean multiline, String label, String hint, ImString text) {
return preInputText(multiline, label, hint, text, 0, 0);
}
private static boolean preInputText(boolean multiline, String label, String hint, ImString text, float width, float height) {
return preInputText(multiline, label, hint, text, width, height, ImGuiInputTextFlags.None);
}
private static boolean preInputText(boolean multiline, String label, String hint, ImString text, float width, float height, int flags) {
return preInputText(multiline, label, hint, text, width, height, flags, null);
}
private static boolean preInputText(boolean multiline, String label, String hint, ImString text, float width, float height, int flags, ImGuiInputTextCallback callback) {
final ImString.InputData inputData = text.inputData;
if (inputData.isResizable) {
@@ -3095,10 +3131,10 @@ public class ImGui {
hintLabel = "";
}
return nInputText(multiline, hint != null, label, hintLabel, text, text.getData(), text.getData().length, width, height, flags, inputData, inputData.allowedChars);
return nInputText(multiline, hint != null, label, hintLabel, text, text.getData(), text.getData().length, width, height, flags, inputData, inputData.allowedChars, callback);
}
private static native boolean nInputText(boolean multiline, boolean hint, String label, String hintLabel, ImString imString, byte[] buf, int maxSize, float width, float height, int flags, ImString.InputData textInputData, String allowedChars); /*
private static native boolean nInputText(boolean multiline, boolean hint, String label, String hintLabel, ImString imString, byte[] buf, int maxSize, float width, float height, int flags, ImString.InputData textInputData, String allowedChars, ImGuiInputTextCallback callback); /*
InputTextCallbackUserData userData;
userData.imString = &imString;
userData.maxSize = maxSize;
@@ -3107,6 +3143,7 @@ public class ImGui {
userData.textInputData = &textInputData;
userData.env = env;
userData.allowedChars = allowedChars;
userData.handler = &callback;
bool valueChanged;