Manual overloads for ImGui functions accepting text (#2319)

* wip2

* Implement AutoUtf8Buffer

* reformat

* Work on manual bindings

* restructure

* Name scripts properly

* Update utility functions to use ImU8String

* add overloads

* Add more overloads

* Use ImGuiWindow from gen, support AddCallback

* Use LibraryImport for custom ImGuiNative functinos

* Make manual overloads for string-returning functinos

* Make all overloads with self as its first parameter extension methods

* Fix overload resolution by removing unnecessary

* in => scoped in

* Fix compilation errors
This commit is contained in:
srkizer 2025-08-05 03:14:00 +09:00 committed by GitHub
parent 0c63541864
commit c69329f592
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
293 changed files with 61312 additions and 754 deletions

View file

@ -0,0 +1,99 @@
using System.Diagnostics.CodeAnalysis;
using System.Numerics;
namespace Dalamud.Bindings.ImGui;
[SuppressMessage("ReSharper", "InconsistentNaming")]
public static unsafe partial class ImGuiP
{
public static int PlotEx(
ImGuiPlotType plotType, ImU8String label, ImGui.GetFloatDelegate valuesGetter,
int valuesCount, int valuesOffset, ImU8String overlayText, float scaleMin, float scaleMax, Vector2 frameSize)
{
fixed (byte* labelPtr = &label.GetPinnableNullTerminatedReference())
fixed (byte* overlayTextPtr = &overlayText.GetPinnableNullTerminatedReference())
{
var dataBuffer = PointerTuple.CreateFixed(ref valuesGetter);
var r = ImGuiPNative.PlotEx(
plotType,
labelPtr,
(delegate*<ImGuiPlotType, byte*, delegate*<void*, int, float>, void*, int, int, byte*, float, float,
Vector2, float>)
(nint)(delegate* unmanaged<void*, int, float>)&ImGui.GetFloatStatic,
&dataBuffer,
valuesCount,
valuesOffset,
overlayTextPtr,
scaleMin,
scaleMax,
frameSize);
label.Dispose();
overlayText.Dispose();
return r;
}
}
public static int PlotEx<TContext>(
ImGuiPlotType plotType, ImU8String label, ImGui.GetFloatInContextDelegate<TContext> valuesGetter,
scoped in TContext context,
int valuesCount, int valuesOffset, ImU8String overlayText, float scaleMin, float scaleMax, Vector2 frameSize)
where TContext : allows ref struct
{
fixed (byte* labelPtr = &label.GetPinnableNullTerminatedReference())
fixed (byte* overlayTextPtr = &overlayText.GetPinnableNullTerminatedReference())
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
fixed (TContext* contextPtr = &context)
{
var dataBuffer = PointerTuple.Create(&valuesGetter, contextPtr);
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
var r = ImGuiPNative.PlotEx(
plotType,
labelPtr,
(delegate*<ImGuiPlotType, byte*, delegate*<void*, int, float>, void*, int, int, byte*, float, float,
Vector2, float>)
(nint)(delegate* unmanaged<void*, int, float>)&ImGui.GetFloatInContextStatic,
&dataBuffer,
valuesCount,
valuesOffset,
overlayTextPtr,
scaleMin,
scaleMax,
frameSize);
label.Dispose();
overlayText.Dispose();
return r;
}
}
public static int PlotEx<TContext>(
ImGuiPlotType plotType, ImU8String label, ImGui.GetFloatRefContextDelegate<TContext> valuesGetter,
scoped in TContext context,
int valuesCount, int valuesOffset, ImU8String overlayText, float scaleMin, float scaleMax, Vector2 frameSize)
where TContext: allows ref struct
{
fixed (byte* labelPtr = &label.GetPinnableNullTerminatedReference())
fixed (byte* overlayTextPtr = &overlayText.GetPinnableNullTerminatedReference())
#pragma warning disable CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
fixed (TContext* contextPtr = &context)
{
var dataBuffer = PointerTuple.Create(&valuesGetter, contextPtr);
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
var r = ImGuiPNative.PlotEx(
plotType,
labelPtr,
(delegate*<ImGuiPlotType, byte*, delegate*<void*, int, float>, void*, int, int, byte*, float, float,
Vector2, float>)
(nint)(delegate* unmanaged<void*, int, float>)&ImGui.GetFloatRefContextStatic,
&dataBuffer,
valuesCount,
valuesOffset,
overlayTextPtr,
scaleMin,
scaleMax,
frameSize);
label.Dispose();
overlayText.Dispose();
return r;
}
}
}