aboutsummaryrefslogtreecommitdiffstats
path: root/src/sequencer.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-07-15 22:16:00 +0200
committerBad Diode <bd@badd10de.dev>2023-07-15 22:16:00 +0200
commit1e666da666081bece2c244c2297d08801add3103 (patch)
tree7cf2cbe834ba0a5e39bba33f09e447d54ad70f8c /src/sequencer.c
parent4c6c09b1f6debdfaea80bf5ad56dee25089ef49b (diff)
downloadstepper-1e666da666081bece2c244c2297d08801add3103.tar.gz
stepper-1e666da666081bece2c244c2297d08801add3103.zip
Add cursors and fully functioning chain workflow
Diffstat (limited to 'src/sequencer.c')
-rw-r--r--src/sequencer.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index eeb7816..9de08f8 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -316,6 +316,7 @@ handle_channel_selection(void) {
316 redraw_params = true; 316 redraw_params = true;
317 } else if (key_tap(KEY_LEFT)) { 317 } else if (key_tap(KEY_LEFT)) {
318 input_handler = handle_pattern_selection; 318 input_handler = handle_pattern_selection;
319 param_selection_loc = 0;
319 redraw_params = true; 320 redraw_params = true;
320 } else if (key_tap(KEY_UP)) { 321 } else if (key_tap(KEY_UP)) {
321 if (channel_selection_loc == 0) { 322 if (channel_selection_loc == 0) {
@@ -459,6 +460,7 @@ handle_right_col_selection(void) {
459 right_col_selection_loc = R_COL_STOP; 460 right_col_selection_loc = R_COL_STOP;
460 } else { 461 } else {
461 input_handler = handle_pattern_selection; 462 input_handler = handle_pattern_selection;
463 param_selection_loc = 0;
462 redraw_trigs = true; 464 redraw_trigs = true;
463 } 465 }
464 } else if (key_tap(KEY_UP)) { 466 } else if (key_tap(KEY_UP)) {
@@ -529,6 +531,64 @@ handle_right_col_selection(void) {
529} 531}
530 532
531void 533void
534handle_pattern_chain(void) {
535 if (key_tap(KEY_A)) {
536 input_handler = handle_pattern_selection;
537 } else if (key_tap(KEY_LEFT)) {
538 if (param_selection_loc == 8) {
539 param_selection_loc = 15;
540 } else if (param_selection_loc > 0) {
541 param_selection_loc--;
542 } else if (param_selection_loc == 0) {
543 param_selection_loc = 7;
544 }
545 } else if (key_tap(KEY_RIGHT)) {
546 if (param_selection_loc < 15 && param_selection_loc != 7) {
547 param_selection_loc++;
548 } else if (param_selection_loc == 7) {
549 param_selection_loc = 0;
550 } else if (param_selection_loc == 15) {
551 param_selection_loc = 8;
552 }
553 } else if (key_tap(KEY_UP)) {
554 if (param_selection_loc <= 7) {
555 param_selection_loc += 8;
556 } else {
557 param_selection_loc -= 8;
558 }
559 } else if (key_tap(KEY_DOWN)) {
560 if (param_selection_loc <= 7) {
561 param_selection_loc += 8;
562 } else {
563 param_selection_loc -= 8;
564 }
565 } else if (key_tap(KEY_B)) {
566 if (chain.active[param_selection_loc]) {
567 // Can't toggle current chain.
568 if (!play_status || param_selection_loc != chain.current) {
569 chain.active[param_selection_loc] = 0;
570 chain.len--;
571 }
572 } else {
573 chain.active[param_selection_loc] = 1;
574 chain.len++;
575 }
576 } else if (key_tap(KEY_L)) {
577 if (chain.active[param_selection_loc]
578 && chain.chain[param_selection_loc] > 0
579 && (!play_status || param_selection_loc != chain.current)) {
580 chain.chain[param_selection_loc]--;
581 }
582 } else if (key_tap(KEY_R)) {
583 if (chain.active[param_selection_loc]
584 && chain.chain[param_selection_loc] < 7
585 && (!play_status || param_selection_loc != chain.current)) {
586 chain.chain[param_selection_loc]++;
587 }
588 }
589}
590
591void
532handle_pattern_selection(void) { 592handle_pattern_selection(void) {
533 if (key_tap(KEY_B)) { 593 if (key_tap(KEY_B)) {
534 if (key_hold(KEY_SELECT)) { 594 if (key_hold(KEY_SELECT)) {
@@ -541,6 +601,8 @@ handle_pattern_selection(void) {
541 if (key_tap(KEY_A)) { 601 if (key_tap(KEY_A)) {
542 if (key_hold(KEY_SELECT)) { 602 if (key_hold(KEY_SELECT)) {
543 clipboard_paste(); 603 clipboard_paste();
604 } else {
605 input_handler = handle_pattern_chain;
544 } 606 }
545 } 607 }
546 if (key_tap(KEY_RIGHT)) { 608 if (key_tap(KEY_RIGHT)) {