aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-24 19:28:12 +0200
committerBad Diode <bd@badd10de.dev>2023-04-24 19:28:12 +0200
commit67e27463192baa4d6b0ae1479078373a23ca0142 (patch)
tree6b0115e5654708d3d549d4e541537bb87163a841
parent2abcb70459499dc5d729ec47b39bc43718ac6ced (diff)
downloadstepper-67e27463192baa4d6b0ae1479078373a23ca0142.tar.gz
stepper-67e27463192baa4d6b0ae1479078373a23ca0142.zip
Add wraparound cursor on left/right columns
-rw-r--r--src/main.c2
-rw-r--r--src/sequencer.c134
2 files changed, 53 insertions, 83 deletions
diff --git a/src/main.c b/src/main.c
index 44e7718..f991d50 100644
--- a/src/main.c
+++ b/src/main.c
@@ -34,7 +34,7 @@ WITH REGARD TO THIS SOFTWARE.
34// - Pattern chaining for more than 1 queue and/or song mode. 34// - Pattern chaining for more than 1 queue and/or song mode.
35// - Undo/Redo. 35// - Undo/Redo.
36// - Add a settings page to change some configuration parameters. 36// - Add a settings page to change some configuration parameters.
37// - Wrap around cursor left/right. 37// + Wrap around cursor left/right.
38// 38//
39// Advanced 39// Advanced
40// - Sync via MIDI via arduinoboy or something similar. 40// - Sync via MIDI via arduinoboy or something similar.
diff --git a/src/sequencer.c b/src/sequencer.c
index 1d5b3d6..547e9e8 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -173,18 +173,10 @@ handle_channel_selection(void) {
173 clipboard_copy(); 173 clipboard_copy();
174 } else { 174 } else {
175 switch (channel_selection_loc) { 175 switch (channel_selection_loc) {
176 case 0: { 176 case 0: { pat->ch1.active ^= 1; } break;
177 pat->ch1.active ^= 1; 177 case 1: { pat->ch2.active ^= 1; } break;
178 } break; 178 case 2: { pat->ch3.active ^= 1; } break;
179 case 1: { 179 case 3: { pat->ch4.active ^= 1; } break;
180 pat->ch2.active ^= 1;
181 } break;
182 case 2: {
183 pat->ch3.active ^= 1;
184 } break;
185 case 3: {
186 pat->ch4.active ^= 1;
187 } break;
188 } 180 }
189 redraw_channels = true; 181 redraw_channels = true;
190 } 182 }
@@ -342,15 +334,22 @@ handle_right_col_selection(void) {
342 if (key_tap(KEY_LEFT)) { 334 if (key_tap(KEY_LEFT)) {
343 input_handler = handle_trigger_selection; 335 input_handler = handle_trigger_selection;
344 switch (right_col_selection_loc) { 336 switch (right_col_selection_loc) {
345 case R_COL_BPM: { 337 case R_COL_BPM: { trig_selection_loc = 15; } break;
346 trig_selection_loc = 15; 338 default: { trig_selection_loc = 7; } break;
347 } break;
348 case R_COL_PLAY :
349 case R_COL_STOP: {
350 trig_selection_loc = 7;
351 } break;
352 } 339 }
353 redraw_params = true; 340 redraw_params = true;
341 } else if (key_tap(KEY_RIGHT)) {
342 input_handler = handle_pattern_selection;
343 switch (right_col_selection_loc) {
344 case R_COL_BANK_A: { pattern_selection_loc = 0; } break;
345 case R_COL_BANK_B: { pattern_selection_loc = 1; } break;
346 case R_COL_BANK_C: { pattern_selection_loc = 2; } break;
347 case R_COL_BANK_D: { pattern_selection_loc = 3; } break;
348 case R_COL_PLAY: { pattern_selection_loc = 4; } break;
349 case R_COL_STOP: { pattern_selection_loc = 5; } break;
350 default: { pattern_selection_loc = 6; } break;
351 }
352 redraw_trigs = true;
354 } else if (key_tap(KEY_UP)) { 353 } else if (key_tap(KEY_UP)) {
355 if (right_col_selection_loc < R_COL_BANK_A) { 354 if (right_col_selection_loc < R_COL_BANK_A) {
356 right_col_selection_loc++; 355 right_col_selection_loc++;
@@ -397,24 +396,12 @@ handle_right_col_selection(void) {
397 } 396 }
398 } else if (key_tap(KEY_B)) { 397 } else if (key_tap(KEY_B)) {
399 switch (right_col_selection_loc) { 398 switch (right_col_selection_loc) {
400 case R_COL_STOP: { 399 case R_COL_STOP: { toggle_playing(); } break;
401 toggle_playing(); 400 case R_COL_PLAY: { pause_playing(); } break;
402 } break; 401 case R_COL_BANK_A: { select_bank(0); } break;
403 case R_COL_PLAY: { 402 case R_COL_BANK_B: { select_bank(1); } break;
404 pause_playing(); 403 case R_COL_BANK_C: { select_bank(2); } break;
405 } break; 404 case R_COL_BANK_D: { select_bank(3); } break;
406 case R_COL_BANK_A: {
407 select_bank(0);
408 } break;
409 case R_COL_BANK_B: {
410 select_bank(1);
411 } break;
412 case R_COL_BANK_C: {
413 select_bank(2);
414 } break;
415 case R_COL_BANK_D: {
416 select_bank(3);
417 } break;
418 } 405 }
419 } 406 }
420} 407}
@@ -452,6 +439,19 @@ handle_pattern_selection(void) {
452 redraw_bpm = true; 439 redraw_bpm = true;
453 } 440 }
454 } 441 }
442 if (key_tap(KEY_LEFT)) {
443 input_handler = handle_right_col_selection;
444 right_col_selection_loc = R_COL_BPM;
445 switch (pattern_selection_loc) {
446 case 0: { right_col_selection_loc = R_COL_BANK_A; } break;
447 case 1: { right_col_selection_loc = R_COL_BANK_B; } break;
448 case 2: { right_col_selection_loc = R_COL_BANK_C; } break;
449 case 3: { right_col_selection_loc = R_COL_BANK_D; } break;
450 case 4: { right_col_selection_loc = R_COL_PLAY; } break;
451 case 5: { right_col_selection_loc = R_COL_STOP; } break;
452 default: { right_col_selection_loc = R_COL_BPM; } break;
453 }
454 }
455} 455}
456 456
457bool 457bool
@@ -519,27 +519,13 @@ set_param_selection_sq1(ChannelSquareParams *params, InputHandler return_handler
519 inc = 1; 519 inc = 1;
520 } 520 }
521 switch (param_selection_loc) { 521 switch (param_selection_loc) {
522 case 0: { 522 case 0: { params->duty_cycle = CLAMP(params->duty_cycle + inc, 0, 3); } break;
523 params->duty_cycle = CLAMP(params->duty_cycle + inc, 0, 3); 523 case 1: { params->env_volume = CLAMP(params->env_volume + inc, 0, 15); } break;
524 } break; 524 case 2: { params->env_direction ^= 1; } break;
525 case 1: { 525 case 3: { params->env_time = CLAMP(params->env_time + inc, 0, 7); } break;
526 params->env_volume = CLAMP(params->env_volume + inc, 0, 15); 526 case 4: { params->sweep_number = CLAMP(params->sweep_number + inc, 0, 7); } break;
527 } break; 527 case 5: { params->sweep_time = CLAMP(params->sweep_time + inc, 0, 7); } break;
528 case 2: { 528 case 6: { params->sweep_direction ^= 1; } break;
529 params->env_direction ^= 1;
530 } break;
531 case 3: {
532 params->env_time = CLAMP(params->env_time + inc, 0, 7);
533 } break;
534 case 4: {
535 params->sweep_number = CLAMP(params->sweep_number + inc, 0, 7);
536 } break;
537 case 5: {
538 params->sweep_time = CLAMP(params->sweep_time + inc, 0, 7);
539 } break;
540 case 6: {
541 params->sweep_direction ^= 1;
542 } break;
543 } 529 }
544 redraw_params = true; 530 redraw_params = true;
545 return true; 531 return true;
@@ -580,18 +566,10 @@ set_param_selection_sq2(ChannelSquareParams *params, InputHandler return_handler
580 inc = 1; 566 inc = 1;
581 } 567 }
582 switch (param_selection_loc) { 568 switch (param_selection_loc) {
583 case 0: { 569 case 0: { params->duty_cycle = CLAMP(params->duty_cycle + inc, 0, 3); } break;
584 params->duty_cycle = CLAMP(params->duty_cycle + inc, 0, 3); 570 case 1: { params->env_volume = CLAMP(params->env_volume + inc, 0, 15); } break;
585 } break; 571 case 2: { params->env_direction ^= 1; } break;
586 case 1: { 572 case 3: { params->env_time = CLAMP(params->env_time + inc, 0, 7); } break;
587 params->env_volume = CLAMP(params->env_volume + inc, 0, 15);
588 } break;
589 case 2: {
590 params->env_direction ^= 1;
591 } break;
592 case 3: {
593 params->env_time = CLAMP(params->env_time + inc, 0, 7);
594 } break;
595 } 573 }
596 redraw_params = true; 574 redraw_params = true;
597 return true; 575 return true;
@@ -798,18 +776,10 @@ set_param_selection_noise(ChannelNoiseParams *params, InputHandler return_handle
798 inc = 1; 776 inc = 1;
799 } 777 }
800 switch (param_selection_loc) { 778 switch (param_selection_loc) {
801 case 0: { 779 case 0: { params->bit_mode = CLAMP(params->bit_mode + inc, 0, 1); } break;
802 params->bit_mode = CLAMP(params->bit_mode + inc, 0, 1); 780 case 1: { params->env_volume = CLAMP(params->env_volume + inc, 0, 15); } break;
803 } break; 781 case 2: { params->env_direction ^= 1; } break;
804 case 1: { 782 case 3: { params->env_time = CLAMP(params->env_time + inc, 0, 7); } break;
805 params->env_volume = CLAMP(params->env_volume + inc, 0, 15);
806 } break;
807 case 2: {
808 params->env_direction ^= 1;
809 } break;
810 case 3: {
811 params->env_time = CLAMP(params->env_time + inc, 0, 7);
812 } break;
813 } 783 }
814 redraw_params = true; 784 redraw_params = true;
815 return true; 785 return true;