From bc15ae0812face687162f3d2ca9fac05a325a7ca Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 4 Jul 2025 18:28:47 -0500 Subject: [PATCH] GUI: render more than the previous/next pattern no more silly length-1 tricks --- src/gui/pattern.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index c0f6334e5..83d3a4532 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -1218,12 +1218,25 @@ void FurnaceGUI::drawPattern() { // previous pattern ImGui::PushStyleVar(ImGuiStyleVar_FrameShading,0.0f); if (settings.viewPrevPattern) { - if ((ord-1)>=0) for (int i=0; icurPat[i].getPattern(e->curOrders->ord[i][ord-1],false); + int viewOrder=ord; + int viewRow=-dummyRows+1; + while (viewRow<0) { + viewOrder--; + viewRow+=e->curSubSong->patLen; + } + if (viewOrder>=0 && viewOrdercurSubSong->ordersLen) for (int i=0; icurPat[i].getPattern(e->curOrders->ord[i][viewOrder],false); } ImGui::PushStyleVar(ImGuiStyleVar_Alpha,ImGui::GetStyle().Alpha*ImGui::GetStyle().DisabledAlpha); for (int i=0; icurSubSong->patLen+i-dummyRows+1,e->isPlaying(),lineHeight,chans,ord-1,patCache,false); + patternRow(viewRow,e->isPlaying(),lineHeight,chans,viewOrder,patCache,false); + if (++viewRow>=e->curSubSong->patLen) { + viewRow=0; + viewOrder++; + if (viewOrder>=0 && viewOrdercurSubSong->ordersLen) for (int j=0; jcurPat[j].getPattern(e->curOrders->ord[j][viewOrder],false); + } + } } ImGui::PopStyleVar(); } else { @@ -1241,12 +1254,21 @@ void FurnaceGUI::drawPattern() { } // next pattern if (settings.viewPrevPattern) { - if ((ord+1)curSubSong->ordersLen) for (int i=0; icurSubSong->ordersLen) for (int i=0; icurPat[i].getPattern(e->curOrders->ord[i][ord+1],true); } ImGui::PushStyleVar(ImGuiStyleVar_Alpha,ImGui::GetStyle().Alpha*ImGui::GetStyle().DisabledAlpha); for (int i=0; i<=dummyRows; i++) { - patternRow(i,e->isPlaying(),lineHeight,chans,ord+1,patCache,false); + patternRow(viewRow,e->isPlaying(),lineHeight,chans,viewOrder,patCache,false); + if (++viewRow>=e->curSubSong->patLen) { + viewRow=0; + viewOrder++; + if (viewOrder>=0 && viewOrdercurSubSong->ordersLen) for (int j=0; jcurPat[j].getPattern(e->curOrders->ord[j][viewOrder],false); + } + } } ImGui::PopStyleVar(); } else {