mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-24 13:35:11 +00:00
GUI: add transpose keys
This commit is contained in:
parent
1632b2864a
commit
49fa75f4b5
2 changed files with 58 additions and 0 deletions
|
@ -2275,6 +2275,51 @@ void FurnaceGUI::doInsert() {
|
||||||
makeUndo(GUI_ACTION_PATTERN_PUSH);
|
makeUndo(GUI_ACTION_PATTERN_PUSH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FurnaceGUI::doTranspose(int amount) {
|
||||||
|
finishSelection();
|
||||||
|
prepareUndo(GUI_ACTION_PATTERN_DELETE);
|
||||||
|
curNibble=false;
|
||||||
|
|
||||||
|
int iCoarse=selStart.xCoarse;
|
||||||
|
int iFine=selStart.xFine;
|
||||||
|
int ord=e->getOrder();
|
||||||
|
for (; iCoarse<=selEnd.xCoarse; iCoarse++) {
|
||||||
|
DivPattern* pat=e->song.pat[iCoarse].getPattern(e->song.orders.ord[iCoarse][ord],true);
|
||||||
|
for (; iFine<3+e->song.pat[iCoarse].effectRows*2 && (iCoarse<selEnd.xCoarse || iFine<=selEnd.xFine); iFine++) {
|
||||||
|
for (int j=selStart.y; j<=selEnd.y; j++) {
|
||||||
|
if (iFine==0) {
|
||||||
|
int origNote=pat->data[j][0];
|
||||||
|
int origOctave=pat->data[j][1];
|
||||||
|
if (origNote!=0 && origNote!=100) {
|
||||||
|
origNote+=amount;
|
||||||
|
while (origNote>12) {
|
||||||
|
origNote-=12;
|
||||||
|
origOctave++;
|
||||||
|
}
|
||||||
|
while (origNote<1) {
|
||||||
|
origNote+=12;
|
||||||
|
origOctave--;
|
||||||
|
}
|
||||||
|
if (origOctave>7) {
|
||||||
|
origNote=12;
|
||||||
|
origOctave=7;
|
||||||
|
}
|
||||||
|
if (origOctave<0) {
|
||||||
|
origNote=1;
|
||||||
|
origOctave=0;
|
||||||
|
}
|
||||||
|
pat->data[j][0]=origNote;
|
||||||
|
pat->data[j][1]=origOctave;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
iFine=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
makeUndo(GUI_ACTION_PATTERN_DELETE);
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUI::doCopy(bool cut) {
|
void FurnaceGUI::doCopy(bool cut) {
|
||||||
finishSelection();
|
finishSelection();
|
||||||
if (cut) {
|
if (cut) {
|
||||||
|
@ -2546,6 +2591,18 @@ void FurnaceGUI::keyDown(SDL_Event& ev) {
|
||||||
case GUI_WINDOW_PATTERN: {
|
case GUI_WINDOW_PATTERN: {
|
||||||
if (ev.key.keysym.mod&KMOD_CTRL) {
|
if (ev.key.keysym.mod&KMOD_CTRL) {
|
||||||
switch (ev.key.keysym.sym) {
|
switch (ev.key.keysym.sym) {
|
||||||
|
case SDLK_F1:
|
||||||
|
doTranspose(-1);
|
||||||
|
break;
|
||||||
|
case SDLK_F2:
|
||||||
|
doTranspose(1);
|
||||||
|
break;
|
||||||
|
case SDLK_F3:
|
||||||
|
doTranspose(-12);
|
||||||
|
break;
|
||||||
|
case SDLK_F4:
|
||||||
|
doTranspose(12);
|
||||||
|
break;
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
doSelectAll();
|
doSelectAll();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -279,6 +279,7 @@ class FurnaceGUI {
|
||||||
void doDelete();
|
void doDelete();
|
||||||
void doPullDelete();
|
void doPullDelete();
|
||||||
void doInsert();
|
void doInsert();
|
||||||
|
void doTranspose(int amount);
|
||||||
void doCopy(bool cut);
|
void doCopy(bool cut);
|
||||||
void doPaste();
|
void doPaste();
|
||||||
void doUndo();
|
void doUndo();
|
||||||
|
|
Loading…
Reference in a new issue