aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-05 18:16:23 +0200
committerBad Diode <bd@badd10de.dev>2023-04-05 18:16:23 +0200
commit4198973c29b4c91c2a40c5c637d00881ceb4511e (patch)
treec5c3707896852519c4fbd8d385397c1622878ea0
parent9898fe6e7e2cf8d24387b617e010ec0610a461b2 (diff)
downloadstepper-4198973c29b4c91c2a40c5c637d00881ceb4511e.tar.gz
stepper-4198973c29b4c91c2a40c5c637d00881ceb4511e.zip
Ensure clipboard is cleared at bank switching
-rw-r--r--src/sequencer.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index 7a7d528..ff5847d 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -469,6 +469,26 @@ static Pattern patterns[8] = {
469 {default_ch1, default_ch2, default_ch3, default_ch4, default_bpm, 0}, 469 {default_ch1, default_ch2, default_ch3, default_ch4, default_bpm, 0},
470}; 470};
471 471
472typedef enum ClipboardType {
473 CLIP_EMPTY,
474 CLIP_TRIG,
475 CLIP_PARAM_CH1,
476 CLIP_PARAM_CH2,
477 CLIP_PARAM_CH3,
478 CLIP_PARAM_CH4,
479 CLIP_PATTERN,
480 CLIP_CHANNEL,
481} ClipboardType;
482
483typedef struct Clipboard {
484 ClipboardType type;
485 u8 src_pat;
486 u8 src_chan;
487 u8 src_trig;
488} Clipboard;
489
490static Clipboard clipboard = {CLIP_EMPTY, 0, 0, 0};
491
472void 492void
473save_bank(int i) { 493save_bank(int i) {
474 sram_write(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns)); 494 sram_write(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns));
@@ -2002,6 +2022,7 @@ pause_playing(void) {
2002void 2022void
2003select_bank(int i) { 2023select_bank(int i) {
2004 stop_playing(); 2024 stop_playing();
2025 clipboard.type = CLIP_EMPTY;
2005 save_bank(current_bank); 2026 save_bank(current_bank);
2006 metadata.current_pattern = current_pattern; 2027 metadata.current_pattern = current_pattern;
2007 metadata.current_bank = i; 2028 metadata.current_bank = i;
@@ -2602,26 +2623,6 @@ handle_trigger_selection(void) {
2602 } 2623 }
2603} 2624}
2604 2625
2605typedef enum ClipboardType {
2606 CLIP_EMPTY,
2607 CLIP_TRIG,
2608 CLIP_PARAM_CH1,
2609 CLIP_PARAM_CH2,
2610 CLIP_PARAM_CH3,
2611 CLIP_PARAM_CH4,
2612 CLIP_PATTERN,
2613 CLIP_CHANNEL,
2614} ClipboardType;
2615
2616typedef struct Clipboard {
2617 ClipboardType type;
2618 u8 src_pat;
2619 u8 src_chan;
2620 u8 src_trig;
2621} Clipboard;
2622
2623static Clipboard clipboard = {CLIP_EMPTY, 0, 0, 0};
2624
2625void 2626void
2626clipboard_paste(void) { 2627clipboard_paste(void) {
2627 Pattern *pat_dst = &patterns[pattern_selection_loc]; 2628 Pattern *pat_dst = &patterns[pattern_selection_loc];