Optimize rendering of large number of pairs
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user