first commit
This commit is contained in:
98
SpotifyHonorific/Utils/ImGuiHelper.cs
Normal file
98
SpotifyHonorific/Utils/ImGuiHelper.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user