diff options
author | Bad Diode <bd@badd10de.dev> | 2023-04-24 12:16:55 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-04-24 12:16:55 +0200 |
commit | c7c789096ec6aa31ed98396fd066f1b39dfa8e01 (patch) | |
tree | 9e10889f253959f0ad5abcb69832d9fe4fbf1948 /src/sequencer.c | |
parent | 0fa40db0a578cc2dc3952fe108a332a1e3182452 (diff) | |
download | stepper-c7c789096ec6aa31ed98396fd066f1b39dfa8e01.tar.gz stepper-c7c789096ec6aa31ed98396fd066f1b39dfa8e01.zip |
Fix copy-paste behaviour when copying channels
Diffstat (limited to 'src/sequencer.c')
-rw-r--r-- | src/sequencer.c | 117 |
1 files changed, 72 insertions, 45 deletions
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) { | |||
186 | void | 186 | void |
187 | handle_channel_selection(void) { | 187 | handle_channel_selection(void) { |
188 | if (key_tap(KEY_B)) { | 188 | if (key_tap(KEY_B)) { |
189 | switch (channel_selection_loc) { | 189 | if (key_hold(KEY_SELECT)) { |
190 | case 0: { | 190 | clipboard_copy(); |
191 | patterns[pattern_selection_loc].ch1.active ^= 1; | 191 | } else { |
192 | } break; | 192 | switch (channel_selection_loc) { |
193 | case 1: { | 193 | case 0: { |
194 | patterns[pattern_selection_loc].ch2.active ^= 1; | 194 | patterns[pattern_selection_loc].ch1.active ^= 1; |
195 | } break; | 195 | } break; |
196 | case 2: { | 196 | case 1: { |
197 | patterns[pattern_selection_loc].ch3.active ^= 1; | 197 | patterns[pattern_selection_loc].ch2.active ^= 1; |
198 | } break; | 198 | } break; |
199 | case 3: { | 199 | case 2: { |
200 | patterns[pattern_selection_loc].ch4.active ^= 1; | 200 | patterns[pattern_selection_loc].ch3.active ^= 1; |
201 | } break; | 201 | } break; |
202 | case 3: { | ||
203 | patterns[pattern_selection_loc].ch4.active ^= 1; | ||
204 | } break; | ||
205 | } | ||
206 | redraw_channels = true; | ||
207 | } | ||
208 | } else { | ||
209 | if (key_tap(KEY_A)) { | ||
210 | if (key_hold(KEY_SELECT)) { | ||
211 | clipboard_paste(); | ||
212 | } | ||
202 | } | 213 | } |
203 | redraw_channels = true; | ||
204 | } | 214 | } |
205 | if (key_tap(KEY_RIGHT)) { | 215 | if (key_tap(KEY_RIGHT)) { |
206 | trig_selection_loc = 0; | 216 | trig_selection_loc = 0; |
@@ -384,8 +394,17 @@ handle_right_col_selection(void) { | |||
384 | void | 394 | void |
385 | handle_pattern_selection(void) { | 395 | handle_pattern_selection(void) { |
386 | if (key_tap(KEY_B)) { | 396 | if (key_tap(KEY_B)) { |
387 | next_pattern = pattern_selection_loc; | 397 | if (key_hold(KEY_SELECT)) { |
388 | redraw_pattern_buttons = true; | 398 | clipboard_copy(); |
399 | } else { | ||
400 | next_pattern = pattern_selection_loc; | ||
401 | redraw_pattern_buttons = true; | ||
402 | } | ||
403 | } | ||
404 | if (key_tap(KEY_A)) { | ||
405 | if (key_hold(KEY_SELECT)) { | ||
406 | clipboard_paste(); | ||
407 | } | ||
389 | } | 408 | } |
390 | if (key_tap(KEY_RIGHT)) { | 409 | if (key_tap(KEY_RIGHT)) { |
391 | input_handler = handle_channel_selection; | 410 | input_handler = handle_channel_selection; |
@@ -773,9 +792,13 @@ handle_trigger_selection(void) { | |||
773 | TriggerNote *trig = get_current_trig(); | 792 | TriggerNote *trig = get_current_trig(); |
774 | 793 | ||
775 | if (key_tap(KEY_B)) { | 794 | if (key_tap(KEY_B)) { |
776 | // Toggle trigger. | 795 | if (key_hold(KEY_SELECT)) { |
777 | trig->active ^= 1; | 796 | clipboard_copy(); |
778 | redraw_trigs = true; | 797 | } else { |
798 | // Toggle trigger. | ||
799 | trig->active ^= 1; | ||
800 | redraw_trigs = true; | ||
801 | } | ||
779 | } else if (key_tap(KEY_L)) { | 802 | } else if (key_tap(KEY_L)) { |
780 | // Decrease note. | 803 | // Decrease note. |
781 | if (trig->active) { | 804 | if (trig->active) { |
@@ -819,23 +842,27 @@ handle_trigger_selection(void) { | |||
819 | redraw_params = true; | 842 | redraw_params = true; |
820 | redraw_piano_note = true; | 843 | redraw_piano_note = true; |
821 | } else if (key_tap(KEY_A)) { | 844 | } else if (key_tap(KEY_A)) { |
822 | // Switch to parameter selection. | 845 | if (key_hold(KEY_SELECT)) { |
823 | switch (channel_selection_loc) { | 846 | clipboard_paste(); |
824 | case 0: { | 847 | } else { |
825 | input_handler = handle_param_selection_sq1; | 848 | // Switch to parameter selection. |
826 | } break; | 849 | switch (channel_selection_loc) { |
827 | case 1: { | 850 | case 0: { |
828 | input_handler = handle_param_selection_sq2; | 851 | input_handler = handle_param_selection_sq1; |
829 | } break; | 852 | } break; |
830 | case 2: { | 853 | case 1: { |
831 | input_handler = handle_param_selection_wave; | 854 | input_handler = handle_param_selection_sq2; |
832 | } break; | 855 | } break; |
833 | case 3: { | 856 | case 2: { |
834 | input_handler = handle_param_selection_noise; | 857 | input_handler = handle_param_selection_wave; |
835 | } break; | 858 | } break; |
859 | case 3: { | ||
860 | input_handler = handle_param_selection_noise; | ||
861 | } break; | ||
862 | } | ||
863 | redraw_params = true; | ||
864 | redraw_piano_note = true; | ||
836 | } | 865 | } |
837 | redraw_params = true; | ||
838 | redraw_piano_note = true; | ||
839 | } | 866 | } |
840 | } | 867 | } |
841 | 868 | ||
@@ -850,17 +877,17 @@ handle_sequencer_input(void) { | |||
850 | input_handler == handle_param_selection_wave || | 877 | input_handler == handle_param_selection_wave || |
851 | input_handler == handle_param_selection_noise) { | 878 | input_handler == handle_param_selection_noise) { |
852 | clipboard_copy(); | 879 | clipboard_copy(); |
853 | input_handler(); | ||
854 | } | ||
855 | if (input_handler == handle_right_col_selection) { | ||
856 | input_handler(); | ||
857 | } | ||
858 | // Clipboard combo. | ||
859 | else if (key_tap(KEY_A)) { | ||
860 | clipboard_paste(); | ||
861 | } else if (key_tap(KEY_B)){ | ||
862 | clipboard_copy(); | ||
863 | } | 880 | } |
881 | input_handler(); | ||
882 | // // if (input_handler == handle_right_col_selection) { | ||
883 | // // input_handler(); | ||
884 | // // } | ||
885 | // // // Clipboard combo. | ||
886 | // // else if (key_tap(KEY_A)) { | ||
887 | // // clipboard_paste(); | ||
888 | // // } else if (key_tap(KEY_B)){ | ||
889 | // // clipboard_copy(); | ||
890 | // // } | ||
864 | } else { | 891 | } else { |
865 | input_handler(); | 892 | input_handler(); |
866 | } | 893 | } |