Fix issues arise through shared height

This commit is contained in:
Infi
2024-04-23 06:19:11 +02:00
parent 6452f937b5
commit fc8199b3e5
3 changed files with 16 additions and 11 deletions
+3
View File
@@ -201,6 +201,9 @@ internal class Tab
[NonSerialized] [NonSerialized]
public InputChannel? PreviousChannel; public InputChannel? PreviousChannel;
[NonSerialized]
public Guid Identifier = Guid.NewGuid();
~Tab() { MessagesMutex.Dispose(); } ~Tab() { MessagesMutex.Dispose(); }
internal bool Contains(Message message) { internal bool Contains(Message message) {
+2 -2
View File
@@ -67,8 +67,8 @@ internal class Message {
// Not stored in the database: // Not stored in the database:
internal int Hash { get; } internal int Hash { get; }
internal float? Height { get; set; } internal Dictionary<Guid, float?> Height { get; } = new();
internal bool IsVisible { get; set; } internal Dictionary<Guid, bool> IsVisible { get; } = new();
internal Message(ulong receiver, ChatCode code, List<Chunk> sender, List<Chunk> content, SeString senderSource, SeString contentSource) { internal Message(ulong receiver, ChatCode code, List<Chunk> sender, List<Chunk> content, SeString senderSource, SeString contentSource) {
Receiver = receiver; Receiver = receiver;
+11 -9
View File
@@ -895,8 +895,8 @@ public sealed class ChatLogWindow : Window
var message = tab.Messages[i]; var message = tab.Messages[i];
if (reset) if (reset)
{ {
message.Height = null; message.Height[tab.Identifier] = null;
message.IsVisible = false; message.IsVisible[tab.Identifier] = false;
} }
if (Plugin.Config.CollapseDuplicateMessages) if (Plugin.Config.CollapseDuplicateMessages)
@@ -933,7 +933,9 @@ public sealed class ChatLogWindow : Window
// message has rendered once // message has rendered once
// message isn't visible, so render dummy // message isn't visible, so render dummy
if (message is { Height: not null, IsVisible: false }) message.Height.TryGetValue(tab.Identifier, out var height);
message.IsVisible.TryGetValue(tab.Identifier, out var visible);
if (height != null && !visible)
{ {
var beforeDummy = ImGui.GetCursorPos(); var beforeDummy = ImGui.GetCursorPos();
@@ -941,10 +943,10 @@ public sealed class ChatLogWindow : Window
if (isTable) if (isTable)
ImGui.TableNextColumn(); ImGui.TableNextColumn();
ImGui.Dummy(new Vector2(10f, message.Height.Value)); ImGui.Dummy(new Vector2(10f, height.Value));
message.IsVisible = ImGui.IsItemVisible(); message.IsVisible[tab.Identifier] = ImGui.IsItemVisible();
if (message.IsVisible) if (message.IsVisible[tab.Identifier])
{ {
if (isTable) if (isTable)
ImGui.TableSetColumnIndex(0); ImGui.TableSetColumnIndex(0);
@@ -993,16 +995,16 @@ public sealed class ChatLogWindow : Window
DrawChunks(message.Content, true, handler, lineWidth); DrawChunks(message.Content, true, handler, lineWidth);
var afterDraw = ImGui.GetCursorScreenPos(); var afterDraw = ImGui.GetCursorScreenPos();
message.Height = ImGui.GetCursorPosY() - lastPos; message.Height[tab.Identifier] = ImGui.GetCursorPosY() - lastPos;
if (isTable && !moreCompact) if (isTable && !moreCompact)
{ {
message.Height -= oldCellPaddingY * 2; message.Height[tab.Identifier] -= oldCellPaddingY * 2;
beforeDraw.Y += oldCellPaddingY; beforeDraw.Y += oldCellPaddingY;
afterDraw.Y -= oldCellPaddingY; afterDraw.Y -= oldCellPaddingY;
} }
lastPos = ImGui.GetCursorPosY(); lastPos = ImGui.GetCursorPosY();
message.IsVisible = ImGui.IsRectVisible(beforeDraw, afterDraw); message.IsVisible[tab.Identifier] = ImGui.IsRectVisible(beforeDraw, afterDraw);
} }
} }
finally finally