From c9a428c4c267a8315769c71b9be5ccb87dc7b1fe Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Sun, 5 Sep 2021 13:05:53 +0200 Subject: [PATCH] started handling keyboard events --- .gitignore | 2 + main.cpp | 130 ++++++++++++++++++++++++++++++++++------------------- 2 files changed, 87 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index 90dfd1c..7cab491 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .vscode/* *.dll *.exe +chirping +*.DSYM/* diff --git a/main.cpp b/main.cpp index d738604..6e88038 100755 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,10 @@ #define SOUND_NUM_SAMPLES SOUND_DURATION*SAMPLES_PER_SECOND #define SOUND_SIZE_IN_BYTES SOUND_NUM_SAMPLES*AUDIO_FORMAT_SIZE +int selected_channel = 0; +int selected_row = 0; +int selected_part = 0; + SDL_AudioSpec audioSpec{SAMPLES_PER_SECOND, AUDIO_FORMAT, 1, 0, 512, 0, 0, NULL, NULL}; int main(int argc, char* argv[]) { @@ -59,58 +63,94 @@ int main(int argc, char* argv[]) { } draw_init(); - draw_clear(color_dark_grey); - draw_fill(3, 14, 138, 225, color_black); - draw_inset(2, 13, 35, 226, color_light_peach, color_dark_blue); - draw_inset(37, 13, 35, 226, color_light_peach, color_dark_blue); - draw_inset(72, 13, 35, 226, color_light_peach, color_dark_blue); - draw_inset(107, 13, 35, 226, color_light_peach, color_dark_blue); - draw_dotted(4, 71, 35, color_lavender); - - int xp = 4, yp = 15; - for (int x=0; x<4; ++x) { - yp = 15; - for (int y=0; y<32; ++y) { - if (x==0 && y==0) { - draw_string("G#", xp, yp, color_white); - draw_char('1', 10+xp, yp, color_light_grey); - draw_char('5', 16+xp, yp, color_pink); - draw_char('2', 21+xp, yp, color_blue); - draw_char('3', 26+xp, yp, color_lavender); - } else { - draw_string("...", xp, yp, color_dark_blue); - draw_string("...", 16+xp, yp, color_dark_blue); - } - yp += 7; - if ((y%8)==7) { - draw_dotted(xp, yp, xp+31, color_lavender); - yp++; - } - } - xp += 35; - } - //draw_string("......", 4, 15, color_dark_blue); - //draw_string("......", 38, 15, color_dark_blue); - /*int last_x = 0, last_y = 120; - for (int x=0; x<1102; ++x) { - int y = 700 - (350+300*(float(beeps[x*10])/float(AUDIO_FORMAT_MAX_VALUE))); - SDL_RenderDrawLine(sdlRenderer, x, y, last_x, last_y); - last_x = x; last_y = y; - }*/ - - //draw_string("HOLA", 11, 11, color_black); - //draw_string("HOLA", 10, 10, color_white); - draw_present(); - - //SDL_QueueAudio(sdlAudioDevice, &beeps[0], SOUND_SIZE_IN_BYTES*8); - //SDL_PauseAudioDevice(sdlAudioDevice, 0); bool exit = false; SDL_Event sdlEvent; while (!exit) { while (SDL_PollEvent(&sdlEvent)) { if (sdlEvent.type == SDL_QUIT) { exit = true; break;} + if (sdlEvent.type == SDL_KEYDOWN) { + if (sdlEvent.key.keysym.scancode == SDL_SCANCODE_DOWN && selected_row < 32) selected_row++; + if (sdlEvent.key.keysym.scancode == SDL_SCANCODE_UP && selected_row > 0) selected_row--; + if (sdlEvent.key.keysym.scancode == SDL_SCANCODE_LEFT && (selected_channel > 0 || selected_part > 0)) { + if (selected_part > 0) { + selected_part--; + } else { + selected_channel--; + selected_part = 4; + } + } + if (sdlEvent.key.keysym.scancode == SDL_SCANCODE_RIGHT && (selected_channel < 3 || selected_part < 4)) { + if (selected_part < 4) { + selected_part++; + } else { + selected_channel++; + selected_part = 0; + } + } + } } + draw_clear(color_dark_grey); + draw_fill(3, 14, 33, 225, color_black); + draw_inset(2, 13, 34, 226, color_light_peach, color_dark_blue); + draw_fill(38, 14, 33, 225, color_black); + draw_inset(37, 13, 34, 226, color_light_peach, color_dark_blue); + draw_fill(73, 14, 33, 225, color_black); + draw_inset(72, 13, 34, 226, color_light_peach, color_dark_blue); + draw_fill(108, 14, 33, 225, color_black); + draw_inset(107, 13, 34, 226, color_light_peach, color_dark_blue); + //draw_dotted(4, 71, 35, color_lavender); + + int xp = 4, yp = 15; + for (int x=0; x<4; ++x) { + yp = 15; + for (int y=0; y<32; ++y) { + if (x == selected_channel && y == selected_row) { + draw_fill(xp-1, yp-1, 32, 7, color_dark_blue); + switch (selected_part) { + case 0: draw_fill(xp-1, yp-1, 11, 7, color_yellow); break; + case 1: draw_fill(9+xp, yp-1, 6, 7, color_yellow); break; + case 2: draw_fill(15+xp, yp-1, 6, 7, color_yellow); break; + case 3: draw_fill(20+xp, yp-1, 6, 7, color_yellow); break; + case 4: draw_fill(25+xp, yp-1, 6, 7, color_yellow); break; + } + } + if (x==0 && y==0) { + draw_string("G#", xp, yp, color_white); + draw_char('1', 10+xp, yp, color_light_grey); + draw_char('5', 16+xp, yp, color_pink); + draw_char('2', 21+xp, yp, color_blue); + draw_char('3', 26+xp, yp, color_lavender); + } else { + uint8_t color = color_dark_blue; + if (x == selected_channel && y == selected_row) color = color_dark_purple; + draw_string("...", xp, yp, color); + draw_string("...", 16+xp, yp, color); + } + yp += 7; + if ((y%8)==7) { + draw_dotted(xp, yp, xp+30, color_lavender); + //yp++; + } + } + xp += 35; + } + //draw_string("......", 4, 15, color_dark_blue); + //draw_string("......", 38, 15, color_dark_blue); + /*int last_x = 0, last_y = 120; + for (int x=0; x<1102; ++x) { + int y = 700 - (350+300*(float(beeps[x*10])/float(AUDIO_FORMAT_MAX_VALUE))); + SDL_RenderDrawLine(sdlRenderer, x, y, last_x, last_y); + last_x = x; last_y = y; + }*/ + + //draw_string("HOLA", 11, 11, color_black); + //draw_string("HOLA", 10, 10, color_white); + draw_present(); + + //SDL_QueueAudio(sdlAudioDevice, &beeps[0], SOUND_SIZE_IN_BYTES*8); + //SDL_PauseAudioDevice(sdlAudioDevice, 0); + } draw_quit();