Merge pull request #2536 from CMDRNuffin/imgui-textboxes-fix-unnecessary-cloning-on-unchanged-text-2-electric-boogaloo

Prevent unnecessary string creation in ImGui TextInput methods
This commit is contained in:
goat 2025-12-21 13:02:07 +01:00 committed by GitHub
commit ea1bb92d17
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -127,8 +127,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -140,8 +146,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -153,8 +165,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback, ref context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -166,8 +184,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback, in context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -287,8 +311,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -300,8 +330,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -314,8 +350,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback, ref context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -328,8 +370,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback, in context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -388,8 +436,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -401,8 +455,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -414,8 +474,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback, ref context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -427,8 +493,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback, in context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -477,8 +549,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -490,8 +568,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -503,8 +587,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback, ref context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -516,8 +606,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback, in context);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}
@ -541,8 +637,14 @@ public unsafe partial class ImGui
var t = new ImU8String(buf);
t.Reserve(maxLength + 1);
var r = TempInputText(bb, id, label, t.Buffer[..(maxLength + 1)], flags);
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
var e = (flags & ImGuiInputTextFlags.EnterReturnsTrue) != 0;
if (r | e)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle();
return r;
}