99 lines
3.7 KiB
C#
99 lines
3.7 KiB
C#
|
|
|
|
using Dalamud.Interface.Utility;
|
|
using ImGuiNET;
|
|
using System.Numerics;
|
|
|
|
namespace SpotifyHonorific.Utils;
|
|
|
|
public class ImGuiHelper
|
|
{
|
|
// Source: https://github.com/Caraxi/Honorific/blob/1.4.1.0/ConfigWindow.cs#L826
|
|
private Vector3 editingColour = Vector3.One;
|
|
public bool DrawColorPicker(string label, ref Vector3? color, Vector2 checkboxSize)
|
|
{
|
|
var modified = false;
|
|
bool comboOpen;
|
|
ImGui.SetNextItemWidth(checkboxSize.X * 2);
|
|
if (color == null)
|
|
{
|
|
ImGui.PushStyleColor(ImGuiCol.FrameBg, 0xFFFFFFFF);
|
|
ImGui.PushStyleColor(ImGuiCol.FrameBgActive, 0xFFFFFFFF);
|
|
ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, 0xFFFFFFFF);
|
|
var p = ImGui.GetCursorScreenPos();
|
|
var dl = ImGui.GetWindowDrawList();
|
|
comboOpen = ImGui.BeginCombo(label, " ", ImGuiComboFlags.HeightLargest);
|
|
dl.AddLine(p, p + new Vector2(checkboxSize.X), 0xFF0000FF, 3f * ImGuiHelpers.GlobalScale);
|
|
ImGui.PopStyleColor(3);
|
|
}
|
|
else
|
|
{
|
|
ImGui.PushStyleColor(ImGuiCol.FrameBg, new Vector4(color.Value, 1));
|
|
ImGui.PushStyleColor(ImGuiCol.FrameBgActive, new Vector4(color.Value, 1));
|
|
ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, new Vector4(color.Value, 1));
|
|
comboOpen = ImGui.BeginCombo(label, " ", ImGuiComboFlags.HeightLargest);
|
|
ImGui.PopStyleColor(3);
|
|
}
|
|
|
|
if (comboOpen)
|
|
{
|
|
if (ImGui.IsWindowAppearing())
|
|
{
|
|
editingColour = color ?? Vector3.One;
|
|
}
|
|
if (ImGui.ColorButton($"##ColorPickClear", Vector4.One, ImGuiColorEditFlags.NoTooltip))
|
|
{
|
|
color = null;
|
|
modified = true;
|
|
ImGui.CloseCurrentPopup();
|
|
}
|
|
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
ImGui.SetTooltip("Clear selected colour");
|
|
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
|
}
|
|
var dl = ImGui.GetWindowDrawList();
|
|
dl.AddLine(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), 0xFF0000FF, 3f * ImGuiHelpers.GlobalScale);
|
|
|
|
if (color != null)
|
|
{
|
|
ImGui.SameLine();
|
|
if (ImGui.ColorButton($"##ColorPick_old", new Vector4(color.Value, 1), ImGuiColorEditFlags.NoTooltip))
|
|
{
|
|
ImGui.CloseCurrentPopup();
|
|
}
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
ImGui.SetTooltip("Revert to previous selection");
|
|
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
|
}
|
|
}
|
|
|
|
ImGui.SameLine();
|
|
|
|
if (ImGui.ColorButton("Confirm", new Vector4(editingColour, 1), ImGuiColorEditFlags.NoTooltip, new Vector2(ImGui.GetContentRegionAvail().X, ImGui.GetItemRectSize().Y)))
|
|
{
|
|
color = editingColour;
|
|
modified = true;
|
|
ImGui.CloseCurrentPopup();
|
|
}
|
|
var size = ImGui.GetItemRectSize();
|
|
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
dl.AddRectFilled(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), 0x33333333);
|
|
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
|
}
|
|
|
|
var textSize = ImGui.CalcTextSize("Confirm");
|
|
dl.AddText(ImGui.GetItemRectMin() + size / 2 - textSize / 2, ImGui.ColorConvertFloat4ToU32(new Vector4(editingColour, 1)) ^ 0x00FFFFFF, "Confirm");
|
|
ImGui.ColorPicker3($"##ColorPick", ref editingColour, ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview);
|
|
|
|
ImGui.EndCombo();
|
|
}
|
|
|
|
return modified;
|
|
}
|
|
}
|