diff --git a/src/gui/gui.h b/src/gui/gui.h index c1a98c076..7583412d8 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -812,6 +812,7 @@ class FurnaceGUI { int insEditColorize; int metroVol; int pushNibble; + int scrollChangesOrder; unsigned int maxUndoSteps; String mainFontPath; String patFontPath; @@ -880,6 +881,7 @@ class FurnaceGUI { insEditColorize(0), metroVol(100), pushNibble(0), + scrollChangesOrder(0), maxUndoSteps(100), mainFontPath(""), patFontPath(""), diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index fe471f15c..d4fb939cd 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -655,11 +655,11 @@ void FurnaceGUI::drawPattern() { scrollX=ImGui::GetScrollX(); // overflow changes order - if (!e->isPlaying()) { + // TODO: this is very unreliable and sometimes it can warp you out of the song + if (settings.scrollChangesOrder && !e->isPlaying()) { if (wheelY!=0) { if (wheelY>0) { if (ImGui::GetScrollY()<=0) { - logV("scroll %d",wheelY); if (haveHitBounds) { if (e->getOrder()>0) { e->setOrder(e->getOrder()-1); @@ -675,9 +675,8 @@ void FurnaceGUI::drawPattern() { } } else { if (ImGui::GetScrollY()>=ImGui::GetScrollMaxY()) { - logV("scroll %d",wheelY); if (haveHitBounds) { - if (e->getOrder()song.ordersLen) { + if (e->getOrder()<(e->song.ordersLen-1)) { e->setOrder(e->getOrder()+1); ImGui::SetScrollY(0); updateScroll(0); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 8804a6125..f07d028ec 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -256,6 +256,11 @@ void FurnaceGUI::drawSettings() { settings.effectDeletionAltersValue=effectDeletionAltersValueB; } + bool scrollChangesOrderB=settings.scrollChangesOrder; + if (ImGui::Checkbox("Change order when scrolling outside of pattern bounds",&scrollChangesOrderB)) { + settings.scrollChangesOrder=scrollChangesOrderB; + } + bool stepOnInsertB=settings.stepOnInsert; if (ImGui::Checkbox("Move cursor by edit step on insert (push)",&stepOnInsertB)) { settings.stepOnInsert=stepOnInsertB; @@ -1574,6 +1579,7 @@ void FurnaceGUI::syncSettings() { settings.insEditColorize=e->getConfInt("insEditColorize",0); settings.metroVol=e->getConfInt("metroVol",100); settings.pushNibble=e->getConfInt("pushNibble",0); + settings.scrollChangesOrder=e->getConfInt("scrollChangesOrder",0); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); @@ -1631,6 +1637,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.insEditColorize,0,1); clampSetting(settings.metroVol,0,200); clampSetting(settings.pushNibble,0,1); + clampSetting(settings.scrollChangesOrder,0,1); // keybinds for (int i=0; isetConf("insEditColorize",settings.insEditColorize); e->setConf("metroVol",settings.metroVol); e->setConf("pushNibble",settings.pushNibble); + e->setConf("scrollChangesOrder",settings.scrollChangesOrder); // colors for (int i=0; i