Skip to content

Commit ebd1e69

Browse files
committed
Refactor ImGuiInputTextData into an inner ImString class and rename to InputData
1 parent e60f56b commit ebd1e69

File tree

3 files changed

+46
-48
lines changed

3 files changed

+46
-48
lines changed

imgui-binding/src/main/java/imgui/ImGui.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import imgui.type.ImBool;
55
import imgui.type.ImDouble;
66
import imgui.type.ImFloat;
7-
import imgui.type.ImGuiInputTextData;
87
import imgui.type.ImInt;
98
import imgui.type.ImLong;
109
import imgui.type.ImShort;
@@ -2639,9 +2638,9 @@ public static boolean vSliderScalar(String label, float sizeX, float sizeY, int
26392638
/*JNI
26402639
jmethodID jImStringResizeInternalMID;
26412640
2642-
jfieldID imTextInputDataSizeID;
2643-
jfieldID imTextInputDataIsDirtyID;
2644-
jfieldID imTextInputDataIsResizedID;
2641+
jfieldID inputDataSizeID;
2642+
jfieldID inputDataIsDirtyID;
2643+
jfieldID inputDataIsResizedID;
26452644
26462645
struct InputTextCallbackUserData {
26472646
JNIEnv* env;
@@ -2688,12 +2687,12 @@ static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) {
26882687
*/
26892688

26902689
private static native void nInitInputTextData(); /*
2691-
jclass jImInputTextDataClass = env->FindClass("imgui/ImGuiInputTextData");
2692-
imTextInputDataSizeID = env->GetFieldID(jImInputTextDataClass, "size", "I");
2693-
imTextInputDataIsDirtyID = env->GetFieldID(jImInputTextDataClass, "isDirty", "Z");
2694-
imTextInputDataIsResizedID = env->GetFieldID(jImInputTextDataClass, "isResized", "Z");
2690+
jclass jInputDataClass = env->FindClass("imgui/type/ImString$InputData");
2691+
inputDataSizeID = env->GetFieldID(jInputDataClass, "size", "I");
2692+
inputDataIsDirtyID = env->GetFieldID(jInputDataClass, "isDirty", "Z");
2693+
inputDataIsResizedID = env->GetFieldID(jInputDataClass, "isResized", "Z");
26952694
2696-
jclass jImString = env->FindClass("imgui/ImString");
2695+
jclass jImString = env->FindClass("imgui/type/ImString");
26972696
jImStringResizeInternalMID = env->GetMethodID(jImString, "resizeInternal", "(I)[B");
26982697
*/
26992698

@@ -2722,7 +2721,7 @@ public static boolean inputTextMultiline(String label, ImString text, float widt
27222721
}
27232722

27242723
private static boolean preInputText(boolean multiline, String label, ImString text, float width, float height, int flags) {
2725-
final ImGuiInputTextData inputData = text.inputData;
2724+
final ImString.InputData inputData = text.inputData;
27262725

27272726
if (inputData.isResizable) {
27282727
flags |= ImGuiInputTextFlags.CallbackResize;
@@ -2735,7 +2734,7 @@ private static boolean preInputText(boolean multiline, String label, ImString te
27352734
return nInputText(multiline, label, text, text.getData(), text.getData().length, width, height, flags, inputData, inputData.allowedChars);
27362735
}
27372736

2738-
private static native boolean nInputText(boolean multiline, String label, ImString imString, byte[] buf, int maxSize, float width, float height, int flags, ImGuiInputTextData textInputData, String allowedChars); /*
2737+
private static native boolean nInputText(boolean multiline, String label, ImString imString, byte[] buf, int maxSize, float width, float height, int flags, ImString.InputData textInputData, String allowedChars); /*
27392738
InputTextCallbackUserData userData;
27402739
userData.imString = &imString;
27412740
userData.maxSize = maxSize;
@@ -2763,8 +2762,8 @@ private static boolean preInputText(boolean multiline, String label, ImString te
27632762
size = strlen(buf);
27642763
}
27652764
2766-
env->SetIntField(textInputData, imTextInputDataSizeID, size);
2767-
env->SetBooleanField(textInputData, imTextInputDataIsDirtyID, true);
2765+
env->SetIntField(textInputData, inputDataSizeID, size);
2766+
env->SetBooleanField(textInputData, inputDataIsDirtyID, true);
27682767
}
27692768
27702769
return valueChanged;

imgui-binding/src/main/java/imgui/type/ImGuiInputTextData.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

imgui-binding/src/main/java/imgui/type/ImString.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public final class ImString implements Cloneable {
2020
* Configuration class to setup some specific behaviour for current string.
2121
* This is useful when string used inside of ImGui#InputText*() methods.
2222
*/
23-
public final ImGuiInputTextData inputData = new ImGuiInputTextData();
23+
public final InputData inputData = new InputData();
2424

2525
private byte[] data;
2626
private String text = "";
@@ -169,4 +169,37 @@ public int hashCode() {
169169
public ImString clone() {
170170
return new ImString(this);
171171
}
172+
173+
/**
174+
* Use this class to customize your ImGui input.
175+
*/
176+
public static final class InputData {
177+
private static final short DEFAULT_RESIZE_FACTOR = 10;
178+
179+
/**
180+
* If not empty, then other chars which are different from provided will be filtered during the {@link imgui.ImGui#inputText}
181+
* and {@link imgui.ImGui#inputTextMultiline} methods.
182+
*/
183+
public String allowedChars = "";
184+
185+
/**
186+
* If true, then string will be resized during the the {@link imgui.ImGui#inputText} and {@link imgui.ImGui#inputTextMultiline} methods.
187+
* Alternatively you can provide {@link imgui.flag.ImGuiInputTextFlags#CallbackResize} flag to the input text widgets to enable string resizing.
188+
* Resize factor of the string could be modified by changing {@link #resizeFactor} field.
189+
*/
190+
public boolean isResizable;
191+
192+
/**
193+
* String will be resized to the value equal to a new size plus this resize factor.
194+
* Default value is 10.
195+
*/
196+
public int resizeFactor = DEFAULT_RESIZE_FACTOR;
197+
198+
int size;
199+
boolean isDirty;
200+
boolean isResized = false;
201+
202+
private InputData() {
203+
}
204+
}
172205
}

0 commit comments

Comments
 (0)