perf(ui): hoist invariants out of the chat-log card border loop

This commit is contained in:
2026-05-07 21:34:19 +02:00
parent cb612044ea
commit 36b92f0520
+11 -7
View File
@@ -1203,6 +1203,15 @@ public sealed class ChatLogWindow : Window
var maxLines = Plugin.Config.MaxLinesToRender; var maxLines = Plugin.Config.MaxLinesToRender;
var startLine = messages.Count > maxLines ? messages.Count - maxLines : 0; var startLine = messages.Count > maxLines ? messages.Count - maxLines : 0;
// Card-mode pre-loop hoist: theme/drawList/winLeft/winRight/border
// are invariant per DrawMessages call; only cursorY moves per row.
var theme = Plugin.ThemeRegistry.Active;
var drawList = ImGui.GetWindowDrawList();
var winLeft = ImGui.GetWindowPos().X;
var winRight = winLeft + ImGui.GetWindowSize().X;
var borderColorAbgr = ColourUtil.RgbaToAbgr((theme.Colors.Border & 0xFFFFFF00u) | 0x33u);
for (var i = startLine; i < messages.Count; i++) for (var i = startLine; i < messages.Count; i++)
{ {
var message = messages[i]; var message = messages[i];
@@ -1344,7 +1353,6 @@ public sealed class ChatLogWindow : Window
{ {
if (message.Sender.Count > 0) if (message.Sender.Count > 0)
{ {
var theme = Plugin.ThemeRegistry.Active;
var senderColor = Plugin.Functions.Chat.GetChannelColor(message.Code.Type) var senderColor = Plugin.Functions.Chat.GetChannelColor(message.Code.Type)
?? theme.Colors.TextPrimary; ?? theme.Colors.TextPrimary;
using (ImRaii.PushColor(ImGuiCol.Text, ColourUtil.RgbaToAbgr(senderColor))) using (ImRaii.PushColor(ImGuiCol.Text, ColourUtil.RgbaToAbgr(senderColor)))
@@ -1363,15 +1371,11 @@ public sealed class ChatLogWindow : Window
// Subtile Border-Bottom als Card-Trenner. Border-Farbe mit // Subtile Border-Bottom als Card-Trenner. Border-Farbe mit
// reduzierter Alpha (RGBA → 0x33) für dezente Trennung. // reduzierter Alpha (RGBA → 0x33) für dezente Trennung.
{ {
var theme = Plugin.ThemeRegistry.Active;
var rowEndY = ImGui.GetCursorScreenPos().Y; var rowEndY = ImGui.GetCursorScreenPos().Y;
var winLeft = ImGui.GetWindowPos().X; drawList.AddLine(
var winRight = winLeft + ImGui.GetWindowSize().X;
var borderRgba = (theme.Colors.Border & 0xFFFFFF00u) | 0x33u;
ImGui.GetWindowDrawList().AddLine(
new Vector2(winLeft + 4, rowEndY - 1), new Vector2(winLeft + 4, rowEndY - 1),
new Vector2(winRight - 4, rowEndY - 1), new Vector2(winRight - 4, rowEndY - 1),
ColourUtil.RgbaToAbgr(borderRgba), borderColorAbgr,
1f); 1f);
ImGui.Dummy(new Vector2(0, 2)); ImGui.Dummy(new Vector2(0, 2));
} }