From 853111b99dd87e9b9dca146f5f5585499164d192 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 5 Jul 2025 04:19:18 -0500 Subject: [PATCH] GUI: new pattern cursor logic, part 16 fix a couple order change-related problems --- src/gui/doAction.cpp | 28 ++++++++++++++++++++++++++++ src/gui/gui.cpp | 10 ++++++++++ src/gui/subSongs.cpp | 3 +++ 3 files changed, 41 insertions(+) diff --git a/src/gui/doAction.cpp b/src/gui/doAction.cpp index f0ce577b1..3333d83d8 100644 --- a/src/gui/doAction.cpp +++ b/src/gui/doAction.cpp @@ -1793,6 +1793,13 @@ void FurnaceGUI::doAction(int what) { prepareUndo(GUI_UNDO_CHANGE_ORDER); e->addOrder(curOrder,false,false); curOrder=e->getOrder(); + if (selStart.order==cursor.order) { + selStart.order=curOrder; + } + if (selEnd.order==cursor.order) { + selEnd.order=curOrder; + } + cursor.order=curOrder; makeUndo(GUI_UNDO_CHANGE_ORDER); break; case GUI_ACTION_ORDERS_DUPLICATE: @@ -1827,6 +1834,13 @@ void FurnaceGUI::doAction(int what) { if (curOrder>=e->curSubSong->ordersLen) { curOrder=e->curSubSong->ordersLen-1; e->setOrder(curOrder); + if (selStart.order==cursor.order) { + selStart.order=curOrder; + } + if (selEnd.order==cursor.order) { + selEnd.order=curOrder; + } + cursor.order=curOrder; } makeUndo(GUI_UNDO_CHANGE_ORDER); break; @@ -1835,6 +1849,13 @@ void FurnaceGUI::doAction(int what) { e->moveOrderUp(curOrder); if (settings.cursorFollowsOrder) { e->setOrder(curOrder); + if (selStart.order==cursor.order) { + selStart.order=curOrder; + } + if (selEnd.order==cursor.order) { + selEnd.order=curOrder; + } + cursor.order=curOrder; } makeUndo(GUI_UNDO_CHANGE_ORDER); break; @@ -1843,6 +1864,13 @@ void FurnaceGUI::doAction(int what) { e->moveOrderDown(curOrder); if (settings.cursorFollowsOrder) { e->setOrder(curOrder); + if (selStart.order==cursor.order) { + selStart.order=curOrder; + } + if (selEnd.order==cursor.order) { + selEnd.order=curOrder; + } + cursor.order=curOrder; } makeUndo(GUI_UNDO_CHANGE_ORDER); break; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index cd7211c13..f97513467 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -6401,6 +6401,9 @@ bool FurnaceGUI::loop() { stop(); e->clearSubSongs(); curOrder=0; + cursor.order=0; + selStart.order=0; + selEnd.order=0; MARK_MODIFIED; ImGui::CloseCurrentPopup(); } @@ -6411,6 +6414,9 @@ bool FurnaceGUI::loop() { }); e->setOrder(0); curOrder=0; + cursor.order=0; + selStart.order=0; + selEnd.order=0; MARK_MODIFIED; ImGui::CloseCurrentPopup(); } @@ -6422,6 +6428,9 @@ bool FurnaceGUI::loop() { }); e->setOrder(0); curOrder=0; + cursor.order=0; + selStart.order=0; + selEnd.order=0; MARK_MODIFIED; ImGui::CloseCurrentPopup(); } @@ -6530,6 +6539,7 @@ bool FurnaceGUI::loop() { cursor.xCoarse=0; cursor.xFine=0; cursor.y=0; + cursor.order=0; selStart=cursor; selEnd=cursor; curOrder=0; diff --git a/src/gui/subSongs.cpp b/src/gui/subSongs.cpp index f41a3ae9e..516387491 100644 --- a/src/gui/subSongs.cpp +++ b/src/gui/subSongs.cpp @@ -43,6 +43,7 @@ void FurnaceGUI::drawSubSongs(bool asChild) { cursor.xCoarse=0; cursor.xFine=0; cursor.y=0; + cursor.order=0; selStart=cursor; selEnd=cursor; curOrder=0; @@ -80,6 +81,7 @@ void FurnaceGUI::drawSubSongs(bool asChild) { cursor.xCoarse=0; cursor.xFine=0; cursor.y=0; + cursor.order=0; selStart=cursor; selEnd=cursor; curOrder=0; @@ -101,6 +103,7 @@ void FurnaceGUI::drawSubSongs(bool asChild) { cursor.xCoarse=0; cursor.xFine=0; cursor.y=0; + cursor.order=0; selStart=cursor; selEnd=cursor; curOrder=0;