restructure

This commit is contained in:
Soreepeong 2025-07-26 22:33:38 +09:00
parent 3381ac1c7d
commit b53a97408b
263 changed files with 2221 additions and 1191 deletions

View file

@ -1,34 +1,26 @@
using System.Diagnostics.CodeAnalysis;
using System.Numerics;
using System.Runtime.InteropServices;
namespace Dalamud.Bindings.ImGui;
[SuppressMessage("ReSharper", "InconsistentNaming")]
public static unsafe partial class ImGuiP
{
public delegate float GetFloatDelegate(int index);
public delegate float GetFloatDelegate<T>(scoped in T context, int index);
public static int PlotEx(
ImGuiPlotType plotType, Utf8Buffer label, GetFloatDelegate valuesGetter,
int valuesCount, int valuesOffset, Utf8Buffer overlayText, float scaleMin, float scaleMax, Vector2 frameSize)
ImGuiPlotType plotType, ImU8String label, ImGui.GetFloatDelegate valuesGetter,
int valuesCount, int valuesOffset, ImU8String overlayText, float scaleMin, float scaleMax, Vector2 frameSize)
{
var dataBuffer = stackalloc void*[1];
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
{
dataBuffer[0] = &valuesGetter;
#pragma warning restore CS8500 // This takes the address of, gets the size of, or declares a pointer to a managed type
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>)&GetFloatWithoutContext,
dataBuffer,
(nint)(delegate* unmanaged<void*, int, float>)&ImGui.GetFloatStatic,
&dataBuffer,
valuesCount,
valuesOffset,
overlayTextPtr,
@ -42,25 +34,25 @@ public static unsafe partial class ImGuiP
}
public static int PlotEx<TContext>(
ImGuiPlotType plotType, Utf8Buffer label, GetFloatDelegate<TContext> valuesGetter, scoped in TContext context,
int valuesCount, int valuesOffset, Utf8Buffer overlayText, float scaleMin, float scaleMax, Vector2 frameSize)
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
{
var dataBuffer = stackalloc void*[2];
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)
{
dataBuffer[0] = &valuesGetter;
dataBuffer[1] = contextPtr;
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>)&GetFloatWithContext,
dataBuffer,
(nint)(delegate* unmanaged<void*, int, float>)&ImGui.GetFloatInContextStatic,
&dataBuffer,
valuesCount,
valuesOffset,
overlayTextPtr,
@ -73,13 +65,35 @@ public static unsafe partial class ImGuiP
}
}
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
[UnmanagedCallersOnly]
private static float GetFloatWithContext(void* data, int index) =>
((GetFloatDelegate<object>*)((void**)data)[0])->Invoke(*(object*)((void**)data)[1], index);
[UnmanagedCallersOnly]
private static float GetFloatWithoutContext(void* data, int index) =>
((GetFloatDelegate*)((void**)data)[0])->Invoke(index);
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;
}
}
}