From 61937c5df386370e6032b5eaf2466cf07f3e1574 Mon Sep 17 00:00:00 2001 From: Theodore Turocy Date: Tue, 25 Nov 2025 13:35:03 +0000 Subject: [PATCH] Correct regression in information set drawing. When removing options for changing how information sets are drawn, the arrows indicating information sets at multiple levels were lost. This corrects that regression. Closes #643. --- src/gui/efglayout.cc | 76 ++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/src/gui/efglayout.cc b/src/gui/efglayout.cc index c876756f0..50604ad70 100644 --- a/src/gui/efglayout.cc +++ b/src/gui/efglayout.cc @@ -577,7 +577,7 @@ TreeLayout::ComputeNextInInfoset(const std::shared_ptr &p_entry) cons std::find(infoset->GetMembers().begin(), infoset->GetMembers().end(), p_entry->m_node)); while (member != infoset->GetMembers().end()) { auto member_entry = GetNodeEntry(*member); - if (member_entry != nullptr && p_entry->m_level == member_entry->m_level) { + if (member_entry != nullptr) { return member_entry; } ++member; @@ -729,54 +729,48 @@ void TreeLayout::RenderSubtree(wxDC &p_dc, bool p_noHints) const const int nextX = nextMember->m_x; const int nextY = nextMember->m_y; - if (parentEntry->m_x == nextX) { #ifdef __WXGTK__ - // A problem with using styled pens and user scaling on wxGTK - p_dc.SetPen(wxPen(m_doc->GetStyle().GetPlayerColor(parentEntry->m_node->GetPlayer()), 1, - wxPENSTYLE_SOLID)); + // A problem with using styled pens and user scaling on wxGTK + p_dc.SetPen(wxPen(m_doc->GetStyle().GetPlayerColor(parentEntry->m_node->GetPlayer()), 1, + wxPENSTYLE_SOLID)); #else - p_dc.SetPen(wxPen(m_doc->GetStyle().GetPlayerColor(parentEntry->m_node->GetPlayer()), 1, - wxPENSTYLE_DOT)); + p_dc.SetPen(wxPen(m_doc->GetStyle().GetPlayerColor(parentEntry->m_node->GetPlayer()), 1, + wxPENSTYLE_DOT)); #endif // __WXGTK__ - p_dc.DrawLine(parentEntry->m_x, parentEntry->m_y, parentEntry->m_x, nextY); - if (settings.GetInfosetJoin() == GBT_INFOSET_JOIN_CIRCLES) { - p_dc.DrawLine(parentEntry->m_x + parentEntry->GetSize(), parentEntry->m_y, - parentEntry->m_x + parentEntry->GetSize(), nextY); - } + p_dc.DrawLine(parentEntry->m_x, parentEntry->m_y, parentEntry->m_x, nextY); + if (settings.GetInfosetJoin() == GBT_INFOSET_JOIN_CIRCLES) { + p_dc.DrawLine(parentEntry->m_x + parentEntry->GetSize(), parentEntry->m_y, + parentEntry->m_x + parentEntry->GetSize(), nextY); + } - if (nextMember->m_x != parentEntry->m_x) { - // Draw a little arrow in the direction of the iset. - int startX, endX; - if (settings.GetInfosetJoin() == GBT_INFOSET_JOIN_LINES) { - startX = parentEntry->m_x; - endX = (startX + m_infosetSpacing * ((nextMember->m_x > parentEntry->m_x) ? 1 : -1)); - } - else { - if (nextMember->m_x < parentEntry->m_x) { - // information set is continued to the left - startX = parentEntry->m_x + parentEntry->GetSize(); - endX = parentEntry->m_x - m_infosetSpacing; - } - else { - // information set is continued to the right - startX = parentEntry->m_x; - endX = (parentEntry->m_x + parentEntry->GetSize() + m_infosetSpacing); - } - } - p_dc.DrawLine(startX, nextY, endX, nextY); - if (startX > endX) { - p_dc.DrawLine(endX, nextY, endX + m_infosetSpacing / 2, - nextY + m_infosetSpacing / 2); - p_dc.DrawLine(endX, nextY, endX + m_infosetSpacing / 2, - nextY - m_infosetSpacing / 2); + if (nextMember->m_x != parentEntry->m_x) { + // Draw a little arrow in the direction of the iset. + int startX, endX; + if (settings.GetInfosetJoin() == GBT_INFOSET_JOIN_LINES) { + startX = parentEntry->m_x; + endX = (startX + m_infosetSpacing * ((nextMember->m_x > parentEntry->m_x) ? 1 : -1)); + } + else { + if (nextMember->m_x < parentEntry->m_x) { + // information set is continued to the left + startX = parentEntry->m_x + parentEntry->GetSize(); + endX = parentEntry->m_x - m_infosetSpacing; } else { - p_dc.DrawLine(endX, nextY, endX - m_infosetSpacing / 2, - nextY + m_infosetSpacing / 2); - p_dc.DrawLine(endX, nextY, endX - m_infosetSpacing / 2, - nextY - m_infosetSpacing / 2); + // information set is continued to the right + startX = parentEntry->m_x; + endX = (parentEntry->m_x + parentEntry->GetSize() + m_infosetSpacing); } } + p_dc.DrawLine(startX, nextY, endX, nextY); + if (startX > endX) { + p_dc.DrawLine(endX, nextY, endX + m_infosetSpacing / 2, nextY + m_infosetSpacing / 2); + p_dc.DrawLine(endX, nextY, endX + m_infosetSpacing / 2, nextY - m_infosetSpacing / 2); + } + else { + p_dc.DrawLine(endX, nextY, endX - m_infosetSpacing / 2, nextY + m_infosetSpacing / 2); + p_dc.DrawLine(endX, nextY, endX - m_infosetSpacing / 2, nextY - m_infosetSpacing / 2); + } } } }