Merge pull request #2528 from CMDRNuffin/imgui-textboxes-fix-unnecessary-cloning-on-unchanged-text

Prevent ImGui text box methods from cloning unchanged input every frame
This commit is contained in:
goat 2025-12-19 11:36:19 +01:00 committed by GitHub
commit 3b8917bcc8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -127,8 +127,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -140,8 +145,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -153,8 +163,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback, ref context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -166,8 +181,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputText(label, t.Buffer[..(maxLength + 1)], flags, callback, in context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -287,8 +307,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -300,8 +325,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -314,8 +344,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback, ref context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -328,8 +363,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextEx(label, hint, t.Buffer[..(maxLength + 1)], sizeArg, flags, callback, in context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -388,8 +428,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -401,8 +446,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -414,8 +464,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback, ref context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -427,8 +482,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextMultiline(label, t.Buffer[..(maxLength + 1)], size, flags, callback, in context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -477,8 +537,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -490,8 +555,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -503,8 +573,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback, ref context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -516,8 +591,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = InputTextWithHint(label, hint, t.Buffer[..(maxLength + 1)], flags, callback, in context); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }
@ -541,8 +621,13 @@ public unsafe partial class ImGui
var t = new ImU8String(buf); var t = new ImU8String(buf);
t.Reserve(maxLength + 1); t.Reserve(maxLength + 1);
var r = TempInputText(bb, id, label, t.Buffer[..(maxLength + 1)], flags); 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]); if (r)
{
var i = t.Buffer.IndexOf((byte)0);
buf = Encoding.UTF8.GetString(i == -1 ? t.Buffer : t.Buffer[..i]);
}
t.Recycle(); t.Recycle();
return r; return r;
} }