proper non-QWERTY keyboard support

This commit is contained in:
tildearrow 2022-01-17 14:53:46 -05:00
parent 5900e3bb6e
commit dde2462025
2 changed files with 42 additions and 42 deletions

View file

@ -2659,7 +2659,7 @@ void FurnaceGUI::keyDown(SDL_Event& ev) {
if (!ev.key.repeat) { if (!ev.key.repeat) {
if (cursor.xFine==0) { // note if (cursor.xFine==0) { // note
try { try {
int key=noteKeys.at(ev.key.keysym.sym); int key=noteKeys.at(ev.key.keysym.scancode);
int num=12*curOctave+key; int num=12*curOctave+key;
if (edit) { if (edit) {
@ -2680,7 +2680,7 @@ void FurnaceGUI::keyDown(SDL_Event& ev) {
pat->data[cursor.y][2]=curIns; pat->data[cursor.y][2]=curIns;
e->noteOn(cursor.xCoarse,curIns,num); e->noteOn(cursor.xCoarse,curIns,num);
noteOffOnRelease=true; noteOffOnRelease=true;
noteOffOnReleaseKey=ev.key.keysym.sym; noteOffOnReleaseKey=ev.key.keysym.scancode;
noteOffOnReleaseChan=cursor.xCoarse; noteOffOnReleaseChan=cursor.xCoarse;
} }
makeUndo(GUI_ACTION_PATTERN_EDIT); makeUndo(GUI_ACTION_PATTERN_EDIT);
@ -2690,7 +2690,7 @@ void FurnaceGUI::keyDown(SDL_Event& ev) {
if (key!=100) { if (key!=100) {
e->noteOn(cursor.xCoarse,curIns,num); e->noteOn(cursor.xCoarse,curIns,num);
noteOffOnRelease=true; noteOffOnRelease=true;
noteOffOnReleaseKey=ev.key.keysym.sym; noteOffOnReleaseKey=ev.key.keysym.scancode;
noteOffOnReleaseChan=cursor.xCoarse; noteOffOnReleaseChan=cursor.xCoarse;
} }
} }
@ -2745,12 +2745,12 @@ void FurnaceGUI::keyDown(SDL_Event& ev) {
case GUI_WINDOW_INS_LIST: case GUI_WINDOW_INS_LIST:
if (!ev.key.repeat) { if (!ev.key.repeat) {
try { try {
int key=noteKeys.at(ev.key.keysym.sym); int key=noteKeys.at(ev.key.keysym.scancode);
int num=12*curOctave+key; int num=12*curOctave+key;
if (key!=100) { if (key!=100) {
e->noteOn(cursor.xCoarse,curIns,num); e->noteOn(cursor.xCoarse,curIns,num);
noteOffOnRelease=true; noteOffOnRelease=true;
noteOffOnReleaseKey=ev.key.keysym.sym; noteOffOnReleaseKey=ev.key.keysym.scancode;
noteOffOnReleaseChan=cursor.xCoarse; noteOffOnReleaseChan=cursor.xCoarse;
} }
} catch (std::out_of_range& e) { } catch (std::out_of_range& e) {
@ -2764,7 +2764,7 @@ void FurnaceGUI::keyDown(SDL_Event& ev) {
void FurnaceGUI::keyUp(SDL_Event& ev) { void FurnaceGUI::keyUp(SDL_Event& ev) {
if (noteOffOnRelease) { if (noteOffOnRelease) {
if (ev.key.keysym.sym==noteOffOnReleaseKey) { if (ev.key.keysym.scancode==noteOffOnReleaseKey) {
noteOffOnRelease=false; noteOffOnRelease=false;
e->noteOff(noteOffOnReleaseChan); e->noteOff(noteOffOnReleaseChan);
} }
@ -3570,7 +3570,7 @@ FurnaceGUI::FurnaceGUI():
changeAllOrders(false), changeAllOrders(false),
curWindow(GUI_WINDOW_NOTHING), curWindow(GUI_WINDOW_NOTHING),
noteOffOnRelease(false), noteOffOnRelease(false),
noteOffOnReleaseKey(0), noteOffOnReleaseKey((SDL_Scancode)0),
noteOffOnReleaseChan(0), noteOffOnReleaseChan(0),
arpMacroScroll(0), arpMacroScroll(0),
macroDragStart(0,0), macroDragStart(0,0),
@ -3646,45 +3646,45 @@ FurnaceGUI::FurnaceGUI():
} }
// octave 1 // octave 1
noteKeys[SDLK_z]=0; noteKeys[SDL_SCANCODE_Z]=0;
noteKeys[SDLK_s]=1; noteKeys[SDL_SCANCODE_S]=1;
noteKeys[SDLK_x]=2; noteKeys[SDL_SCANCODE_X]=2;
noteKeys[SDLK_d]=3; noteKeys[SDL_SCANCODE_D]=3;
noteKeys[SDLK_c]=4; noteKeys[SDL_SCANCODE_C]=4;
noteKeys[SDLK_v]=5; noteKeys[SDL_SCANCODE_V]=5;
noteKeys[SDLK_g]=6; noteKeys[SDL_SCANCODE_G]=6;
noteKeys[SDLK_b]=7; noteKeys[SDL_SCANCODE_B]=7;
noteKeys[SDLK_h]=8; noteKeys[SDL_SCANCODE_H]=8;
noteKeys[SDLK_n]=9; noteKeys[SDL_SCANCODE_N]=9;
noteKeys[SDLK_j]=10; noteKeys[SDL_SCANCODE_J]=10;
noteKeys[SDLK_m]=11; noteKeys[SDL_SCANCODE_M]=11;
// octave 2 // octave 2
noteKeys[SDLK_q]=12; noteKeys[SDL_SCANCODE_Q]=12;
noteKeys[SDLK_2]=13; noteKeys[SDL_SCANCODE_2]=13;
noteKeys[SDLK_w]=14; noteKeys[SDL_SCANCODE_W]=14;
noteKeys[SDLK_3]=15; noteKeys[SDL_SCANCODE_3]=15;
noteKeys[SDLK_e]=16; noteKeys[SDL_SCANCODE_E]=16;
noteKeys[SDLK_r]=17; noteKeys[SDL_SCANCODE_R]=17;
noteKeys[SDLK_5]=18; noteKeys[SDL_SCANCODE_5]=18;
noteKeys[SDLK_t]=19; noteKeys[SDL_SCANCODE_T]=19;
noteKeys[SDLK_6]=20; noteKeys[SDL_SCANCODE_6]=20;
noteKeys[SDLK_y]=21; noteKeys[SDL_SCANCODE_Y]=21;
noteKeys[SDLK_7]=22; noteKeys[SDL_SCANCODE_7]=22;
noteKeys[SDLK_u]=23; noteKeys[SDL_SCANCODE_U]=23;
// octave 3 // octave 3
noteKeys[SDLK_i]=24; noteKeys[SDL_SCANCODE_I]=24;
noteKeys[SDLK_9]=25; noteKeys[SDL_SCANCODE_9]=25;
noteKeys[SDLK_o]=26; noteKeys[SDL_SCANCODE_O]=26;
noteKeys[SDLK_0]=27; noteKeys[SDL_SCANCODE_0]=27;
noteKeys[SDLK_p]=28; noteKeys[SDL_SCANCODE_P]=28;
noteKeys[SDLK_LEFTBRACKET]=29; noteKeys[SDL_SCANCODE_LEFTBRACKET]=29;
noteKeys[SDLK_RIGHTBRACKET]=31; noteKeys[SDL_SCANCODE_RIGHTBRACKET]=31;
// note off // note off
noteKeys[SDLK_EQUALS]=100; noteKeys[SDL_SCANCODE_EQUALS]=100;
noteKeys[SDLK_TAB]=100; noteKeys[SDL_SCANCODE_TAB]=100;
// value keys // value keys
valueKeys[SDLK_0]=0; valueKeys[SDLK_0]=0;

View file

@ -206,10 +206,10 @@ class FurnaceGUI {
FurnaceGUIWindows curWindow; FurnaceGUIWindows curWindow;
bool noteOffOnRelease; bool noteOffOnRelease;
SDL_Keycode noteOffOnReleaseKey; SDL_Scancode noteOffOnReleaseKey;
int noteOffOnReleaseChan; int noteOffOnReleaseChan;
std::map<SDL_Keycode,int> noteKeys; std::map<SDL_Scancode,int> noteKeys;
std::map<SDL_Keycode,int> valueKeys; std::map<SDL_Keycode,int> valueKeys;
int arpMacroScroll; int arpMacroScroll;