some caching stuff and bug fixes

This commit is contained in:
azyges
2025-10-22 03:20:13 +09:00
parent 1e97f27cb8
commit 1a89c2caee
5 changed files with 316 additions and 119 deletions

View File

@@ -7,6 +7,7 @@ using Dalamud.Interface.Utility;
using Lumina.Text;
using System;
using System.Numerics;
using System.Threading;
using DalamudSeString = Dalamud.Game.Text.SeStringHandling.SeString;
using DalamudSeStringBuilder = Dalamud.Game.Text.SeStringHandling.SeStringBuilder;
using LuminaSeStringBuilder = Lumina.Text.SeStringBuilder;
@@ -15,6 +16,9 @@ namespace LightlessSync.Utils;
public static class SeStringUtils
{
private static int _seStringHitboxCounter;
private static int _iconHitboxCounter;
public static DalamudSeString BuildFormattedPlayerName(string text, Vector4? textColor, Vector4? glowColor)
{
var b = new DalamudSeStringBuilder();
@@ -119,7 +123,7 @@ public static class SeStringUtils
ImGui.Dummy(new Vector2(0f, textSize.Y));
}
public static Vector2 RenderSeStringWithHitbox(DalamudSeString seString, Vector2 position, ImFontPtr? font = null)
public static Vector2 RenderSeStringWithHitbox(DalamudSeString seString, Vector2 position, ImFontPtr? font = null, string? id = null)
{
var drawList = ImGui.GetWindowDrawList();
@@ -137,12 +141,28 @@ public static class SeStringUtils
var textSize = ImGui.CalcTextSize(seString.TextValue);
ImGui.SetCursorScreenPos(position);
ImGui.InvisibleButton($"##hitbox_{Guid.NewGuid()}", textSize);
if (id is not null)
{
ImGui.PushID(id);
}
else
{
ImGui.PushID(Interlocked.Increment(ref _seStringHitboxCounter));
}
try
{
ImGui.InvisibleButton("##hitbox", textSize);
}
finally
{
ImGui.PopID();
}
return textSize;
}
public static Vector2 RenderIconWithHitbox(int iconId, Vector2 position, ImFontPtr? font = null)
public static Vector2 RenderIconWithHitbox(int iconId, Vector2 position, ImFontPtr? font = null, string? id = null)
{
var drawList = ImGui.GetWindowDrawList();
@@ -158,7 +178,23 @@ public static class SeStringUtils
var drawResult = ImGuiHelpers.CompileSeStringWrapped(iconMacro, drawParams);
ImGui.SetCursorScreenPos(position);
ImGui.InvisibleButton($"##iconHitbox_{Guid.NewGuid()}", drawResult.Size);
if (id is not null)
{
ImGui.PushID(id);
}
else
{
ImGui.PushID(Interlocked.Increment(ref _iconHitboxCounter));
}
try
{
ImGui.InvisibleButton("##iconHitbox", drawResult.Size);
}
finally
{
ImGui.PopID();
}
return drawResult.Size;
}