diff --git a/Dalamud/Interface/Internal/UiDebug.cs b/Dalamud/Interface/Internal/UiDebug.cs index 21dc9d3eb..26d3f6f70 100644 --- a/Dalamud/Interface/Internal/UiDebug.cs +++ b/Dalamud/Interface/Internal/UiDebug.cs @@ -87,7 +87,7 @@ internal unsafe class UiDebug var addonName = atkUnitBase->NameString; var agent = Service.Get().FindAgentInterface(atkUnitBase); - ImGui.Text($"{addonName}"); + ImGui.Text(addonName); ImGui.SameLine(); ImGui.PushStyleColor(ImGuiCol.Text, isVisible ? 0xFF00FF00 : 0xFF0000FF); ImGui.Text(isVisible ? "Visible" : "Not Visible"); diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs index 5f0eb9444..e041d020b 100644 --- a/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs +++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/NounProcessorWidget.cs @@ -107,7 +107,7 @@ internal class NounProcessorWidget : IDataWindowWidget var sheet = dataManager.Excel.GetSheet(Language.English, sheetType.Name); var minRowId = (int)sheet.FirstOrDefault().RowId; var maxRowId = (int)sheet.LastOrDefault().RowId; - if (ImGui.InputInt("RowId###RowId", ref this.rowId, 1, 10, ImGuiInputTextFlags.AutoSelectAll)) + if (ImGui.InputInt("RowId###RowId", ref this.rowId, 1, 10, flags: ImGuiInputTextFlags.AutoSelectAll)) { if (this.rowId < minRowId) this.rowId = minRowId; @@ -120,7 +120,7 @@ internal class NounProcessorWidget : IDataWindowWidget ImGui.TextUnformatted($"(Range: {minRowId} - {maxRowId})"); ImGui.SetNextItemWidth(120); - if (ImGui.InputInt("Amount###Amount", ref this.amount, 1, 10, ImGuiInputTextFlags.AutoSelectAll)) + if (ImGui.InputInt("Amount###Amount", ref this.amount, 1, 10, flags: ImGuiInputTextFlags.AutoSelectAll)) { if (this.amount <= 0) this.amount = 1; diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/TexWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/TexWidget.cs index 027e792ab..710700710 100644 --- a/Dalamud/Interface/Internal/Windows/Data/Widgets/TexWidget.cs +++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/TexWidget.cs @@ -850,9 +850,9 @@ internal class TexWidget : IDataWindowWidget Span wh = stackalloc int[2]; wh[0] = this.textureModificationArgs.NewWidth; wh[1] = this.textureModificationArgs.NewHeight; - if (ImGui.InputInt2( + if (ImGui.InputInt( $"{nameof(this.textureModificationArgs.NewWidth)}/{nameof(this.textureModificationArgs.NewHeight)}", - ref wh[0])) + wh)) { this.textureModificationArgs.NewWidth = wh[0]; this.textureModificationArgs.NewHeight = wh[1]; diff --git a/Dalamud/Interface/Textures/TextureWraps/Internal/UnknownTextureWrap.cs b/Dalamud/Interface/Textures/TextureWraps/Internal/UnknownTextureWrap.cs index f5b96870a..f0a9a474f 100644 --- a/Dalamud/Interface/Textures/TextureWraps/Internal/UnknownTextureWrap.cs +++ b/Dalamud/Interface/Textures/TextureWraps/Internal/UnknownTextureWrap.cs @@ -16,7 +16,7 @@ internal sealed unsafe class UnknownTextureWrap : IDalamudTextureWrap, IDeferred /// Initializes a new instance of the class. /// The pointer to that is suitable for use with - /// . + /// . /// The width of the texture. /// The height of the texture. /// If true, call . diff --git a/Dalamud/Interface/Utility/ImGuiId.cs b/Dalamud/Interface/Utility/ImGuiId.cs index a5739afa9..12f1cd0a2 100644 --- a/Dalamud/Interface/Utility/ImGuiId.cs +++ b/Dalamud/Interface/Utility/ImGuiId.cs @@ -161,12 +161,10 @@ public readonly ref struct ImGuiId ImGui.PushID((void*)this.Numeric); return true; case Type.U16: - fixed (void* p = this.U16) - ImGui.PushID((byte*)p, (byte*)p + (this.U16.Length * 2)); + ImGui.PushID(this.U16); return true; case Type.U8: - fixed (void* p = this.U8) - ImGui.PushID((byte*)p, (byte*)p + this.U8.Length); + ImGui.PushID(this.U8); return true; case Type.None: default: diff --git a/Dalamud/Interface/Utility/ImVectorWrapper.cs b/Dalamud/Interface/Utility/ImVectorWrapper.cs index d501563b1..dee0f5994 100644 --- a/Dalamud/Interface/Utility/ImVectorWrapper.cs +++ b/Dalamud/Interface/Utility/ImVectorWrapper.cs @@ -25,7 +25,7 @@ public unsafe struct ImVectorWrapper : IList, IList, IReadOnlyList, IDi /// Initializes a new instance of the struct.
/// If is set to true, you must call after use, /// and the underlying memory for must have been allocated using - /// . Otherwise, it will crash. + /// . Otherwise, it will crash. /// /// The underlying vector. /// The destroyer function to call on item removal. diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/AutoUtf8Buffer.cs b/imgui/Dalamud.Bindings.ImGui/Custom/AutoUtf8Buffer.cs index 9cf4b8db6..b826baa15 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/AutoUtf8Buffer.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/AutoUtf8Buffer.cs @@ -2,25 +2,46 @@ using System.Buffers; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; +using System.Text.Unicode; namespace Dalamud.Bindings.ImGui; -[StructLayout(LayoutKind.Sequential)] +[StructLayout(LayoutKind.Sequential, Size = TotalBufferSize)] +[InterpolatedStringHandler] public ref struct AutoUtf8Buffer : IDisposable { - private const int StackBufferSize = 1024 - 1 - 8 - 8; + private const int TotalBufferSize = 1024; + private const int FixedBufferSize = TotalBufferSize - 8 - 8 - 8 - 1; + private const int MinimumRentSize = TotalBufferSize * 2; - private byte[]? RentedBuffer; + private byte[]? rentedBuffer; private ReadOnlySpan span; + private IFormatProvider? formatProvider; private State state; - private unsafe fixed byte buffer[StackBufferSize]; + private unsafe fixed byte fixedBuffer[FixedBufferSize]; [Flags] - private enum State + private enum State : byte { None = 0, Initialized = 1 << 0, NullTerminated = 1 << 1, + Interpolation = 1 << 2, + OwnedSpan = 1 << 3, + } + + public AutoUtf8Buffer(int literalLength, int formattedCount) : this(ReadOnlySpan.Empty) + { + this.state |= State.Interpolation; + literalLength += formattedCount * 4; + if (literalLength >= FixedBufferSize) + IncreaseBuffer(out _, literalLength); + } + + public AutoUtf8Buffer(int literalLength, int formattedCount, IFormatProvider? formatProvider) + : this(literalLength, formattedCount) + { + this.formatProvider = formatProvider; } public AutoUtf8Buffer(ReadOnlySpan text) @@ -30,11 +51,11 @@ public ref struct AutoUtf8Buffer : IDisposable { unsafe { - this.span = MemoryMarshal.CreateSpan(ref this.buffer[0], 0); - this.buffer[0] = 0; + this.span = MemoryMarshal.CreateSpan(ref this.fixedBuffer[0], 0); + this.fixedBuffer[0] = 0; } - this.state |= State.NullTerminated; + this.state |= State.NullTerminated | State.OwnedSpan; } else { @@ -48,27 +69,25 @@ public ref struct AutoUtf8Buffer : IDisposable { } - public AutoUtf8Buffer(ReadOnlySpan text) + public unsafe AutoUtf8Buffer(ReadOnlySpan text) { this.state = State.Initialized | State.NullTerminated; var cb = Encoding.UTF8.GetByteCount(text); - if (cb + 1 < StackBufferSize) + if (cb + 1 < FixedBufferSize) { - unsafe - { - var newSpan = MemoryMarshal.CreateSpan(ref this.buffer[0], cb); - this.span = newSpan; - Encoding.UTF8.GetBytes(text, newSpan); - this.buffer[cb] = 0; - } + var newSpan = MemoryMarshal.CreateSpan(ref this.fixedBuffer[0], cb); + this.span = newSpan; + Encoding.UTF8.GetBytes(text, newSpan); + this.fixedBuffer[cb] = 0; + this.state |= State.OwnedSpan; } else { - this.RentedBuffer = ArrayPool.Shared.Rent(cb + 1); - var newSpan = this.RentedBuffer.AsSpan(0, cb); + this.rentedBuffer = ArrayPool.Shared.Rent(cb + 1); + var newSpan = this.rentedBuffer.AsSpan(0, cb); this.span = newSpan; Encoding.UTF8.GetBytes(text, newSpan); - this.RentedBuffer[cb] = 0; + this.rentedBuffer[cb] = 0; } } @@ -91,34 +110,37 @@ public ref struct AutoUtf8Buffer : IDisposable public readonly bool IsInitialized => (this.state & State.Initialized) != 0; - public readonly ReadOnlySpan Span => this.span; + public readonly unsafe ReadOnlySpan Span => + (this.state & State.OwnedSpan) != 0 + ? MemoryMarshal.CreateSpan(ref Unsafe.AsRef(in this.fixedBuffer[0]), this.span.Length) + : this.span; public readonly int Length => this.span.Length; public readonly bool IsEmpty => this.span.IsEmpty; - public ReadOnlySpan NullTerminatedSpan + public unsafe ReadOnlySpan NullTerminatedSpan { get { - if ((this.state & State.NullTerminated) != 0) + if ((this.state & State.OwnedSpan) != 0) + this.span = MemoryMarshal.CreateSpan(ref this.fixedBuffer[0], this.span.Length); + + if ((this.state & State.NullTerminated) == 0) { - if (this.Span.Length + 1 < StackBufferSize) + if (this.span.Length + 1 < FixedBufferSize) { - unsafe - { - var newSpan = MemoryMarshal.CreateSpan(ref this.buffer[0], this.span.Length); - this.span.CopyTo(newSpan); - this.buffer[newSpan.Length] = 0; - this.span = newSpan; - } + var newSpan = MemoryMarshal.CreateSpan(ref this.fixedBuffer[0], this.span.Length); + this.span.CopyTo(newSpan); + this.fixedBuffer[newSpan.Length] = 0; + this.span = newSpan; } else { - this.RentedBuffer = ArrayPool.Shared.Rent(this.span.Length + 1); - var newSpan = this.RentedBuffer.AsSpan(0, this.span.Length); + this.rentedBuffer = ArrayPool.Shared.Rent(this.span.Length + 1); + var newSpan = this.rentedBuffer.AsSpan(0, this.span.Length); this.span.CopyTo(newSpan); - this.RentedBuffer[newSpan.Length] = 0; + this.rentedBuffer[newSpan.Length] = 0; } this.state |= State.NullTerminated; @@ -128,19 +150,30 @@ public ref struct AutoUtf8Buffer : IDisposable } } + private unsafe Span EffectiveBuffer => + this.rentedBuffer is { } rentedBuffer + ? rentedBuffer.AsSpan() + : MemoryMarshal.CreateSpan(ref this.fixedBuffer[0], FixedBufferSize); + + private Span RemainingBuffer => this.EffectiveBuffer[this.span.Length..]; + public static implicit operator AutoUtf8Buffer(ReadOnlySpan text) => new(text); public static implicit operator AutoUtf8Buffer(ReadOnlyMemory text) => new(text); + public static implicit operator AutoUtf8Buffer(Span text) => new(text); + public static implicit operator AutoUtf8Buffer(Memory text) => new(text); public static implicit operator AutoUtf8Buffer(ReadOnlySpan text) => new(text); public static implicit operator AutoUtf8Buffer(ReadOnlyMemory text) => new(text); + public static implicit operator AutoUtf8Buffer(Span text) => new(text); + public static implicit operator AutoUtf8Buffer(Memory text) => new(text); public static implicit operator AutoUtf8Buffer(string? text) => new(text); public static unsafe implicit operator AutoUtf8Buffer(byte* text) => new(text); public static unsafe implicit operator AutoUtf8Buffer(char* text) => new(text); public void Dispose() { - if (this.RentedBuffer is { } rentedBuffer) + if (this.rentedBuffer is { } rentedBuffer) { - this.RentedBuffer = null; + this.rentedBuffer = null; this.span = default; ArrayPool.Shared.Return(rentedBuffer); } @@ -148,7 +181,7 @@ public ref struct AutoUtf8Buffer : IDisposable this.state = State.None; } - public AutoUtf8Buffer MoveOrDefault(AutoUtf8Buffer other) + public AutoUtf8Buffer MoveOrDefault([InterpolatedStringHandlerArgument] AutoUtf8Buffer other) { if (this.IsInitialized) { @@ -161,5 +194,87 @@ public ref struct AutoUtf8Buffer : IDisposable return other; } - public override readonly string ToString() => Encoding.UTF8.GetString(this.span); + public override readonly string ToString() => Encoding.UTF8.GetString(this.Span); + + public void AppendLiteral(string value) + { + if (string.IsNullOrEmpty(value)) + return; + + var remaining = this.RemainingBuffer; + var len = Encoding.UTF8.GetByteCount(value); + if (remaining.Length <= len) + this.IncreaseBuffer(out remaining, this.span.Length + len + 1); + Encoding.UTF8.GetBytes(value.AsSpan(), remaining); + var newSpan = this.EffectiveBuffer[..(this.span.Length + len + 1)]; + newSpan[^1] = 0; + this.span = newSpan[..^1]; + } + + public void AppendFormatted(T value) => this.AppendFormatted(value, null); + + public void AppendFormatted(T value, string? format) + { + var remaining = this.RemainingBuffer; + int written; + while (!Utf8.TryWrite(remaining, this.formatProvider, $"{value}", out written)) + this.IncreaseBuffer(out remaining); + + var newSpan = this.EffectiveBuffer[..(this.span.Length + written + 1)]; + newSpan[^1] = 0; + this.span = newSpan[..^1]; + } + + public void AppendFormatted(T value, int alignment) => this.AppendFormatted(value, alignment, null); + + public void AppendFormatted(T value, int alignment, string? format) + { + var startingPos = this.span.Length; + this.AppendFormatted(value, format); + var appendedLength = this.span.Length - startingPos; + + var leftAlign = alignment < 0; + if (leftAlign) + alignment = -alignment; + + var fillLength = alignment - appendedLength; + if (fillLength <= 0) + return; + + var destination = this.EffectiveBuffer; + if (fillLength > destination.Length - this.span.Length) + { + this.IncreaseBuffer(out _, fillLength + 1); + destination = this.EffectiveBuffer; + } + + if (leftAlign) + { + destination.Slice(this.span.Length, fillLength).Fill((byte)' '); + } + else + { + destination.Slice(startingPos, appendedLength).CopyTo(destination[(startingPos + fillLength)..]); + destination.Slice(startingPos, fillLength).Fill((byte)' '); + } + + var newSpan = destination[..(this.span.Length + fillLength + 1)]; + newSpan[^1] = 0; + this.span = newSpan[..^1]; + } + + private void IncreaseBuffer(out Span remaining, int minCapacity = 0) + { + minCapacity = Math.Max(minCapacity, Math.Max(this.EffectiveBuffer.Length * 2, MinimumRentSize)); + var newBuffer = ArrayPool.Shared.Rent(minCapacity); + this.Span.CopyTo(newBuffer); + newBuffer[this.span.Length] = 0; + this.span = newBuffer.AsSpan(0, this.span.Length); + if (this.rentedBuffer is not null) + ArrayPool.Shared.Return(this.rentedBuffer); + + this.rentedBuffer = newBuffer; + this.state &= ~State.OwnedSpan; + remaining = newBuffer.AsSpan(this.span.Length); + } } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImDrawList.Custom.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImDrawList.Custom.cs index ccfea499f..1df64401e 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImDrawList.Custom.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImDrawList.Custom.cs @@ -1,17 +1,18 @@ using System.Numerics; +using System.Runtime.CompilerServices; namespace Dalamud.Bindings.ImGui; public unsafe partial struct ImDrawList { - public void AddText(Vector2 pos, uint col, AutoUtf8Buffer text) + public void AddText(Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (ImDrawList* thisPtr = &this) ImGui.AddText(thisPtr, pos, col, text); } public void AddText( - ImFontPtr font, float fontSize, Vector2 pos, uint col, AutoUtf8Buffer text, float wrapWidth, + ImFontPtr font, float fontSize, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth, scoped in Vector4 cpuFineClipRect) { fixed (ImDrawList* thisPtr = &this) @@ -19,7 +20,7 @@ public unsafe partial struct ImDrawList } public void AddText( - ImFontPtr font, float fontSize, Vector2 pos, uint col, AutoUtf8Buffer text, float wrapWidth = 0f) + ImFontPtr font, float fontSize, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth = 0f) { fixed (ImDrawList* thisPtr = &this) ImGui.AddText(thisPtr, font, fontSize, pos, col, text, wrapWidth); @@ -28,15 +29,15 @@ public unsafe partial struct ImDrawList public partial struct ImDrawListPtr { - public void AddText(Vector2 pos, uint col, AutoUtf8Buffer text) => + public void AddText(Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) => ImGui.AddText(this, pos, col, text); public void AddText( - ImFontPtr font, float fontSize, Vector2 pos, uint col, AutoUtf8Buffer text, float wrapWidth, + ImFontPtr font, float fontSize, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth, scoped in Vector4 cpuFineClipRect) => ImGui.AddText(this, font, fontSize, pos, col, text, wrapWidth, cpuFineClipRect); public void AddText( - ImFontPtr font, float fontSize, Vector2 pos, uint col, AutoUtf8Buffer text, float wrapWidth = 0f) => + ImFontPtr font, float fontSize, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth = 0f) => ImGui.AddText(this, font, fontSize, pos, col, text, wrapWidth); } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImFont.Custom.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImFont.Custom.cs index 1378fbde5..7e7dd9f90 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImFont.Custom.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImFont.Custom.cs @@ -1,4 +1,5 @@ using System.Numerics; +using System.Runtime.CompilerServices; namespace Dalamud.Bindings.ImGui; @@ -13,7 +14,7 @@ public unsafe partial struct ImFont public readonly void RenderText( ImDrawListPtr drawList, float size, Vector2 pos, uint col, Vector4 clipRect, - AutoUtf8Buffer text, float wrapWidth = 0.0f, bool cpuFineClip = false) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth = 0.0f, bool cpuFineClip = false) { fixed (ImFont* thisPtr = &this) ImGui.RenderText(thisPtr, drawList, size, pos, col, clipRect, text, wrapWidth, cpuFineClip); @@ -22,11 +23,11 @@ public unsafe partial struct ImFont public partial struct ImFontPtr { - public readonly int CalcWordWrapPositionA(float scale, AutoUtf8Buffer text, float wrapWidth) => + public readonly int CalcWordWrapPositionA(float scale, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth) => ImGui.CalcWordWrapPositionA(this, scale, text, wrapWidth); public readonly void RenderText( - ImDrawListPtr drawList, float size, Vector2 pos, uint col, Vector4 clipRect, AutoUtf8Buffer text, + ImDrawListPtr drawList, float size, Vector2 pos, uint col, Vector4 clipRect, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth = 0.0f, bool cpuFineClip = false) => ImGui.RenderText(this, drawList, size, pos, col, clipRect, text, wrapWidth, cpuFineClip); } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImFontGlyphRangesBuilder.Custom.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImFontGlyphRangesBuilder.Custom.cs index 26a189318..f654dc7a5 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImFontGlyphRangesBuilder.Custom.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImFontGlyphRangesBuilder.Custom.cs @@ -1,8 +1,10 @@ +using System.Runtime.CompilerServices; + namespace Dalamud.Bindings.ImGui; public unsafe partial struct ImFontGlyphRangesBuilder { - public void AddText(AutoUtf8Buffer text) + public void AddText([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (ImFontGlyphRangesBuilder* thisPtr = &this) ImGui.AddText(thisPtr, text); @@ -11,5 +13,5 @@ public unsafe partial struct ImFontGlyphRangesBuilder public partial struct ImFontGlyphRangesBuilderPtr { - public void AddText(AutoUtf8Buffer text) => ImGui.AddText(this, text); + public void AddText([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) => ImGui.AddText(this, text); } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.ColorEditPicker.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.ColorEditPicker.cs index 2654bfa95..6029d2565 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.ColorEditPicker.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.ColorEditPicker.cs @@ -1,14 +1,82 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; -using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; namespace Dalamud.Bindings.ImGui; [SuppressMessage("ReSharper", "InconsistentNaming")] public static unsafe partial class ImGui { -// DISCARDED: ColorEdit3 -// DISCARDED: ColorEdit4 -// DISCARDED: ColorPicker3 -// DISCARDED: ColorPicker4 + public static bool ColorEdit3( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector3 col, ImGuiColorEditFlags flags = ImGuiColorEditFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (Vector3* colPtr = &col) + { + var res = ImGuiNative.ColorEdit3(labelPtr, &colPtr->X, flags) != 0; + label.Dispose(); + return res; + } + } + + public static bool ColorEdit4( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 col, ImGuiColorEditFlags flags = ImGuiColorEditFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (Vector4* colPtr = &col) + { + var res = ImGuiNative.ColorEdit4(labelPtr, &colPtr->X, flags) != 0; + label.Dispose(); + return res; + } + } + + public static bool ColorPicker3( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector3 col, ImGuiColorEditFlags flags = ImGuiColorEditFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (Vector3* colPtr = &col) + { + var res = ImGuiNative.ColorPicker3(labelPtr, &colPtr->X, flags) != 0; + label.Dispose(); + return res; + } + } + + public static bool ColorPicker4( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 col, ImGuiColorEditFlags flags = ImGuiColorEditFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (Vector4* colPtr = &col) + { + var res = ImGuiNative.ColorPicker4(labelPtr, &colPtr->X, flags, null) != 0; + label.Dispose(); + return res; + } + } + + public static bool ColorPicker4( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 col, ImGuiColorEditFlags flags, scoped in Vector4 refCol) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (Vector4* colPtr = &col) + fixed (Vector4* refColPtr = &refCol) + { + var res = ImGuiNative.ColorPicker4(labelPtr, &colPtr->X, flags, &refColPtr->X) != 0; + label.Dispose(); + return res; + } + } + + public static bool ColorPicker4([InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 col, scoped in Vector4 refCol) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (Vector4* colPtr = &col) + fixed (Vector4* refColPtr = &refCol) + { + var res = ImGuiNative.ColorPicker4(labelPtr, &colPtr->X, ImGuiColorEditFlags.None, &refColPtr->X) != 0; + label.Dispose(); + return res; + } + } } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.DragScalar.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.DragScalar.cs index 1d83bb23f..a03e41973 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.DragScalar.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.DragScalar.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Dalamud.Bindings.ImGui; @@ -8,98 +9,98 @@ namespace Dalamud.Bindings.ImGui; public static unsafe partial class ImGui { public static bool DragSByte( - AutoUtf8Buffer label, scoped ref sbyte v, float vSpeed = 1.0f, sbyte vMin = 0, sbyte vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref sbyte v, float vSpeed = 1.0f, sbyte vMin = 0, sbyte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S8, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%hhd"u8), flags); public static bool DragSByte( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, sbyte vMin = 0, sbyte vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, sbyte vMin = 0, sbyte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S8, v, vSpeed, vMin, vMax, format.MoveOrDefault("%hhd"u8), flags); public static bool DragByte( - AutoUtf8Buffer label, scoped ref byte v, float vSpeed = 1.0f, byte vMin = 0, byte vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref byte v, float vSpeed = 1.0f, byte vMin = 0, byte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U8, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%hhu"u8), flags); public static bool DragByte( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, byte vMin = 0, byte vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, byte vMin = 0, byte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U8, v, vSpeed, vMin, vMax, format.MoveOrDefault("%hhu"u8), flags); public static bool DragShort( - AutoUtf8Buffer label, scoped ref short v, float vSpeed = 1.0f, short vMin = 0, short vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref short v, float vSpeed = 1.0f, short vMin = 0, short vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S16, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%hd"u8), flags); public static bool DragShort( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, short vMin = 0, short vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, short vMin = 0, short vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S16, v, vSpeed, vMin, vMax, format.MoveOrDefault("%hd"u8), flags); public static bool DragUShort( - AutoUtf8Buffer label, scoped ref ushort v, float vSpeed = 1.0f, ushort vMin = 0, ushort vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref ushort v, float vSpeed = 1.0f, ushort vMin = 0, ushort vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U16, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%hu"u8), flags); public static bool DragUShort( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, ushort vMin = 0, ushort vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, ushort vMin = 0, ushort vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U16, v, vSpeed, vMin, vMax, format.MoveOrDefault("%hu"u8), flags); public static bool DragInt( - AutoUtf8Buffer label, scoped ref int v, float vSpeed = 1.0f, int vMin = 0, int vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref int v, float vSpeed = 1.0f, int vMin = 0, int vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S32, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%d"u8), flags); public static bool DragInt( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, int vMin = 0, int vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, int vMin = 0, int vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S32, v, vSpeed, vMin, vMax, format.MoveOrDefault("%d"u8), flags); public static bool DragUInt( - AutoUtf8Buffer label, scoped ref uint v, float vSpeed = 1.0f, uint vMin = 0, uint vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref uint v, float vSpeed = 1.0f, uint vMin = 0, uint vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U32, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%u"u8), flags); public static bool DragUInt( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, uint vMin = 0, uint vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, uint vMin = 0, uint vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U32, v, vSpeed, vMin, vMax, format.MoveOrDefault("%u"u8), flags); public static bool DragLong( - AutoUtf8Buffer label, scoped ref long v, float vSpeed = 1.0f, long vMin = 0, long vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref long v, float vSpeed = 1.0f, long vMin = 0, long vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S64, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%I64d"u8), flags); public static bool DragLong( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, long vMin = 0, long vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, long vMin = 0, long vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.S64, v, vSpeed, vMin, vMax, format.MoveOrDefault("%I64d"u8), flags); public static bool DragULong( - AutoUtf8Buffer label, scoped ref ulong v, float vSpeed = 1.0f, ulong vMin = 0, ulong vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref ulong v, float vSpeed = 1.0f, ulong vMin = 0, ulong vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U64, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%I64u"u8), flags); public static bool DragULong( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, ulong vMin = 0, ulong vMax = 0, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, ulong vMin = 0, ulong vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.U64, v, vSpeed, vMin, vMax, format.MoveOrDefault("%I64u"u8), flags); public static bool DragFloat( - AutoUtf8Buffer label, scoped ref float v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref float v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.Float, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); public static bool DragFloat( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.Float, v, vSpeed, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); public static bool DragFloat2( - AutoUtf8Buffer label, scoped ref Vector2 v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector2 v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar( label, ImGuiDataType.Float, @@ -111,8 +112,8 @@ public static unsafe partial class ImGui flags); public static bool DragFloat3( - AutoUtf8Buffer label, scoped ref Vector3 v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector3 v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar( label, ImGuiDataType.Float, @@ -124,8 +125,8 @@ public static unsafe partial class ImGui flags); public static bool DragFloat4( - AutoUtf8Buffer label, scoped ref Vector4 v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 v, float vSpeed = 1.0f, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar( label, ImGuiDataType.Float, @@ -137,22 +138,22 @@ public static unsafe partial class ImGui flags); public static bool DragDouble( - AutoUtf8Buffer label, scoped ref double v, float vSpeed = 1.0f, double vMin = 0.0f, double vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref double v, float vSpeed = 1.0f, double vMin = 0.0f, double vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.Double, ref v, vSpeed, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); public static bool DragDouble( - AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, double vMin = 0.0f, double vMax = 0.0f, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vSpeed = 1.0f, double vMin = 0.0f, double vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => DragScalar(label, ImGuiDataType.Double, v, vSpeed, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); public static bool DragScalar( - AutoUtf8Buffer label, ImGuiDataType dataType, scoped ref T v, float vSpeed, scoped in T vMin, scoped in T vMax, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ImGuiDataType dataType, scoped ref T v, float vSpeed, scoped in T vMin, scoped in T vMax, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) where T : unmanaged, INumber, IBinaryNumber { - fixed (byte* labelPtr = label.Span) - fixed (byte* formatPtr = format.IsInitialized ? format.Span : null) + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) fixed (T* vPtr = &v) fixed (T* vMinPtr = &vMin) fixed (T* vMaxPtr = &vMax) @@ -173,12 +174,12 @@ public static unsafe partial class ImGui } public static bool DragScalar( - AutoUtf8Buffer label, ImGuiDataType dataType, Span v, float vSpeed, scoped in T vMin, scoped in T vMax, - AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ImGuiDataType dataType, Span v, float vSpeed, scoped in T vMin, scoped in T vMax, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) where T : unmanaged, INumber, IBinaryNumber { - fixed (byte* labelPtr = label.Span) - fixed (byte* formatPtr = format.IsInitialized ? format.Span : null) + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) fixed (T* vPtr = v) fixed (T* vMinPtr = &vMin) fixed (T* vMaxPtr = &vMax) @@ -199,6 +200,59 @@ public static unsafe partial class ImGui } } -// DISCARDED: DragFloatRange2 -// DISCARDED: DragIntRange2 + public static bool DragFloatRange2( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ref float vCurrentMin, ref float vCurrentMax, float vSpeed = 1.0f, float vMin = 0.0f, + float vMax = 0.0f, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, [InterpolatedStringHandlerArgument] AutoUtf8Buffer formatMax = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (float* vCurrentMinPtr = &vCurrentMin) + fixed (float* vCurrentMaxPtr = &vCurrentMax) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : "%.3f"u8) + fixed (byte* formatMaxPtr = formatMax.IsInitialized ? formatMax.NullTerminatedSpan : null) + { + var res = ImGuiNative.DragFloatRange2( + labelPtr, + vCurrentMinPtr, + vCurrentMaxPtr, + vSpeed, + vMin, + vMax, + formatPtr, + formatMaxPtr, + flags); + label.Dispose(); + format.Dispose(); + formatMax.Dispose(); + return res != 0; + } + } + + public static bool DragIntRange2( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ref int vCurrentMin, ref int vCurrentMax, float vSpeed = 1.0f, int vMin = 0, int vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, [InterpolatedStringHandlerArgument] AutoUtf8Buffer formatMax = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (int* vCurrentMinPtr = &vCurrentMin) + fixed (int* vCurrentMaxPtr = &vCurrentMax) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : "%d"u8) + fixed (byte* formatMaxPtr = formatMax.IsInitialized ? formatMax.NullTerminatedSpan : null) + { + var res = ImGuiNative.DragIntRange2( + labelPtr, + vCurrentMinPtr, + vCurrentMaxPtr, + vSpeed, + vMin, + vMax, + formatPtr, + formatMaxPtr, + flags); + label.Dispose(); + format.Dispose(); + formatMax.Dispose(); + return res != 0; + } + } } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.InputScalar.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.InputScalar.cs index dd39e4cc0..492edaec9 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.InputScalar.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.InputScalar.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Dalamud.Bindings.ImGui; @@ -7,15 +8,190 @@ namespace Dalamud.Bindings.ImGui; [SuppressMessage("ReSharper", "InconsistentNaming")] public static unsafe partial class ImGui { -// DISCARDED: InputDouble -// DISCARDED: InputFloat -// DISCARDED: InputFloat2 -// DISCARDED: InputFloat3 -// DISCARDED: InputFloat4 -// DISCARDED: InputInt -// DISCARDED: InputInt2 -// DISCARDED: InputInt3 -// DISCARDED: InputInt4 -// DISCARDED: InputScalar -// DISCARDED: InputScalarN + public static bool InputSByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref sbyte data, sbyte step = 0, sbyte stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S8, ref data, step, stepFast, format.MoveOrDefault("%hhd"u8), flags); + + public static bool InputSByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, sbyte step = 0, sbyte stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S8, data, step, stepFast, format.MoveOrDefault("%hhd"u8), flags); + + public static bool InputByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref byte data, byte step = 0, byte stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U8, ref data, step, stepFast, format.MoveOrDefault("%hhu"u8), flags); + + public static bool InputByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, byte step = 0, byte stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U8, data, step, stepFast, format.MoveOrDefault("%hhu"u8), flags); + + public static bool InputShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref short data, short step = 0, short stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S16, ref data, step, stepFast, format.MoveOrDefault("%hd"u8), flags); + + public static bool InputShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, short step = 0, short stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S16, data, step, stepFast, format.MoveOrDefault("%hd"u8), flags); + + public static bool InputUShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref ushort data, ushort step = 0, ushort stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U16, ref data, step, stepFast, format.MoveOrDefault("%hu"u8), flags); + + public static bool InputUShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, ushort step = 0, ushort stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U16, data, step, stepFast, format.MoveOrDefault("%hu"u8), flags); + + public static bool InputInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref int data, int step = 0, int stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S32, ref data, step, stepFast, format.MoveOrDefault("%d"u8), flags); + + public static bool InputInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, int step = 0, int stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S32, data, step, stepFast, format.MoveOrDefault("%d"u8), flags); + + public static bool InputUInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref uint data, uint step = 0, uint stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U32, ref data, step, stepFast, format.MoveOrDefault("%u"u8), flags); + + public static bool InputUInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, uint step = 0, uint stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U32, data, step, stepFast, format.MoveOrDefault("%u"u8), flags); + + public static bool InputLong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref long data, long step = 0, long stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S64, ref data, step, stepFast, format.MoveOrDefault("%I64d"u8), flags); + + public static bool InputLong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, long step = 0, long stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.S64, data, step, stepFast, format.MoveOrDefault("%I64d"u8), flags); + + public static bool InputULong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref ulong data, ulong step = 0, ulong stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U64, ref data, step, stepFast, format.MoveOrDefault("%I64u"u8), flags); + + public static bool InputULong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, ulong step = 0, ulong stepFast = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.U64, data, step, stepFast, format.MoveOrDefault("%I64u"u8), flags); + + public static bool InputFloat( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref float data, float step = 0.0f, float stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.Float, ref data, step, stepFast, format.MoveOrDefault("%.3f"u8), flags); + + public static bool InputFloat( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, float step = 0.0f, float stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.Float, data, step, stepFast, format.MoveOrDefault("%.3f"u8), flags); + + public static bool InputFloat2( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector2 data, float step = 0.0f, float stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar( + label, + ImGuiDataType.Float, + MemoryMarshal.Cast(new(ref data)), + step, + stepFast, + format.MoveOrDefault("%.3f"u8), + flags); + + public static bool InputFloat3( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector3 data, float step = 0.0f, float stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar( + label, + ImGuiDataType.Float, + MemoryMarshal.Cast(new(ref data)), + step, + stepFast, + format.MoveOrDefault("%.3f"u8), + flags); + + public static bool InputFloat4( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 data, float step = 0.0f, float stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar( + label, + ImGuiDataType.Float, + MemoryMarshal.Cast(new(ref data)), + step, + stepFast, + format.MoveOrDefault("%.3f"u8), + flags); + + public static bool InputDouble( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref double data, double step = 0.0f, double stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.Double, ref data, step, stepFast, format.MoveOrDefault("%.3f"u8), flags); + + public static bool InputDouble( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span data, double step = 0.0f, double stepFast = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) => + InputScalar(label, ImGuiDataType.Double, data, step, stepFast, format.MoveOrDefault("%.3f"u8), flags); + + public static bool InputScalar( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ImGuiDataType dataType, scoped ref T data, scoped in T step, scoped in T stepFast, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) + where T : unmanaged, IBinaryNumber + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) + fixed (T* dataPtr = &data) + fixed (T* stepPtr = &step) + fixed (T* stepFastPtr = &stepFast) + { + var res = ImGuiNative.InputScalar( + labelPtr, + dataType, + dataPtr, + stepPtr, + stepFastPtr, + formatPtr, + flags) != 0; + label.Dispose(); + format.Dispose(); + return res; + } + } + + public static bool InputScalar( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ImGuiDataType dataType, Span data, scoped in T step, scoped in T stepFast, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiInputTextFlags flags = ImGuiInputTextFlags.None) + where T : unmanaged, INumber, IBinaryNumber + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) + fixed (T* dataPtr = data) + fixed (T* stepPtr = &step) + fixed (T* stepFastPtr = &stepFast) + { + var res = ImGuiNative.InputScalarN( + labelPtr, + dataType, + dataPtr, + data.Length, + stepPtr, + stepFastPtr, + formatPtr, + flags) != 0; + label.Dispose(); + format.Dispose(); + return res; + } + } } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Misc.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Misc.cs index b45c20518..37bf0f51f 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Misc.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Misc.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Dalamud.Bindings.ImGui; @@ -8,7 +9,7 @@ namespace Dalamud.Bindings.ImGui; public static unsafe partial class ImGui { public static ImFontPtr AddFontFromFileTTF( - ImFontAtlasPtr self, AutoUtf8Buffer filename, float sizePixels, ImFontConfigPtr fontCfg = default, + ImFontAtlasPtr self, [InterpolatedStringHandlerArgument] AutoUtf8Buffer filename, float sizePixels, ImFontConfigPtr fontCfg = default, ushort* glyphRanges = null) { fixed (byte* filenamePtr = filename.NullTerminatedSpan) @@ -20,7 +21,7 @@ public static unsafe partial class ImGui } public static ImFontPtr AddFontFromMemoryCompressedBase85TTF( - ImFontAtlasPtr self, AutoUtf8Buffer compressedFontDatabase85, float sizePixels, + ImFontAtlasPtr self, [InterpolatedStringHandlerArgument] AutoUtf8Buffer compressedFontDatabase85, float sizePixels, ImFontConfigPtr fontCfg = default, ushort* glyphRanges = null) { fixed (byte* compressedFontDatabase85Ptr = compressedFontDatabase85.NullTerminatedSpan) @@ -64,6 +65,62 @@ public static unsafe partial class ImGui glyphRanges); } + public static ref bool GetBoolRef(ImGuiStoragePtr self, uint key, bool defaultValue = false) => + ref *ImGuiNative.GetBoolRef(self.Handle, key, defaultValue ? (byte)1 : (byte)0); + + public static ref float GetFloatRef(ImGuiStoragePtr self, uint key, float defaultValue = 0.0f) => + ref *ImGuiNative.GetFloatRef(self.Handle, key, defaultValue); + + public static ref int GetIntRef(ImGuiStoragePtr self, uint key, int defaultValue = 0) => + ref *ImGuiNative.GetIntRef(self.Handle, key, defaultValue); + + public static ref void* GetVoidPtrRef(ImGuiStoragePtr self, uint key, void* defaultValue = null) => + ref *ImGuiNative.GetVoidPtrRef(self.Handle, key, defaultValue); + + public static ref T* GetPtrRef(ImGuiStoragePtr self, uint key, T* defaultValue = null) + where T : unmanaged => + ref *(T**)ImGuiNative.GetVoidPtrRef(self.Handle, key, defaultValue); + + public static ref T GetRef(ImGuiStoragePtr self, uint key, T defaultValue = default) + where T : unmanaged + { + if (sizeof(T) > sizeof(void*)) + throw new ArgumentOutOfRangeException(nameof(T), typeof(T), null); + + return ref *(T*)ImGuiNative.GetVoidPtrRef(self.Handle, key, *(void**)&defaultValue); + } + + public static uint GetID([InterpolatedStringHandlerArgument] AutoUtf8Buffer strId) + { + fixed (byte* strIdPtr = strId.Span) + { + var r = ImGuiNative.GetID(strIdPtr, strIdPtr + strId.Length); + strId.Dispose(); + return r; + } + } + + public static uint GetID(nint ptrId) => ImGuiNative.GetID((void*)ptrId); + + public static uint GetID(nuint ptrId) => ImGuiNative.GetID((void*)ptrId); + + public static uint GetID(void* ptrId) => ImGuiNative.GetID(ptrId); + + public static void PushID([InterpolatedStringHandlerArgument] AutoUtf8Buffer strId) + { + fixed (byte* strIdPtr = strId.Span) + { + ImGuiNative.PushID(strIdPtr, strIdPtr + strId.Length); + strId.Dispose(); + } + } + + public static void PushID(nint ptrId) => ImGuiNative.PushID((void*)ptrId); + + public static void PushID(nuint ptrId) => ImGuiNative.PushID((void*)ptrId); + + public static void PushID(void* ptrId) => ImGuiNative.PushID(ptrId); + // DISCARDED: PlotHistogram // DISCARDED: PlotLines } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.SliderScalar.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.SliderScalar.cs index daa8f3dff..3afd37ec7 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.SliderScalar.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.SliderScalar.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Dalamud.Bindings.ImGui; @@ -7,18 +8,281 @@ namespace Dalamud.Bindings.ImGui; [SuppressMessage("ReSharper", "InconsistentNaming")] public static unsafe partial class ImGui { -// DISCARDED: SliderAngle -// DISCARDED: SliderFloat -// DISCARDED: SliderFloat2 -// DISCARDED: SliderFloat3 -// DISCARDED: SliderFloat4 -// DISCARDED: SliderInt -// DISCARDED: SliderInt2 -// DISCARDED: SliderInt3 -// DISCARDED: SliderInt4 -// DISCARDED: SliderScalar -// DISCARDED: SliderScalarN -// DISCARDED: VSliderFloat -// DISCARDED: VSliderInt -// DISCARDED: VSliderScalar + public static bool SliderSByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref sbyte v, sbyte vMin = 0, sbyte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S8, ref v, vMin, vMax, format.MoveOrDefault("%hhd"u8), flags); + + public static bool SliderSByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, sbyte vMin = 0, sbyte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S8, v, vMin, vMax, format.MoveOrDefault("%hhd"u8), flags); + + public static bool SliderByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref byte v, byte vMin = 0, byte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U8, ref v, vMin, vMax, format.MoveOrDefault("%hhu"u8), flags); + + public static bool SliderByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, byte vMin = 0, byte vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U8, v, vMin, vMax, format.MoveOrDefault("%hhu"u8), flags); + + public static bool SliderShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref short v, short vMin = 0, short vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S16, ref v, vMin, vMax, format.MoveOrDefault("%hd"u8), flags); + + public static bool SliderShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, short vMin = 0, short vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S16, v, vMin, vMax, format.MoveOrDefault("%hd"u8), flags); + + public static bool SliderUShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref ushort v, ushort vMin = 0, ushort vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U16, ref v, vMin, vMax, format.MoveOrDefault("%hu"u8), flags); + + public static bool SliderUShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, ushort vMin = 0, ushort vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U16, v, vMin, vMax, format.MoveOrDefault("%hu"u8), flags); + + public static bool SliderInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref int v, int vMin = 0, int vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S32, ref v, vMin, vMax, format.MoveOrDefault("%d"u8), flags); + + public static bool SliderInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, int vMin = 0, int vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S32, v, vMin, vMax, format.MoveOrDefault("%d"u8), flags); + + public static bool SliderUInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref uint v, uint vMin = 0, uint vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U32, ref v, vMin, vMax, format.MoveOrDefault("%u"u8), flags); + + public static bool SliderUInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, uint vMin = 0, uint vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U32, v, vMin, vMax, format.MoveOrDefault("%u"u8), flags); + + public static bool SliderLong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref long v, long vMin = 0, long vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S64, ref v, vMin, vMax, format.MoveOrDefault("%I64d"u8), flags); + + public static bool SliderLong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, long vMin = 0, long vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.S64, v, vMin, vMax, format.MoveOrDefault("%I64d"u8), flags); + + public static bool SliderULong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref ulong v, ulong vMin = 0, ulong vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U64, ref v, vMin, vMax, format.MoveOrDefault("%I64u"u8), flags); + + public static bool SliderULong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, ulong vMin = 0, ulong vMax = 0, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.U64, v, vMin, vMax, format.MoveOrDefault("%I64u"u8), flags); + + public static bool SliderFloat( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref float v, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.Float, ref v, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); + + public static bool SliderFloat( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.Float, v, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); + + public static bool SliderFloat2( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector2 v, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar( + label, + ImGuiDataType.Float, + MemoryMarshal.Cast(new(ref v)), + vMin, + vMax, + format.MoveOrDefault("%.3f"u8), + flags); + + public static bool SliderFloat3( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector3 v, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar( + label, + ImGuiDataType.Float, + MemoryMarshal.Cast(new(ref v)), + vMin, + vMax, + format.MoveOrDefault("%.3f"u8), + flags); + + public static bool SliderFloat4( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref Vector4 v, float vMin = 0.0f, float vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar( + label, + ImGuiDataType.Float, + MemoryMarshal.Cast(new(ref v)), + vMin, + vMax, + format.MoveOrDefault("%.3f"u8), + flags); + + public static bool SliderDouble( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, scoped ref double v, double vMin = 0.0f, double vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.Double, ref v, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); + + public static bool SliderDouble( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Span v, double vMin = 0.0f, double vMax = 0.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + SliderScalar(label, ImGuiDataType.Double, v, vMin, vMax, format.MoveOrDefault("%.3f"u8), flags); + + public static bool SliderScalar( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ImGuiDataType dataType, scoped ref T v, scoped in T vMin, scoped in T vMax, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) + where T : unmanaged, IBinaryNumber + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) + fixed (T* vPtr = &v) + fixed (T* vMinPtr = &vMin) + fixed (T* vMaxPtr = &vMax) + { + var res = ImGuiNative.SliderScalar( + labelPtr, + dataType, + vPtr, + vMinPtr, + vMaxPtr, + formatPtr, + flags) != 0; + label.Dispose(); + format.Dispose(); + return res; + } + } + + public static bool SliderScalar( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ImGuiDataType dataType, Span v, scoped in T vMin, scoped in T vMax, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) + where T : unmanaged, INumber, IBinaryNumber + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) + fixed (T* vPtr = v) + fixed (T* vMinPtr = &vMin) + fixed (T* vMaxPtr = &vMax) + { + var res = ImGuiNative.SliderScalarN( + labelPtr, + dataType, + vPtr, + v.Length, + vMinPtr, + vMaxPtr, + formatPtr, + flags) != 0; + label.Dispose(); + format.Dispose(); + return res; + } + } + + public static bool SliderAngle( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, ref float vRad, float vDegreesMin = -360.0f, float vDegreesMax = +360.0f, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : "%.0f deg"u8) + fixed (float* vRadPtr = &vRad) + { + var res = ImGuiNative.SliderAngle( + labelPtr, + vRadPtr, + vDegreesMin, + vDegreesMax, + formatPtr, + flags) != 0; + label.Dispose(); + format.Dispose(); + return res; + } + } + + public static bool VSliderSByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref sbyte v, sbyte vMin, sbyte vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.S8, ref v, vMin, vMax, format.MoveOrDefault("%hhd"), flags); + + public static bool VSliderByte( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref byte v, byte vMin, byte vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.U8, ref v, vMin, vMax, format.MoveOrDefault("%hhu"), flags); + + public static bool VSliderShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref short v, short vMin, short vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.S16, ref v, vMin, vMax, format.MoveOrDefault("%hd"), flags); + + public static bool VSliderUShort( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref ushort v, ushort vMin, ushort vMax, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.U16, ref v, vMin, vMax, format.MoveOrDefault("%hu"), flags); + + public static bool VSliderInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref int v, int vMin, int vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.S32, ref v, vMin, vMax, format.MoveOrDefault("%d"), flags); + + public static bool VSliderUInt( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref uint v, uint vMin, uint vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.U32, ref v, vMin, vMax, format.MoveOrDefault("%u"), flags); + + public static bool VSliderLong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref long v, long vMin, long vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.S32, ref v, vMin, vMax, format.MoveOrDefault("%I64d"), flags); + + public static bool VSliderULong( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref ulong v, ulong vMin, ulong vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.U32, ref v, vMin, vMax, format.MoveOrDefault("%I64u"), flags); + + public static bool VSliderFloat( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref float v, float vMin, float vMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.Float, ref v, vMin, vMax, format.MoveOrDefault("%.03f"), flags); + + public static bool VSliderDouble( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, scoped ref double v, double vMin, double vMax, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, + ImGuiSliderFlags flags = ImGuiSliderFlags.None) => + VSliderScalar(label, size, ImGuiDataType.Double, ref v, vMin, vMax, format.MoveOrDefault("%.03f"), flags); + + public static bool VSliderScalar( + [InterpolatedStringHandlerArgument] AutoUtf8Buffer label, Vector2 size, ImGuiDataType dataType, scoped ref T data, scoped in T min, scoped in T max, + [InterpolatedStringHandlerArgument] AutoUtf8Buffer format = default, ImGuiSliderFlags flags = ImGuiSliderFlags.None) + where T : unmanaged, IBinaryNumber + { + fixed (byte* labelPtr = label.NullTerminatedSpan) + fixed (byte* formatPtr = format.IsInitialized ? format.NullTerminatedSpan : null) + fixed (T* dataPtr = &data) + fixed (T* minPtr = &min) + fixed (T* maxPtr = &max) + { + var res = ImGuiNative.VSliderScalar(labelPtr, size, dataType, dataPtr, minPtr, maxPtr, formatPtr, flags) != + 0; + label.Dispose(); + format.Dispose(); + return res; + } + } } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Storage.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Storage.cs deleted file mode 100644 index 1aabbed69..000000000 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Storage.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Diagnostics.CodeAnalysis; - -namespace Dalamud.Bindings.ImGui; - -[SuppressMessage("ReSharper", "InconsistentNaming")] -public static unsafe partial class ImGui -{ - public static ref bool GetBoolRef(ImGuiStoragePtr self, uint key, bool defaultValue = false) => - ref *ImGuiNative.GetBoolRef(self.Handle, key, defaultValue ? (byte)1 : (byte)0); - - public static ref float GetFloatRef(ImGuiStoragePtr self, uint key, float defaultValue = 0.0f) => - ref *ImGuiNative.GetFloatRef(self.Handle, key, defaultValue); - - public static ref int GetIntRef(ImGuiStoragePtr self, uint key, int defaultValue = 0) => - ref *ImGuiNative.GetIntRef(self.Handle, key, defaultValue); - - public static ref void* GetVoidPtrRef(ImGuiStoragePtr self, uint key, void* defaultValue = null) => - ref *ImGuiNative.GetVoidPtrRef(self.Handle, key, defaultValue); - - public static ref T* GetPtrRef(ImGuiStoragePtr self, uint key, T* defaultValue = null) - where T : unmanaged => - ref *(T**)ImGuiNative.GetVoidPtrRef(self.Handle, key, defaultValue); - - public static ref T GetRef(ImGuiStoragePtr self, uint key, T defaultValue = default) - where T : unmanaged - { - if (sizeof(T) > sizeof(void*)) - throw new ArgumentOutOfRangeException(nameof(T), typeof(T), null); - - return ref *(T*)ImGuiNative.GetVoidPtrRef(self.Handle, key, *(void**)&defaultValue); - } - - public static uint GetID(AutoUtf8Buffer strId) - { - fixed (byte* strIdPtr = strId.Span) - { - var r = ImGuiNative.GetID(strIdPtr, strIdPtr + strId.Length); - strId.Dispose(); - return r; - } - } - - public static uint GetID(nint ptrId) => ImGuiNative.GetID((void*)ptrId); - - public static uint GetID(nuint ptrId) => ImGuiNative.GetID((void*)ptrId); - - public static uint GetID(void* ptrId) => ImGuiNative.GetID(ptrId); -} diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Text.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Text.cs index 2b10e62e2..972ca81bc 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Text.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGui.Text.cs @@ -1,19 +1,20 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Runtime.CompilerServices; namespace Dalamud.Bindings.ImGui; [SuppressMessage("ReSharper", "InconsistentNaming")] public static unsafe partial class ImGui { - public static void AddText(ImFontGlyphRangesBuilderPtr self, AutoUtf8Buffer text) + public static void AddText(ImFontGlyphRangesBuilderPtr self, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (byte* textPtr = text.Span) ImGuiNative.AddText(self.Handle, textPtr, textPtr + text.Length); text.Dispose(); } - public static void AddText(ImDrawListPtr self, Vector2 pos, uint col, AutoUtf8Buffer text) + public static void AddText(ImDrawListPtr self, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (byte* textPtr = text.Span) ImGuiNative.AddText(self.Handle, pos, col, textPtr, textPtr + text.Length); @@ -21,7 +22,7 @@ public static unsafe partial class ImGui } public static void AddText( - ImDrawListPtr self, ImFontPtr font, float fontSize, Vector2 pos, uint col, AutoUtf8Buffer text, float wrapWidth, + ImDrawListPtr self, ImFontPtr font, float fontSize, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth, scoped in Vector4 cpuFineClipRect) { fixed (byte* textPtr = text.Span) @@ -40,7 +41,7 @@ public static unsafe partial class ImGui } public static void AddText( - ImDrawListPtr self, ImFontPtr font, float fontSize, Vector2 pos, uint col, AutoUtf8Buffer text, + ImDrawListPtr self, ImFontPtr font, float fontSize, Vector2 pos, uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth = 0f) { fixed (byte* textPtr = text.Span) @@ -57,14 +58,14 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void append(ImGuiTextBufferPtr self, AutoUtf8Buffer str) + public static void append(ImGuiTextBufferPtr self, [InterpolatedStringHandlerArgument] AutoUtf8Buffer str) { fixed (byte* strPtr = str.Span) ImGuiNative.append(self.Handle, strPtr, strPtr + str.Length); str.Dispose(); } - public static void BulletText(AutoUtf8Buffer text) + public static void BulletText([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { ImGuiWindow* window = ImGuiP.GetCurrentWindow(); if (window->SkipItems != 0) @@ -94,7 +95,7 @@ public static unsafe partial class ImGui } public static Vector2 CalcTextSize( - AutoUtf8Buffer text, bool hideTextAfterDoubleHash = false, float wrapWidth = -1.0f) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, bool hideTextAfterDoubleHash = false, float wrapWidth = -1.0f) { var @out = Vector2.Zero; fixed (byte* textPtr = text.Span) @@ -109,7 +110,7 @@ public static unsafe partial class ImGui } public static Vector2 CalcTextSizeA( - ImFontPtr self, float size, float maxWidth, float wrapWidth, AutoUtf8Buffer text, out int remaining) + ImFontPtr self, float size, float maxWidth, float wrapWidth, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, out int remaining) { var @out = Vector2.Zero; fixed (byte* textPtr = text.Span) @@ -131,7 +132,7 @@ public static unsafe partial class ImGui return @out; } - public static int CalcWordWrapPositionA(ImFontPtr font, float scale, AutoUtf8Buffer text, float wrapWidth) + public static int CalcWordWrapPositionA(ImFontPtr font, float scale, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth) { fixed (byte* ptr = text.Span) { @@ -142,14 +143,14 @@ public static unsafe partial class ImGui } } - public static void InsertChars(ImGuiInputTextCallbackDataPtr self, int pos, AutoUtf8Buffer text) + public static void InsertChars(ImGuiInputTextCallbackDataPtr self, int pos, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (byte* ptr = text.Span) ImGuiNative.InsertChars(self.Handle, pos, ptr, ptr + text.Length); text.Dispose(); } - public static void LabelText(AutoUtf8Buffer label, AutoUtf8Buffer text) + public static void LabelText([InterpolatedStringHandlerArgument] AutoUtf8Buffer label, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { var window = ImGuiP.GetCurrentWindow().Handle; if (window->SkipItems != 0) @@ -194,7 +195,7 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void LogText(AutoUtf8Buffer text) + public static void LogText([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { var g = GetCurrentContext(); if (!g.LogFile.IsNull) @@ -212,7 +213,7 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void PassFilter(ImGuiTextFilterPtr self, AutoUtf8Buffer text) + public static void PassFilter(ImGuiTextFilterPtr self, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (byte* textPtr = text.Span) ImGuiNative.PassFilter(self.Handle, textPtr, textPtr + text.Length); @@ -221,7 +222,7 @@ public static unsafe partial class ImGui public static void RenderText( ImFontPtr self, ImDrawListPtr drawList, float size, Vector2 pos, uint col, Vector4 clipRect, - AutoUtf8Buffer text, float wrapWidth = 0.0f, bool cpuFineClip = false) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth = 0.0f, bool cpuFineClip = false) { fixed (byte* textPtr = text.Span) ImGuiNative.RenderText( @@ -238,7 +239,7 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void SetTooltip(AutoUtf8Buffer text) + public static void SetTooltip([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { ImGuiP.BeginTooltipEx(ImGuiTooltipFlags.OverridePreviousTooltip, ImGuiWindowFlags.None); Text(text.Span); @@ -246,14 +247,14 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void Text(AutoUtf8Buffer text) + public static void Text([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (byte* ptr = text.Span) ImGuiNative.TextUnformatted(ptr, ptr + text.Length); text.Dispose(); } - public static void TextColored(uint col, AutoUtf8Buffer text) + public static void TextColored(uint col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { PushStyleColor(ImGuiCol.Text, col); Text(text.Span); @@ -261,7 +262,7 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void TextColored(scoped in Vector4 col, AutoUtf8Buffer text) + public static void TextColored(scoped in Vector4 col, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { PushStyleColor(ImGuiCol.Text, col); Text(text.Span); @@ -269,19 +270,19 @@ public static unsafe partial class ImGui text.Dispose(); } - public static void TextDisabled(AutoUtf8Buffer text) + public static void TextDisabled([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { TextColored(*GetStyleColorVec4(ImGuiCol.TextDisabled), text.Span); text.Dispose(); } - public static void TextUnformatted(AutoUtf8Buffer text) + public static void TextUnformatted([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { Text(text.Span); text.Dispose(); } - public static void TextWrapped(AutoUtf8Buffer text) + public static void TextWrapped([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { scoped ref var g = ref *GetCurrentContext().Handle; var needBackup = g.CurrentWindow->DC.TextWrapPos < 0.0f; // Keep existing wrap position if one is already set @@ -293,7 +294,7 @@ public static unsafe partial class ImGui text.Dispose(); } - public static bool TreeNode(AutoUtf8Buffer label) + public static bool TreeNode([InterpolatedStringHandlerArgument] AutoUtf8Buffer label) { var window = ImGuiP.GetCurrentWindow(); if (window.SkipItems) @@ -315,7 +316,7 @@ public static unsafe partial class ImGui } public static bool TreeNodeEx( - AutoUtf8Buffer id, ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags.None, AutoUtf8Buffer label = default) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer id, ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags.None, [InterpolatedStringHandlerArgument] AutoUtf8Buffer label = default) { var window = ImGuiP.GetCurrentWindow(); bool res; diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiInputTextCallbackData.Custom.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiInputTextCallbackData.Custom.cs index 04776b9ec..9cc7d98f4 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiInputTextCallbackData.Custom.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiInputTextCallbackData.Custom.cs @@ -1,8 +1,10 @@ +using System.Runtime.CompilerServices; + namespace Dalamud.Bindings.ImGui; public unsafe partial struct ImGuiInputTextCallbackData { - public void InsertChars(int pos, AutoUtf8Buffer text) + public void InsertChars(int pos, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (ImGuiInputTextCallbackData* thisPtr = &this) ImGui.InsertChars(thisPtr, pos, text); @@ -11,5 +13,5 @@ public unsafe partial struct ImGuiInputTextCallbackData public partial struct ImGuiInputTextCallbackDataPtr { - public void InsertChars(int pos, AutoUtf8Buffer text) => ImGui.InsertChars(this, pos, text); + public void InsertChars(int pos, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) => ImGui.InsertChars(this, pos, text); } diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiP.Custom.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiP.Custom.cs index d7a0b6bf7..5b565c9f2 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiP.Custom.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiP.Custom.cs @@ -1,12 +1,13 @@ using System.Diagnostics; using System.Numerics; +using System.Runtime.CompilerServices; using System.Text; namespace Dalamud.Bindings.ImGui; public static unsafe partial class ImGuiP { - public static void DebugLog(AutoUtf8Buffer text) + public static void DebugLog([InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { var g = ImGui.GetCurrentContext().Handle; ImGui.append(&g->DebugLogBuf, $"[{g->FrameCount:00000}] "); @@ -39,7 +40,7 @@ public static unsafe partial class ImGuiP return before.Length; } - public static uint GetID(ImGuiWindowPtr self, AutoUtf8Buffer str) + public static uint GetID(ImGuiWindowPtr self, [InterpolatedStringHandlerArgument] AutoUtf8Buffer str) { fixed (byte* strPtr = str.Span) { @@ -63,7 +64,7 @@ public static unsafe partial class ImGuiP return ImGuiPNative.ImHashData(ptr, (nuint)data.Length, seed); } - public static uint ImHashStr(AutoUtf8Buffer data, uint seed = 0) + public static uint ImHashStr([InterpolatedStringHandlerArgument] AutoUtf8Buffer data, uint seed = 0) { fixed (byte* ptr = data.Span) { @@ -132,7 +133,7 @@ public static unsafe partial class ImGuiP return i; } - public static void LogRenderedText(scoped in Vector2 refPos, AutoUtf8Buffer text) + public static void LogRenderedText(scoped in Vector2 refPos, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text) { fixed (Vector2* refPosPtr = &refPos) fixed (byte* textPtr = text.Span) @@ -140,14 +141,14 @@ public static unsafe partial class ImGuiP text.Dispose(); } - public static void RenderText(Vector2 pos, AutoUtf8Buffer text, bool hideTextAfterHash = true) + public static void RenderText(Vector2 pos, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, bool hideTextAfterHash = true) { fixed (byte* textPtr = text.Span) ImGuiPNative.RenderText(pos, textPtr, textPtr + text.Length, hideTextAfterHash ? (byte)1 : (byte)0); text.Dispose(); } - public static void RenderTextWrapped(Vector2 pos, AutoUtf8Buffer text, float wrapWidth) + public static void RenderTextWrapped(Vector2 pos, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, float wrapWidth) { fixed (byte* textPtr = text.Span) ImGuiPNative.RenderTextWrapped(pos, textPtr, textPtr + text.Length, wrapWidth); @@ -155,7 +156,7 @@ public static unsafe partial class ImGuiP } public static void RenderTextClipped( - scoped in Vector2 posMin, scoped in Vector2 posMax, AutoUtf8Buffer text, scoped in Vector2? textSizeIfKnown = null, + scoped in Vector2 posMin, scoped in Vector2 posMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, scoped in Vector2? textSizeIfKnown = null, scoped in Vector2 align = default, scoped in ImRect? clipRect = null) { var textSizeIfKnownOrDefault = textSizeIfKnown ?? default; @@ -173,7 +174,7 @@ public static unsafe partial class ImGuiP } public static void RenderTextClippedEx( - ImDrawListPtr drawList, scoped in Vector2 posMin, scoped in Vector2 posMax, AutoUtf8Buffer text, + ImDrawListPtr drawList, scoped in Vector2 posMin, scoped in Vector2 posMax, [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, scoped in Vector2? textSizeIfKnown = null, scoped in Vector2 align = default, scoped in ImRect? clipRect = null) { var textSizeIfKnownOrDefault = textSizeIfKnown ?? default; @@ -193,7 +194,7 @@ public static unsafe partial class ImGuiP public static void RenderTextEllipsis( ImDrawListPtr drawList, scoped in Vector2 posMin, scoped in Vector2 posMax, float clipMaxX, float ellipsisMaxX, - AutoUtf8Buffer text, scoped in Vector2? textSizeIfKnown = null) + [InterpolatedStringHandlerArgument] AutoUtf8Buffer text, scoped in Vector2? textSizeIfKnown = null) { var textSizeIfKnownOrDefault = textSizeIfKnown ?? default; fixed (byte* textPtr = text.Span) diff --git a/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiWindow.Custom.cs b/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiWindow.Custom.cs index b9b4763fa..794f9febd 100644 --- a/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiWindow.Custom.cs +++ b/imgui/Dalamud.Bindings.ImGui/Custom/ImGuiWindow.Custom.cs @@ -1,8 +1,10 @@ +using System.Runtime.CompilerServices; + namespace Dalamud.Bindings.ImGui; public unsafe partial struct ImGuiWindow { - public readonly uint GetID(AutoUtf8Buffer str) + public readonly uint GetID([InterpolatedStringHandlerArgument] AutoUtf8Buffer str) { fixed (ImGuiWindow* thisPtr = &this) return ImGuiP.GetID(thisPtr, str); @@ -23,7 +25,7 @@ public unsafe partial struct ImGuiWindow public unsafe partial struct ImGuiWindowPtr { - public readonly uint GetID(AutoUtf8Buffer str) => ImGuiP.GetID(this.Handle, str); + public readonly uint GetID([InterpolatedStringHandlerArgument] AutoUtf8Buffer str) => ImGuiP.GetID(this.Handle, str); public readonly uint GetID(void* ptr) => ImGuiP.GetID(this.Handle, ptr);