Initial import of IC.Rebuild

This commit is contained in:
2026-10-13 22:55:05 +08:00
commit 16d61f7a5e
87 changed files with 17054 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
using Dalamud.Bindings.ImGui;
namespace ICRebuild.Runtime;
// All slider call sites use this helper so precise input has the same limits as dragging.
public sealed class PrecisionSliders
{
private float editing,firstClickValue;
private uint firstClickId;
private bool focus;
public bool Float(string label,ref float value,float min,float max)
{
ImGui.PushID(label);
var before=value;
var id=ImGui.GetID("slider");
var changed=ImGui.SliderFloat(label,ref value,min,max,"%.3f",ImGuiSliderFlags.AlwaysClamp|ImGuiSliderFlags.NoRoundToFormat);
if(ImGui.IsItemHovered() && ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left))
{
value=firstClickId==id ? firstClickValue : before;
changed=value!=before;
editing=value; focus=true;
ImGui.OpenPopup("输入精确数值");
}
else if(ImGui.IsItemClicked(ImGuiMouseButton.Left)) { firstClickId=id; firstClickValue=before; }
if(ImGui.IsItemHovered()) ImGui.SetTooltip($"双击输入精确数值,或 Ctrl+单击直接输入。当前值:{value:G9}");
if(ImGui.BeginPopup("输入精确数值"))
{
ImGui.TextUnformatted(label);
ImGui.Text($"范围:{min:G9} ~ {max:G9}");
if(focus) { ImGui.SetKeyboardFocusHere(); focus=false; }
ImGui.SetNextItemWidth(210);
var enter=ImGui.InputFloat("数值",ref editing,0,0,"%.6f",ImGuiInputTextFlags.EnterReturnsTrue|ImGuiInputTextFlags.AutoSelectAll);
if(!float.IsFinite(editing)) ImGui.TextUnformatted("请输入有限数值。");
ImGui.BeginDisabled(!float.IsFinite(editing));
var apply=ImGui.Button("确定");
ImGui.EndDisabled();
if((enter || apply) && float.IsFinite(editing))
{
value=Math.Clamp(editing,min,max); changed=true; ImGui.CloseCurrentPopup();
}
ImGui.SameLine();
if(ImGui.Button("取消")) ImGui.CloseCurrentPopup();
ImGui.TextUnformatted("超出范围的数值按上下限保存。");
ImGui.EndPopup();
}
ImGui.PopID();
return changed;
}
}