From fe9b379ca93e52a1d60904d9cd7371bc7755c3d0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 11 Mar 2022 23:47:16 -0500 Subject: [PATCH] GUI: implement paste mix --- src/gui/gui.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 88c945bdd..6fd31c409 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -2985,9 +2985,15 @@ void FurnaceGUI::doPaste(PasteMode mode) { note[2]=line[charPos++]; note[3]=0; - if (!decodeNote(note,pat->data[j][0],pat->data[j][1])) { - invalidData=true; - break; + if ((mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_MIX_FG) && strcmp(note,"...")==0) { + // do nothing. + } else { + if (mode!=GUI_PASTE_MODE_MIX_BG || (pat->data[j][0]==0 && pat->data[j][1]==0)) { + if (!decodeNote(note,pat->data[j][0],pat->data[j][1])) { + invalidData=true; + break; + } + } } } else { if (charPos>=line.size()) { @@ -3003,14 +3009,18 @@ void FurnaceGUI::doPaste(PasteMode mode) { note[2]=0; if (strcmp(note,"..")==0) { - pat->data[j][iFine+1]=-1; + if (!(mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_MIX_FG)) { + pat->data[j][iFine+1]=-1; + } } else { unsigned int val=0; if (sscanf(note,"%2X",&val)!=1) { invalidData=true; break; } - if (iFine<(3+e->song.pat[iCoarse].effectRows*2)) pat->data[j][iFine+1]=val; + if (mode!=GUI_PASTE_MODE_MIX_BG || pat->data[j][iFine+1]==-1) { + if (iFine<(3+e->song.pat[iCoarse].effectRows*2)) pat->data[j][iFine+1]=val; + } } } iFine++;