diff options
author | Bad Diode <bd@badd10de.dev> | 2023-04-24 19:28:12 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-04-24 19:28:12 +0200 |
commit | 67e27463192baa4d6b0ae1479078373a23ca0142 (patch) | |
tree | 6b0115e5654708d3d549d4e541537bb87163a841 | |
parent | 2abcb70459499dc5d729ec47b39bc43718ac6ced (diff) | |
download | stepper-67e27463192baa4d6b0ae1479078373a23ca0142.tar.gz stepper-67e27463192baa4d6b0ae1479078373a23ca0142.zip |
Add wraparound cursor on left/right columns
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/sequencer.c | 134 |
2 files changed, 53 insertions, 83 deletions
@@ -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 | ||
457 | bool | 457 | bool |
@@ -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; |