mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-01-03 14:23:40 +01:00
restructure
This commit is contained in:
parent
3381ac1c7d
commit
b53a97408b
263 changed files with 2221 additions and 1191 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue