Optimize rendering of large number of pairs

This commit is contained in:
Loporrit
2023-12-04 14:17:09 +00:00
parent 283d54aff6
commit 748d6184fc
6 changed files with 85 additions and 47 deletions

View File

@@ -6,6 +6,7 @@ using MareSynchronos.Services.ServerConfiguration;
using MareSynchronos.MareConfiguration;
using ImGuiScene;
using MareSynchronos.Services.Mediator;
using MareSynchronos.UI.Components;
namespace MareSynchronos.UI.Handlers;
@@ -32,6 +33,31 @@ public class UidDisplayHandler
_mareConfigService = mareConfigService;
}
public void RenderPairList(IEnumerable<DrawPairBase> pairs)
{
var textHeight = ImGui.GetFontSize();
var style = ImGui.GetStyle();
var framePadding = style.FramePadding;
var spacing = style.ItemSpacing;
var lineHeight = textHeight + framePadding.Y * 2 + spacing.Y;
var startY = ImGui.GetCursorStartPos().Y;
var cursorY = ImGui.GetCursorPosY();
var contentHeight = UiSharedService.GetWindowContentRegionHeight();
foreach (var entry in pairs)
{
if ((startY + cursorY) < -lineHeight || (startY + cursorY) > contentHeight)
{
cursorY += lineHeight;
ImGui.SetCursorPosY(cursorY);
continue;
}
using (ImRaii.PushId(entry.ImGuiID)) entry.DrawPairedClient();
cursorY += lineHeight;
}
}
public void DrawPairText(string id, Pair pair, float textPosX, float originalY, Func<float> editBoxWidth)
{
ImGui.SameLine(textPosX);