GUI: step play fixes

This commit is contained in:
tildearrow 2023-09-20 16:16:25 -05:00
parent 0c7d0bc32b
commit 478c3ecb57
3 changed files with 13 additions and 6 deletions

View file

@ -3930,11 +3930,13 @@ bool FurnaceGUI::loop() {
int nextPlayOrder=0; int nextPlayOrder=0;
int nextOldRow=0; int nextOldRow=0;
e->getPlayPos(nextPlayOrder,nextOldRow); e->getPlayPos(nextPlayOrder,nextOldRow);
oldRowChanged=false;
playOrder=nextPlayOrder; playOrder=nextPlayOrder;
if (followPattern) { if (followPattern) {
curOrder=playOrder; curOrder=playOrder;
} }
if (e->isPlaying()) { if (e->isPlaying()) {
if (oldRow!=nextOldRow) oldRowChanged=true;
oldRow=nextOldRow; oldRow=nextOldRow;
} }
@ -7110,6 +7112,8 @@ FurnaceGUI::FurnaceGUI():
exitDisabledTimer(0), exitDisabledTimer(0),
soloTimeout(0.0f), soloTimeout(0.0f),
exportFadeOut(5.0), exportFadeOut(5.0),
newSongFirstFrame(false),
oldRowChanged(false),
editControlsOpen(true), editControlsOpen(true),
ordersOpen(true), ordersOpen(true),
insListOpen(true), insListOpen(true),

View file

@ -1816,7 +1816,7 @@ class FurnaceGUI {
double exportFadeOut; double exportFadeOut;
bool newSongFirstFrame; bool newSongFirstFrame, oldRowChanged;
bool editControlsOpen, ordersOpen, insListOpen, songInfoOpen, patternOpen, insEditOpen; bool editControlsOpen, ordersOpen, insListOpen, songInfoOpen, patternOpen, insEditOpen;
bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen; bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen;
bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen;

View file

@ -377,11 +377,14 @@ void FurnaceGUI::drawPattern() {
bool inhibitMenu=false; bool inhibitMenu=false;
if (e->isPlaying() && followPattern && (!e->isStepping() || pendingStepUpdate)) { if (e->isPlaying() && followPattern) {
cursor.y=oldRow; if (oldRowChanged || !e->isStepping()) {
if (selStart.xCoarse==selEnd.xCoarse && selStart.xFine==selEnd.xFine && selStart.y==selEnd.y && !selecting) { if (e->isStepping()) pendingStepUpdate=1;
selStart=cursor; cursor.y=oldRow;
selEnd=cursor; if (selStart.xCoarse==selEnd.xCoarse && selStart.xFine==selEnd.xFine && selStart.y==selEnd.y && !selecting) {
selStart=cursor;
selEnd=cursor;
}
} }
} }
demandX=0; demandX=0;