igInputTextMultiline() private method

private igInputTextMultiline ( string label, IntPtr buffer, uint buf_size, Vector2 size, InputTextFlags flags, TextEditCallback callback, void user_data ) : bool
label string
buffer System.IntPtr
buf_size uint
size Vector2
flags InputTextFlags
callback TextEditCallback
user_data void
return bool
Esempio n. 1
0
        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);
        }
Esempio n. 2
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());
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
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);
 }
Esempio n. 5
0
 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);
 }