diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index c7b5ac9e..b7ee8ec0 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2598,6 +2598,8 @@ void DivEngine::stepOne(int row) { } stepPlay=2; ticks=1; + prevOrder=curOrder; + prevRow=curRow; BUSY_END; } diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 9f8a2f10..aabce5c6 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1130,8 +1130,10 @@ void DivEngine::nextRow() { } } - prevOrder=curOrder; - prevRow=curRow; + if (!stepPlay) { + prevOrder=curOrder; + prevRow=curRow; + } for (int i=0; istepOne(cursor.y); + pendingStepUpdate=1; break; case GUI_ACTION_OCTAVE_UP: if (++curOctave>7) { diff --git a/src/gui/editControls.cpp b/src/gui/editControls.cpp index e3e84348..099ff7e2 100644 --- a/src/gui/editControls.cpp +++ b/src/gui/editControls.cpp @@ -374,7 +374,7 @@ void FurnaceGUI::drawMobileControls() { if (portrait) ImGui::SameLine(); if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne",buttonSize)) { e->stepOne(cursor.y); - pendingStepUpdate=true; + pendingStepUpdate=1; } bool repeatPattern=e->getRepeatPattern(); @@ -730,7 +730,7 @@ void FurnaceGUI::drawEditControls() { ImGui::SameLine(); if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne")) { e->stepOne(cursor.y); - pendingStepUpdate=true; + pendingStepUpdate=1; } if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Step one row"); @@ -770,7 +770,7 @@ void FurnaceGUI::drawEditControls() { ImGui::SameLine(); if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne")) { e->stepOne(cursor.y); - pendingStepUpdate=true; + pendingStepUpdate=1; } if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Step one row"); @@ -875,7 +875,7 @@ void FurnaceGUI::drawEditControls() { } if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne",buttonSize)) { e->stepOne(cursor.y); - pendingStepUpdate=true; + pendingStepUpdate=1; } if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Step one row"); @@ -1009,7 +1009,7 @@ void FurnaceGUI::drawEditControls() { ImGui::SameLine(); if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne")) { e->stepOne(cursor.y); - pendingStepUpdate=true; + pendingStepUpdate=1; } if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Step one row"); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 6437ecab..71f4fecd 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -7015,7 +7015,7 @@ FurnaceGUI::FurnaceGUI(): fadeMode(false), randomMode(false), haveHitBounds(false), - pendingStepUpdate(false), + pendingStepUpdate(0), oldOrdersLen(0), sampleZoom(1.0), prevSampleZoom(1.0), diff --git a/src/gui/gui.h b/src/gui/gui.h index 83c5a380..4e564751 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1913,7 +1913,8 @@ class FurnaceGUI { int dummyRows, demandX; int transposeAmount, randomizeMin, randomizeMax, fadeMin, fadeMax, collapseAmount; float scaleMax; - bool fadeMode, randomMode, haveHitBounds, pendingStepUpdate; + bool fadeMode, randomMode, haveHitBounds; + signed char pendingStepUpdate; int oldOrdersLen; DivOrders oldOrders; diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index 72d953b7..1deec9dc 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -446,7 +446,7 @@ void FurnaceGUI::drawPattern() { float lineHeight=(ImGui::GetTextLineHeight()+2*dpiScale); int curRow=e->getRow(); if (e->isPlaying() && followPattern && (!e->isStepping() || pendingStepUpdate)) updateScroll(curRow); - pendingStepUpdate=false; + if (--pendingStepUpdate<0) pendingStepUpdate=0; if (nextScroll>-0.5f) { ImGui::SetScrollY(nextScroll); nextScroll=-1.0f;