Dalamud/Dalamud.Interface/Raii/Indent.cs

70 lines
1.8 KiB
C#

using ImGuiNET;
namespace Dalamud.Interface.Raii;
public static partial class ImRaii
{
public static Indent PushIndent(float f, bool scaled = true, bool condition = true)
=> new Indent().Push(f, scaled, condition);
public static Indent PushIndent(int i = 1, bool condition = true)
=> new Indent().Push(i, condition);
public sealed class Indent : IDisposable
{
public float Indentation { get; private set; }
public Indent Push(float indent, bool scaled = true, bool condition = true)
{
if (condition)
{
if (scaled)
indent *= InterfaceHelpers.GlobalScale;
IndentInternal(indent);
this.Indentation += indent;
}
return this;
}
public Indent Push(int i = 1, bool condition = true)
{
if (condition)
{
var spacing = i * ImGui.GetStyle().IndentSpacing;
IndentInternal(spacing);
this.Indentation += spacing;
}
return this;
}
public void Pop(float indent, bool scaled = true)
{
if (scaled)
indent *= InterfaceHelpers.GlobalScale;
IndentInternal(-indent);
this.Indentation -= indent;
}
public void Pop(int i)
{
var spacing = i * ImGui.GetStyle().IndentSpacing;
IndentInternal(-spacing);
this.Indentation -= spacing;
}
private static void IndentInternal(float indent)
{
if (indent < 0)
ImGui.Unindent(-indent);
else if (indent > 0)
ImGui.Indent(indent);
}
public void Dispose()
=> this.Pop(this.Indentation, false);
}
}