From c7c789096ec6aa31ed98396fd066f1b39dfa8e01 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 24 Apr 2023 12:16:55 +0200 Subject: Fix copy-paste behaviour when copying channels --- src/sequencer.c | 117 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 45 deletions(-) (limited to 'src/sequencer.c') diff --git a/src/sequencer.c b/src/sequencer.c index 2940b25..4528e0f 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -186,21 +186,31 @@ get_current_trig(void) { void handle_channel_selection(void) { if (key_tap(KEY_B)) { - switch (channel_selection_loc) { - case 0: { - patterns[pattern_selection_loc].ch1.active ^= 1; - } break; - case 1: { - patterns[pattern_selection_loc].ch2.active ^= 1; - } break; - case 2: { - patterns[pattern_selection_loc].ch3.active ^= 1; - } break; - case 3: { - patterns[pattern_selection_loc].ch4.active ^= 1; - } break; + if (key_hold(KEY_SELECT)) { + clipboard_copy(); + } else { + switch (channel_selection_loc) { + case 0: { + patterns[pattern_selection_loc].ch1.active ^= 1; + } break; + case 1: { + patterns[pattern_selection_loc].ch2.active ^= 1; + } break; + case 2: { + patterns[pattern_selection_loc].ch3.active ^= 1; + } break; + case 3: { + patterns[pattern_selection_loc].ch4.active ^= 1; + } break; + } + redraw_channels = true; + } + } else { + if (key_tap(KEY_A)) { + if (key_hold(KEY_SELECT)) { + clipboard_paste(); + } } - redraw_channels = true; } if (key_tap(KEY_RIGHT)) { trig_selection_loc = 0; @@ -384,8 +394,17 @@ handle_right_col_selection(void) { void handle_pattern_selection(void) { if (key_tap(KEY_B)) { - next_pattern = pattern_selection_loc; - redraw_pattern_buttons = true; + if (key_hold(KEY_SELECT)) { + clipboard_copy(); + } else { + next_pattern = pattern_selection_loc; + redraw_pattern_buttons = true; + } + } + if (key_tap(KEY_A)) { + if (key_hold(KEY_SELECT)) { + clipboard_paste(); + } } if (key_tap(KEY_RIGHT)) { input_handler = handle_channel_selection; @@ -773,9 +792,13 @@ handle_trigger_selection(void) { TriggerNote *trig = get_current_trig(); if (key_tap(KEY_B)) { - // Toggle trigger. - trig->active ^= 1; - redraw_trigs = true; + if (key_hold(KEY_SELECT)) { + clipboard_copy(); + } else { + // Toggle trigger. + trig->active ^= 1; + redraw_trigs = true; + } } else if (key_tap(KEY_L)) { // Decrease note. if (trig->active) { @@ -819,23 +842,27 @@ handle_trigger_selection(void) { redraw_params = true; redraw_piano_note = true; } else if (key_tap(KEY_A)) { - // Switch to parameter selection. - switch (channel_selection_loc) { - case 0: { - input_handler = handle_param_selection_sq1; - } break; - case 1: { - input_handler = handle_param_selection_sq2; - } break; - case 2: { - input_handler = handle_param_selection_wave; - } break; - case 3: { - input_handler = handle_param_selection_noise; - } break; + if (key_hold(KEY_SELECT)) { + clipboard_paste(); + } else { + // Switch to parameter selection. + switch (channel_selection_loc) { + case 0: { + input_handler = handle_param_selection_sq1; + } break; + case 1: { + input_handler = handle_param_selection_sq2; + } break; + case 2: { + input_handler = handle_param_selection_wave; + } break; + case 3: { + input_handler = handle_param_selection_noise; + } break; + } + redraw_params = true; + redraw_piano_note = true; } - redraw_params = true; - redraw_piano_note = true; } } @@ -850,17 +877,17 @@ handle_sequencer_input(void) { input_handler == handle_param_selection_wave || input_handler == handle_param_selection_noise) { clipboard_copy(); - input_handler(); - } - if (input_handler == handle_right_col_selection) { - input_handler(); - } - // Clipboard combo. - else if (key_tap(KEY_A)) { - clipboard_paste(); - } else if (key_tap(KEY_B)){ - clipboard_copy(); } + input_handler(); + // // if (input_handler == handle_right_col_selection) { + // // input_handler(); + // // } + // // // Clipboard combo. + // // else if (key_tap(KEY_A)) { + // // clipboard_paste(); + // // } else if (key_tap(KEY_B)){ + // // clipboard_copy(); + // // } } else { input_handler(); } -- cgit v1.2.1