private igInputTextMultiline ( string label, |
||
label | string | |
buffer | ||
buf_size | uint | |
size | Vector2 | |
flags | InputTextFlags | |
callback | TextEditCallback | |
user_data | void | |
return | bool |
public static bool InputTextMultiline( string label, ref string input, uint maxLength, Vector2 size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, IntPtr user_data) { int labelByteCount = Encoding.UTF8.GetByteCount(label); byte *labelBytes = stackalloc byte[labelByteCount]; fixed(char *labelPtr = label) { Encoding.UTF8.GetBytes(labelPtr, label.Length, labelBytes, labelByteCount); } int originalByteCount = Encoding.UTF8.GetByteCount(input); int stackBufSize = Math.Max((int)maxLength, originalByteCount); byte *bufBytes = stackalloc byte[stackBufSize]; fixed(char *u16Ptr = input) { Encoding.UTF8.GetBytes(u16Ptr, input.Length, bufBytes, stackBufSize); } byte *originalBufBytes = stackalloc byte[originalByteCount]; Unsafe.CopyBlock(originalBufBytes, bufBytes, (uint)originalByteCount); byte result = ImGuiNative.igInputTextMultiline( labelBytes, bufBytes, (uint)stackBufSize, size, flags, callback, user_data.ToPointer()); if (!Util.AreStringsEqual(originalBufBytes, originalByteCount, bufBytes)) { input = Util.StringFromPtr(bufBytes); } return(result != 0); }
public static unsafe void InputTextMultiline(string label, IntPtr textBuffer, uint bufferSize, Vector2 size, InputTextFlags flags, TextEditCallback callback, IntPtr userData) { ImGuiNative.igInputTextMultiline(label, textBuffer, bufferSize, size, flags, callback, userData.ToPointer()); }
public static bool InputTextMultiline( string label, ref string input, uint maxLength, Vector2 size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, IntPtr user_data) { int utf8LabelByteCount = Encoding.UTF8.GetByteCount(label); byte *utf8LabelBytes; if (utf8LabelByteCount > Util.StackAllocationSizeLimit) { utf8LabelBytes = Util.Allocate(utf8LabelByteCount + 1); } else { byte *stackPtr = stackalloc byte[utf8LabelByteCount + 1]; utf8LabelBytes = stackPtr; } Util.GetUtf8(label, utf8LabelBytes, utf8LabelByteCount); int utf8InputByteCount = Encoding.UTF8.GetByteCount(input); int inputBufSize = Math.Max((int)maxLength + 1, utf8InputByteCount + 1); byte *utf8InputBytes; byte *originalUtf8InputBytes; if (inputBufSize > Util.StackAllocationSizeLimit) { utf8InputBytes = Util.Allocate(inputBufSize); originalUtf8InputBytes = Util.Allocate(inputBufSize); } else { byte *inputStackBytes = stackalloc byte[inputBufSize]; utf8InputBytes = inputStackBytes; byte *originalInputStackBytes = stackalloc byte[inputBufSize]; originalUtf8InputBytes = originalInputStackBytes; } Util.GetUtf8(input, utf8InputBytes, inputBufSize); uint clearBytesCount = (uint)(inputBufSize - utf8InputByteCount); Unsafe.InitBlockUnaligned(utf8InputBytes + utf8InputByteCount, 0, clearBytesCount); Unsafe.CopyBlock(originalUtf8InputBytes, utf8InputBytes, (uint)inputBufSize); byte result = ImGuiNative.igInputTextMultiline( utf8LabelBytes, utf8InputBytes, (uint)inputBufSize, size, flags, callback, user_data.ToPointer()); if (!Util.AreStringsEqual(originalUtf8InputBytes, inputBufSize, utf8InputBytes)) { input = Util.StringFromPtr(utf8InputBytes); } if (utf8LabelByteCount > Util.StackAllocationSizeLimit) { Util.Free(utf8LabelBytes); } if (inputBufSize > Util.StackAllocationSizeLimit) { Util.Free(utf8InputBytes); Util.Free(originalUtf8InputBytes); } return(result != 0); }
public static unsafe void InputTextMultiline(string label, IntPtr textBuffer, uint bufferSize, ImVec2 size, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback) { ImGuiNative.igInputTextMultiline(label, textBuffer, bufferSize, size, flags, callback, null); }
public static unsafe void InputTextMultiline(string label, IntPtr textBuffer, uint bufferSize, Vector2 size, InputTextFlags flags, TextEditCallback callback) { ImGuiNative.igInputTextMultiline(label, textBuffer, bufferSize, size.ToNumericsVector2(), flags, callback, null); }