GUI: add very useful setting

push entire channel when inserting
This commit is contained in:
tildearrow 2023-06-10 15:26:36 -05:00
parent 2fe315e5d7
commit 02f6a0f217
3 changed files with 24 additions and 6 deletions

View File

@ -277,15 +277,23 @@ void FurnaceGUI::doInsert() {
prepareUndo(GUI_UNDO_PATTERN_PUSH);
curNibble=false;
int iCoarse=selStart.xCoarse;
int iFine=selStart.xFine;
for (; iCoarse<=selEnd.xCoarse; iCoarse++) {
SelectionPoint sStart=selStart;
SelectionPoint sEnd=selEnd;
if (selStart.xCoarse==selEnd.xCoarse && selStart.xFine==selEnd.xFine && selStart.y==selEnd.y) {
sStart.xFine=0;
sEnd.xFine=2+e->curPat[sEnd.xCoarse].effectCols*2;
}
int iCoarse=sStart.xCoarse;
int iFine=sStart.xFine;
for (; iCoarse<=sEnd.xCoarse; iCoarse++) {
if (!e->curSubSong->chanShow[iCoarse]) continue;
DivPattern* pat=e->curPat[iCoarse].getPattern(e->curOrders->ord[iCoarse][curOrder],true);
for (; iFine<3+e->curPat[iCoarse].effectCols*2 && (iCoarse<selEnd.xCoarse || iFine<=selEnd.xFine); iFine++) {
for (; iFine<3+e->curPat[iCoarse].effectCols*2 && (iCoarse<sEnd.xCoarse || iFine<=sEnd.xFine); iFine++) {
maskOut(opMaskInsert,iFine);
for (int j=e->curSubSong->patLen-1; j>=selStart.y; j--) {
if (j==selStart.y) {
for (int j=e->curSubSong->patLen-1; j>=sStart.y; j--) {
if (j==sStart.y) {
if (iFine==0) {
pat->data[j][iFine]=0;
}

View File

@ -1496,6 +1496,7 @@ class FurnaceGUI {
int compress;
int newPatternFormat;
int renderClearPos;
int insertBehavior;
unsigned int maxUndoSteps;
String mainFontPath;
String patFontPath;
@ -1645,6 +1646,7 @@ class FurnaceGUI {
compress(1),
newPatternFormat(1),
renderClearPos(0),
insertBehavior(1),
maxUndoSteps(100),
mainFontPath(""),
patFontPath(""),

View File

@ -543,6 +543,11 @@ void FurnaceGUI::drawSettings() {
settings.stepOnDelete=stepOnDeleteB;
}
bool insertBehaviorB=settings.insertBehavior;
if (ImGui::Checkbox("Insert pushes entire channel row",&insertBehaviorB)) {
settings.insertBehavior=insertBehaviorB;
}
bool absorbInsInputB=settings.absorbInsInput;
if (ImGui::Checkbox("Change current instrument when changing instrument column (absorb)",&absorbInsInputB)) {
settings.absorbInsInput=absorbInsInputB;
@ -2737,6 +2742,7 @@ void FurnaceGUI::syncSettings() {
settings.newPatternFormat=e->getConfInt("newPatternFormat",1);
settings.renderBackend=e->getConfString("renderBackend","SDL");
settings.renderClearPos=e->getConfInt("renderClearPos",0);
settings.insertBehavior=e->getConfInt("insertBehavior",1);
clampSetting(settings.mainFontSize,2,96);
clampSetting(settings.patFontSize,2,96);
@ -2860,6 +2866,7 @@ void FurnaceGUI::syncSettings() {
clampSetting(settings.compress,0,1);
clampSetting(settings.newPatternFormat,0,1);
clampSetting(settings.renderClearPos,0,1);
clampSetting(settings.insertBehavior,0,1);
if (settings.exportLoops<0.0) settings.exportLoops=0.0;
if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0;
@ -3079,6 +3086,7 @@ void FurnaceGUI::commitSettings() {
e->setConf("newPatternFormat",settings.newPatternFormat);
e->setConf("renderBackend",settings.renderBackend);
e->setConf("renderClearPos",settings.renderClearPos);
e->setConf("insertBehavior",settings.insertBehavior);
// colors
for (int i=0; i<GUI_COLOR_MAX; i++) {