1
1
package imgui ;
2
2
3
+ import imgui .enums .ImGuiInputTextFlags ;
4
+
3
5
import java .nio .ByteBuffer ;
4
6
5
7
public final class ImGui {
@@ -2382,25 +2384,26 @@ public static boolean VSliderScalar(String label, float sizeX, float sizeY, int
2382
2384
/*JNI
2383
2385
jfieldID imTextInputDataSizeID;
2384
2386
jfieldID imTextInputDataIsDirtyID;
2387
+ jfieldID imTextInputDataIsResizedID;
2385
2388
2386
- struct InputTextCallback_UserData {
2387
- jobject* textInputData;
2389
+ char* resizedBuf;
2390
+
2391
+ struct InputTextCallbackUserData {
2388
2392
JNIEnv* env;
2389
- int maxChar;
2390
- char* allowedChar;
2391
- int allowedCharLength;
2392
- int maxSize;
2393
- int curSize;
2393
+ jobject* textInputData;
2394
+ char* buf;
2395
+ char* allowedChars;
2394
2396
};
2395
2397
2396
2398
static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) {
2397
- InputTextCallback_UserData * userData = (InputTextCallback_UserData *)data->UserData;
2399
+ InputTextCallbackUserData * userData = (InputTextCallbackUserData *)data->UserData;
2398
2400
2399
2401
if (data->EventFlag == ImGuiInputTextFlags_CallbackCharFilter) {
2400
- if(userData->allowedCharLength > 0) {
2402
+ int allowedCharLength = strlen(userData->allowedChars);
2403
+ if(allowedCharLength > 0) {
2401
2404
bool found = false;
2402
- for(int i = 0; i < userData-> allowedCharLength; i++) {
2403
- if(userData->allowedChar [i] == data->EventChar) {
2405
+ for(int i = 0; i < allowedCharLength; i++) {
2406
+ if(userData->allowedChars [i] == data->EventChar) {
2404
2407
found = true;
2405
2408
break;
2406
2409
}
@@ -2417,94 +2420,85 @@ static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) {
2417
2420
jclass jImInputTextDataClass = env->FindClass("imgui/ImGuiInputTextData");
2418
2421
imTextInputDataSizeID = env->GetFieldID(jImInputTextDataClass, "size", "I");
2419
2422
imTextInputDataIsDirtyID = env->GetFieldID(jImInputTextDataClass, "isDirty", "Z");
2423
+ imTextInputDataIsResizedID = env->GetFieldID(jImInputTextDataClass, "isResized", "Z");
2420
2424
*/
2421
2425
2422
2426
public static boolean InputText (String label , ImString text ) {
2423
- return nInputText ( label , text . data , text . data . length , 0 , text . inputData , text . inputData . maxChar , text . inputData . allowedChar , text . inputData . allowedChar . length () );
2427
+ return preInputText ( false , label , text , 0 , 0 , 0 );
2424
2428
}
2425
2429
2426
2430
public static boolean InputText (String label , ImString text , int imGuiInputTextFlags ) {
2427
- return nInputText ( label , text . data , text . data . length , imGuiInputTextFlags , text . inputData , text . inputData . maxChar , text . inputData . allowedChar , text . inputData . allowedChar . length () );
2431
+ return preInputText ( false , label , text , 0 , 0 , imGuiInputTextFlags );
2428
2432
}
2429
2433
2430
- private static native boolean nInputText (String label , byte [] buff , int maxSize , int flags , ImGuiInputTextData textInputData , int maxChar , String allowedChar , int allowedCharLength ); /*
2431
- int size = (int)strlen(buff);
2432
-
2433
- InputTextCallback_UserData cb_user_data;
2434
- cb_user_data.textInputData = &textInputData;
2435
- cb_user_data.env = env;
2436
- cb_user_data.curSize = size;
2437
- cb_user_data.maxSize = maxSize;
2438
- cb_user_data.maxChar = maxChar;
2439
- cb_user_data.allowedChar = allowedChar;
2440
- cb_user_data.allowedCharLength = allowedCharLength;
2434
+ public static boolean InputTextMultiline (String label , ImString text ) {
2435
+ return preInputText (true , label , text , 0 , 0 , 0 );
2436
+ }
2441
2437
2442
- char tempArray[maxSize];
2438
+ public static boolean InputTextMultiline (String label , ImString text , float width , float height ) {
2439
+ return preInputText (true , label , text , width , height , 0 );
2440
+ }
2443
2441
2444
- memset(tempArray, 0, sizeof(tempArray));
2445
- memcpy(tempArray, buff, size);
2442
+ public static boolean InputTextMultiline (String label , ImString text , int imGuiInputTextFlags ) {
2443
+ return preInputText (true , label , text , 0 , 0 , imGuiInputTextFlags );
2444
+ }
2446
2445
2447
- if(maxChar >= 0 && maxChar < maxSize ) {
2448
- maxSize = maxChar ;
2449
- }
2446
+ public static boolean InputTextMultiline ( String label , ImString text , float width , float height , int imGuiInputTextFlags ) {
2447
+ return preInputText ( true , label , text , width , height , imGuiInputTextFlags ) ;
2448
+ }
2450
2449
2451
- bool flag = ImGui::InputText(label, tempArray, maxSize, flags | ImGuiInputTextFlags_CallbackCharFilter, &TextEditCallbackStub, &cb_user_data);
2450
+ private static boolean preInputText (boolean multiline , String label , ImString text , float width , float height , int flags ) {
2451
+ ImGuiInputTextData inputData = text .inputData ;
2452
2452
2453
- if (flag) {
2454
- size = (int)strlen(tempArray);
2455
- env->SetIntField(textInputData, imTextInputDataSizeID, size);
2456
- env->SetBooleanField(textInputData, imTextInputDataIsDirtyID, true);
2457
- memset(buff, 0, maxSize);
2458
- memcpy(buff, tempArray, size);
2453
+ if (inputData .isResizable ) {
2454
+ flags |= ImGuiInputTextFlags .CallbackResize ;
2459
2455
}
2460
2456
2461
- return flag;
2462
- */
2463
-
2464
- public static boolean InputTextMultiline (String label , ImString text ) {
2465
- return nInputTextMultiline (label , text .data , text .data .length , 0 , 0 , 0 , text .inputData , text .inputData .maxChar , text .inputData .allowedChar , text .inputData .allowedChar .length ());
2466
- }
2457
+ boolean hasInput = nInputText (multiline , label , text .data , text .data .length , width , height , flags , inputData , inputData .allowedChars );
2467
2458
2468
- public static boolean InputTextMultiline (String label , ImString text , float width , float height ) {
2469
- return nInputTextMultiline (label , text .data , text .data .length , width , height , 0 , text .inputData , text .inputData .maxChar , text .inputData .allowedChar , text .inputData .allowedChar .length ());
2470
- }
2459
+ if (inputData .isResized ) {
2460
+ inputData .isResized = false ;
2461
+ text .set (nGetResizedStr (), true );
2462
+ }
2471
2463
2472
- public static boolean InputTextMultiline (String label , ImString text , float width , float height , int imGuiInputTextFlags ) {
2473
- return nInputTextMultiline (label , text .data , text .data .length , width , height , imGuiInputTextFlags , text .inputData , text .inputData .maxChar , text .inputData .allowedChar , text .inputData .allowedChar .length ());
2464
+ return hasInput ;
2474
2465
}
2475
2466
2476
- private static native boolean nInputTextMultiline (String label , byte [] buff , int maxSize , float width , float height , int flags , ImGuiInputTextData textInputData , int maxChar , String allowedChar , int allowedCharLength ); /*
2477
- int size = (int)strlen(buff);
2478
-
2479
- InputTextCallback_UserData cb_user_data;
2480
- cb_user_data.textInputData = &textInputData;
2481
- cb_user_data.env = env;
2482
- cb_user_data.curSize = size;
2483
- cb_user_data.maxSize = maxSize;
2484
- cb_user_data.maxChar = maxChar;
2485
- cb_user_data.allowedChar = allowedChar;
2486
- cb_user_data.allowedCharLength = allowedCharLength;
2467
+ private static native boolean nInputText (boolean multiline , String label , byte [] buf , int maxSize , float width , float height , int flags , ImGuiInputTextData textInputData , String allowedChars ); /*
2468
+ InputTextCallbackUserData userData;
2469
+ userData.textInputData = &textInputData;
2470
+ userData.env = env;
2471
+ userData.buf = buf;
2472
+ userData.allowedChars = allowedChars;
2487
2473
2488
- char tempArray[maxSize];
2474
+ if (strlen(allowedChars) > 0)
2475
+ flags |= ImGuiInputTextFlags_CallbackCharFilter;
2489
2476
2490
- memset(tempArray, 0, sizeof(tempArray));
2491
- memcpy(tempArray, buff, size);
2477
+ bool hasInput;
2492
2478
2493
- if(maxChar >= 0 && maxChar < maxSize) {
2494
- maxSize = maxChar;
2479
+ if (multiline) {
2480
+ hasInput = ImGui::InputTextMultiline(label, buf, maxSize, ImVec2(width, height), flags, &TextEditCallbackStub, &userData);
2481
+ } else {
2482
+ hasInput = ImGui::InputText(label, buf, maxSize, flags, &TextEditCallbackStub, &userData);
2495
2483
}
2496
2484
2497
- bool flag = ImGui::InputTextMultiline(label, tempArray, maxSize, ImVec2(width, height), flags | ImGuiInputTextFlags_CallbackCharFilter, &TextEditCallbackStub, &cb_user_data);
2485
+ if (hasInput) {
2486
+ int size = strlen(buf);
2487
+
2488
+ if (((size + 1) > maxSize) && (flags & ImGuiInputTextFlags_CallbackResize)) {
2489
+ env->SetBooleanField(textInputData, imTextInputDataIsResizedID, true);
2490
+ resizedBuf = buf;
2491
+ }
2498
2492
2499
- if (flag) {
2500
- size = (int)strlen(tempArray);
2501
2493
env->SetIntField(textInputData, imTextInputDataSizeID, size);
2502
2494
env->SetBooleanField(textInputData, imTextInputDataIsDirtyID, true);
2503
- memset(buff, 0, maxSize);
2504
- memcpy(buff, tempArray, size);
2505
2495
}
2506
2496
2507
- return flag;
2497
+ return hasInput;
2498
+ */
2499
+
2500
+ private static native String nGetResizedStr (); /*
2501
+ return env->NewStringUTF(resizedBuf);
2508
2502
*/
2509
2503
2510
2504
public static boolean InputFloat (String label , ImFloat v ) {
@@ -4522,7 +4516,7 @@ public static ImDrawList GetForegroundDrawList() {
4522
4516
*/
4523
4517
4524
4518
// Clipboard Utilities (also see the LogToClipboard() function to capture or output text data to the clipboard)
4525
-
4519
+
4526
4520
public static native String GetClipboardText (); /*
4527
4521
return env->NewStringUTF(ImGui::GetClipboardText());
4528
4522
*/
0 commit comments