From cf1684b05ee2d90b009d2ca48fb3d76f6fb0f26a Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 24 Apr 2023 15:43:02 +0200 Subject: Finish clipboard for global channel params --- src/clipboard.c | 68 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 22 deletions(-) (limited to 'src/clipboard.c') diff --git a/src/clipboard.c b/src/clipboard.c index 97e083f..9d39598 100644 --- a/src/clipboard.c +++ b/src/clipboard.c @@ -280,38 +280,62 @@ clipboard_paste(void) { draw_channels(); draw_triggers(); } else if (input_handler == handle_channel_selection) { - if (clipboard.type == CLIP_TRIG || - clipboard.type == CLIP_PARAM_CH1 || - clipboard.type == CLIP_PARAM_CH2 || - clipboard.type == CLIP_PARAM_CH3 || - clipboard.type == CLIP_PARAM_CH4) { - if (clipboard.src_chan == channel_selection_loc) { - switch (channel_selection_loc) { - case 0: { + switch (channel_selection_loc) { + case 0: { + if (clipboard.type == CLIP_TRIG || + clipboard.type == CLIP_PARAM_CH1 || + clipboard.type == CLIP_PARAM_CH2) { + if (clipboard.src_chan == 0) { for (size_t i = 0; i < 17; i++) { pat_dst->ch1.params[i] = pat_src->ch1.params[clipboard.src_trig]; } - } break; - case 1: { + } + if (clipboard.src_chan == 1) { for (size_t i = 0; i < 17; i++) { - pat_dst->ch2.params[i] = pat_src->ch2.params[clipboard.src_trig]; + pat_dst->ch1.params[i].env_volume = pat_src->ch2.params[clipboard.src_trig].env_volume; + pat_dst->ch1.params[i].env_time = pat_src->ch2.params[clipboard.src_trig].env_time; + pat_dst->ch1.params[i].env_direction = pat_src->ch2.params[clipboard.src_trig].env_direction; + pat_dst->ch1.params[i].duty_cycle = pat_src->ch2.params[clipboard.src_trig].duty_cycle; } - } break; - case 2: { + } + } + } break; + case 1: { + if (clipboard.type == CLIP_TRIG || + clipboard.type == CLIP_PARAM_CH1 || + clipboard.type == CLIP_PARAM_CH2) { + if (clipboard.src_chan == 0) { for (size_t i = 0; i < 17; i++) { - pat_dst->ch3.params[i] = pat_src->ch3.params[clipboard.src_trig]; + pat_dst->ch2.params[i] = pat_src->ch1.params[clipboard.src_trig]; } - } break; - case 3: { + } + if (clipboard.src_chan == 1) { for (size_t i = 0; i < 17; i++) { - pat_dst->ch4.params[i] = pat_src->ch4.params[clipboard.src_trig]; + pat_dst->ch2.params[i] = pat_src->ch2.params[clipboard.src_trig]; } - } break; + } } - } - // TODO: copy params to position 16 (per-channel) if it matches the - // channel type. - // TODO: update all parameters in the rest of the triggers. + } break; + case 2: { + if (clipboard.src_chan != channel_selection_loc) { + return; + } + if (clipboard.type == CLIP_TRIG || clipboard.type == CLIP_PARAM_CH3) { + for (size_t i = 0; i < 17; i++) { + pat_dst->ch3.params[i] = pat_src->ch3.params[clipboard.src_trig]; + } + } + } break; + case 3: { + if (clipboard.src_chan != channel_selection_loc) { + return; + } + if (clipboard.type == CLIP_TRIG || clipboard.type == CLIP_PARAM_CH4) { + for (size_t i = 0; i < 17; i++) { + pat_dst->ch4.params[i] = pat_src->ch4.params[clipboard.src_trig]; + } + } + } break; } } else if (input_handler == handle_pattern_selection && clipboard.type == CLIP_PATTERN) { // Copy an entire pattern. -- cgit v1.2.1