From 7399fd06ad3e9682a619550c6de50a565ccc3a25 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 24 Apr 2023 14:49:38 +0200 Subject: Prepare for per-channel param adjustment --- src/drawing.c | 454 +++++++++++++++++----------------------------------------- 1 file changed, 129 insertions(+), 325 deletions(-) (limited to 'src/drawing.c') diff --git a/src/drawing.c b/src/drawing.c index 964c4ce..0ee1243 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -14,18 +14,10 @@ draw_channels(void) { for (size_t i = 0; i < 4; i++) { bool active = false; switch (i) { - case 0: { - active = patterns[pattern_selection_loc].ch1.active; - } break; - case 1: { - active = patterns[pattern_selection_loc].ch2.active; - } break; - case 2: { - active = patterns[pattern_selection_loc].ch3.active; - } break; - case 3: { - active = patterns[pattern_selection_loc].ch4.active; - } break; + case 0: { active = patterns[pattern_selection_loc].ch1.active; } break; + case 1: { active = patterns[pattern_selection_loc].ch2.active; } break; + case 2: { active = patterns[pattern_selection_loc].ch3.active; } break; + case 3: { active = patterns[pattern_selection_loc].ch4.active; } break; } u8 clr = active ? COL_FG : COL_GREY; size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; @@ -62,18 +54,10 @@ void draw_trigger(size_t chan, size_t i) { TriggerNote trig = {0}; switch (chan) { - case 0: { - trig = patterns[pattern_selection_loc].ch1.notes[i]; - } break; - case 1: { - trig = patterns[pattern_selection_loc].ch2.notes[i]; - } break; - case 2: { - trig = patterns[pattern_selection_loc].ch3.notes[i]; - } break; - case 3: { - trig = patterns[pattern_selection_loc].ch4.notes[i]; - } break; + case 0: { trig = patterns[pattern_selection_loc].ch1.notes[i]; } break; + case 1: { trig = patterns[pattern_selection_loc].ch2.notes[i]; } break; + case 2: { trig = patterns[pattern_selection_loc].ch3.notes[i]; } break; + case 3: { trig = patterns[pattern_selection_loc].ch4.notes[i]; } break; } if (trig.active) { size_t offset_x = TRIG_OFFSET_X * (i % 8); @@ -373,21 +357,11 @@ draw_note(u8 note, u8 clr) { y0 = PIANO_START_Y + 2; y1 = PIANO_START_Y - 2 + 11; switch (value) { - case 1: { - x0 = PIANO_START_X + 2 + octave * 28 + 3; - } break; - case 3: { - x0 = PIANO_START_X + 2 + octave * 28 + 7; - } break; - case 6: { - x0 = PIANO_START_X + 2 + octave * 28 + 15; - } break; - case 8: { - x0 = PIANO_START_X + 2 + octave * 28 + 19; - } break; - case 10: { - x0 = PIANO_START_X + 2 + octave * 28 + 23; - } break; + case 1: { x0 = PIANO_START_X + 2 + octave * 28 + 3; } break; + case 3: { x0 = PIANO_START_X + 2 + octave * 28 + 7; } break; + case 6: { x0 = PIANO_START_X + 2 + octave * 28 + 15; } break; + case 8: { x0 = PIANO_START_X + 2 + octave * 28 + 19; } break; + case 10: { x0 = PIANO_START_X + 2 + octave * 28 + 23; } break; } x1 = x0; draw_line(x0, y0, x1, y1, clr); @@ -512,18 +486,10 @@ draw_params_cursor_square(size_t i, u8 clr, bool sweep) { void draw_params_cursor(size_t i, u8 clr) { switch (channel_selection_loc) { - case 0: { - draw_params_cursor_square(i, clr, true); - } break; - case 1: { - draw_params_cursor_square(i, clr, false); - } break; - case 2: { - draw_params_cursor_wave(i, clr); - } break; - case 3: { - draw_params_cursor_noise(i, clr); - } break; + case 0: { draw_params_cursor_square(i, clr, true); } break; + case 1: { draw_params_cursor_square(i, clr, false); } break; + case 2: { draw_params_cursor_wave(i, clr); } break; + case 3: { draw_params_cursor_noise(i, clr); } break; } } @@ -555,12 +521,11 @@ clear_parameters(void) { IWRAM_CODE void -draw_parameters_wave(void) { +draw_parameters_wave(ChannelWaveParams *params) { // Draw current wave data. - Pattern *pat = &patterns[pattern_selection_loc]; { - u8 *wave_a = pat->ch3.params[trig_selection_loc].wave_a; - u8 *wave_b = pat->ch3.params[trig_selection_loc].wave_b; + u8 *wave_a = params->wave_a; + u8 *wave_b = params->wave_b; size_t x = PARAMS_START_X; size_t y = PARAMS_START_Y + 13; @@ -617,16 +582,10 @@ draw_parameters_wave(void) { draw_line(x, y + 17, x + 30, y + 17, COL_FG); txt_drawf_small("mode", x + 6, y, COL_FG); - switch (pat->ch3.params[trig_selection_loc].wave_mode) { - case 0: { - txt_drawf("A", x + 12, y + 7, COL_FG); - } break; - case 1: { - txt_drawf("B", x + 12, y + 7, COL_FG); - } break; - case 2: { - txt_drawf("A+B", x + 6, y + 7, COL_FG); - } break; + switch (params->wave_mode) { + case 0: { txt_drawf("A", x + 12, y + 7, COL_FG); } break; + case 1: { txt_drawf("B", x + 12, y + 7, COL_FG); } break; + case 2: { txt_drawf("A+B", x + 6, y + 7, COL_FG); } break; } } @@ -641,22 +600,12 @@ draw_parameters_wave(void) { draw_line(x, y + 20, x + 30, y + 20, COL_FG); txt_drawf_small("vol", x + 8, y + 3, COL_FG); - switch (pat->ch3.params[trig_selection_loc].wave_volume) { - case 0: { - txt_drawf("0", x + 12, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("25", x + 9, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("50", x + 9, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("75", x + 9, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("100", x + 6, y + 10, COL_FG); - } break; + switch (params->wave_volume) { + case 0: { txt_drawf("0", x + 12, y + 10, COL_FG); } break; + case 1: { txt_drawf("25", x + 9, y + 10, COL_FG); } break; + case 2: { txt_drawf("50", x + 9, y + 10, COL_FG); } break; + case 3: { txt_drawf("75", x + 9, y + 10, COL_FG); } break; + case 4: { txt_drawf("100", x + 6, y + 10, COL_FG); } break; } } } @@ -737,18 +686,10 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { txt_drawf_small("duty", x + 3, y + 3, COL_FG); switch (params->duty_cycle) { - case 0: { - txt_drawf("12", x + 6, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("25", x + 6, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("50", x + 6, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("75", x + 6, y + 10, COL_FG); - } break; + case 0: { txt_drawf("12", x + 6, y + 10, COL_FG); } break; + case 1: { txt_drawf("25", x + 6, y + 10, COL_FG); } break; + case 2: { txt_drawf("50", x + 6, y + 10, COL_FG); } break; + case 3: { txt_drawf("75", x + 6, y + 10, COL_FG); } break; } } } @@ -796,54 +737,22 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { txt_drawf_small("vol", x + 5, y + 3, COL_FG); switch (params->env_volume) { - case 0: { - txt_drawf("0", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("6", x + 9, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("13", x + 6, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("20", x + 6, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("26", x + 6, y + 10, COL_FG); - } break; - case 5: { - txt_drawf("33", x + 6, y + 10, COL_FG); - } break; - case 6: { - txt_drawf("40", x + 6, y + 10, COL_FG); - } break; - case 7: { - txt_drawf("46", x + 6, y + 10, COL_FG); - } break; - case 8: { - txt_drawf("53", x + 6, y + 10, COL_FG); - } break; - case 9: { - txt_drawf("60", x + 6, y + 10, COL_FG); - } break; - case 10: { - txt_drawf("66", x + 6, y + 10, COL_FG); - } break; - case 11: { - txt_drawf("73", x + 6, y + 10, COL_FG); - } break; - case 12: { - txt_drawf("80", x + 6, y + 10, COL_FG); - } break; - case 13: { - txt_drawf("86", x + 6, y + 10, COL_FG); - } break; - case 14: { - txt_drawf("93", x + 6, y + 10, COL_FG); - } break; - case 15: { - txt_drawf("100", x + 3, y + 10, COL_FG); - } break; + case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; + case 2: { txt_drawf("13", x + 6, y + 10, COL_FG); } break; + case 3: { txt_drawf("20", x + 6, y + 10, COL_FG); } break; + case 4: { txt_drawf("26", x + 6, y + 10, COL_FG); } break; + case 5: { txt_drawf("33", x + 6, y + 10, COL_FG); } break; + case 6: { txt_drawf("40", x + 6, y + 10, COL_FG); } break; + case 7: { txt_drawf("46", x + 6, y + 10, COL_FG); } break; + case 8: { txt_drawf("53", x + 6, y + 10, COL_FG); } break; + case 9: { txt_drawf("60", x + 6, y + 10, COL_FG); } break; + case 10: { txt_drawf("66", x + 6, y + 10, COL_FG); } break; + case 11: { txt_drawf("73", x + 6, y + 10, COL_FG); } break; + case 12: { txt_drawf("80", x + 6, y + 10, COL_FG); } break; + case 13: { txt_drawf("86", x + 6, y + 10, COL_FG); } break; + case 14: { txt_drawf("93", x + 6, y + 10, COL_FG); } break; + case 15: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; } } @@ -861,12 +770,8 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { char arr_up[2] = { 0x19, 0 }; char arr_down[2] = { 0x18, 0 }; switch (params->env_direction) { - case 0: { - txt_drawf(arr_up, x + 9, y + 11, COL_FG); - } break; - case 1: { - txt_drawf(arr_down, x + 9, y + 11, COL_FG); - } break; + case 0: { txt_drawf(arr_up, x + 9, y + 11, COL_FG); } break; + case 1: { txt_drawf(arr_down, x + 9, y + 11, COL_FG); } break; } } @@ -882,30 +787,14 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { txt_drawf_small("time", x + 3, y + 3, COL_FG); switch (params->env_time) { - case 0: { - txt_drawf("0", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("14", x + 6, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("28", x + 6, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("42", x + 6, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("57", x + 6, y + 10, COL_FG); - } break; - case 5: { - txt_drawf("71", x + 6, y + 10, COL_FG); - } break; - case 6: { - txt_drawf("85", x + 6, y + 10, COL_FG); - } break; - case 7: { - txt_drawf("100", x + 3, y + 10, COL_FG); - } break; + case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("14", x + 6, y + 10, COL_FG); } break; + case 2: { txt_drawf("28", x + 6, y + 10, COL_FG); } break; + case 3: { txt_drawf("42", x + 6, y + 10, COL_FG); } break; + case 4: { txt_drawf("57", x + 6, y + 10, COL_FG); } break; + case 5: { txt_drawf("71", x + 6, y + 10, COL_FG); } break; + case 6: { txt_drawf("85", x + 6, y + 10, COL_FG); } break; + case 7: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; } } } @@ -922,30 +811,14 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { txt_drawf_small("num", x + 5, y + 3, COL_FG); switch (params->sweep_number) { - case 0: { - txt_drawf("0", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("1", x + 9, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("2", x + 9, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("3", x + 9, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("4", x + 9, y + 10, COL_FG); - } break; - case 5: { - txt_drawf("5", x + 9, y + 10, COL_FG); - } break; - case 6: { - txt_drawf("6", x + 9, y + 10, COL_FG); - } break; - case 7: { - txt_drawf("7", x + 9, y + 10, COL_FG); - } break; + case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("1", x + 9, y + 10, COL_FG); } break; + case 2: { txt_drawf("2", x + 9, y + 10, COL_FG); } break; + case 3: { txt_drawf("3", x + 9, y + 10, COL_FG); } break; + case 4: { txt_drawf("4", x + 9, y + 10, COL_FG); } break; + case 5: { txt_drawf("5", x + 9, y + 10, COL_FG); } break; + case 6: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; + case 7: { txt_drawf("7", x + 9, y + 10, COL_FG); } break; } } @@ -961,30 +834,14 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { txt_drawf_small("time", x + 3, y + 3, COL_FG); switch (params->sweep_time) { - case 0: { - txt_drawf("0", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("1", x + 9, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("2", x + 9, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("3", x + 9, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("4", x + 9, y + 10, COL_FG); - } break; - case 5: { - txt_drawf("5", x + 9, y + 10, COL_FG); - } break; - case 6: { - txt_drawf("6", x + 9, y + 10, COL_FG); - } break; - case 7: { - txt_drawf("7", x + 9, y + 10, COL_FG); - } break; + case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("1", x + 9, y + 10, COL_FG); } break; + case 2: { txt_drawf("2", x + 9, y + 10, COL_FG); } break; + case 3: { txt_drawf("3", x + 9, y + 10, COL_FG); } break; + case 4: { txt_drawf("4", x + 9, y + 10, COL_FG); } break; + case 5: { txt_drawf("5", x + 9, y + 10, COL_FG); } break; + case 6: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; + case 7: { txt_drawf("7", x + 9, y + 10, COL_FG); } break; } } @@ -1002,12 +859,8 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { char arr_up[2] = { 0x19, 0 }; char arr_down[2] = { 0x18, 0 }; switch (params->sweep_direction) { - case 0: { - txt_drawf(arr_up, x + 9, y + 11, COL_FG); - } break; - case 1: { - txt_drawf(arr_down, x + 9, y + 11, COL_FG); - } break; + case 0: { txt_drawf(arr_up, x + 9, y + 11, COL_FG); } break; + case 1: { txt_drawf(arr_down, x + 9, y + 11, COL_FG); } break; } } @@ -1024,10 +877,8 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { } void -draw_parameters_noise(void) { +draw_parameters_noise(ChannelNoiseParams* params) { size_t x_offset = 30; - Pattern *pat = &patterns[pattern_selection_loc]; - ChannelNoiseParams *params = &pat->ch4.params[trig_selection_loc]; // Bit mode. { @@ -1043,12 +894,8 @@ draw_parameters_noise(void) { txt_drawf_small("mode", x + 3, y + 3, COL_FG); switch (params->bit_mode) { - case 0: { - txt_drawf("A", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("B", x + 9, y + 10, COL_FG); - } break; + case 0: { txt_drawf("A", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("B", x + 9, y + 10, COL_FG); } break; } } } @@ -1096,54 +943,22 @@ draw_parameters_noise(void) { txt_drawf_small("vol", x + 5, y + 3, COL_FG); switch (params->env_volume) { - case 0: { - txt_drawf("0", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("6", x + 9, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("13", x + 6, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("20", x + 6, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("26", x + 6, y + 10, COL_FG); - } break; - case 5: { - txt_drawf("33", x + 6, y + 10, COL_FG); - } break; - case 6: { - txt_drawf("40", x + 6, y + 10, COL_FG); - } break; - case 7: { - txt_drawf("46", x + 6, y + 10, COL_FG); - } break; - case 8: { - txt_drawf("53", x + 6, y + 10, COL_FG); - } break; - case 9: { - txt_drawf("60", x + 6, y + 10, COL_FG); - } break; - case 10: { - txt_drawf("66", x + 6, y + 10, COL_FG); - } break; - case 11: { - txt_drawf("73", x + 6, y + 10, COL_FG); - } break; - case 12: { - txt_drawf("80", x + 6, y + 10, COL_FG); - } break; - case 13: { - txt_drawf("86", x + 6, y + 10, COL_FG); - } break; - case 14: { - txt_drawf("93", x + 6, y + 10, COL_FG); - } break; - case 15: { - txt_drawf("100", x + 3, y + 10, COL_FG); - } break; + case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; + case 2: { txt_drawf("13", x + 6, y + 10, COL_FG); } break; + case 3: { txt_drawf("20", x + 6, y + 10, COL_FG); } break; + case 4: { txt_drawf("26", x + 6, y + 10, COL_FG); } break; + case 5: { txt_drawf("33", x + 6, y + 10, COL_FG); } break; + case 6: { txt_drawf("40", x + 6, y + 10, COL_FG); } break; + case 7: { txt_drawf("46", x + 6, y + 10, COL_FG); } break; + case 8: { txt_drawf("53", x + 6, y + 10, COL_FG); } break; + case 9: { txt_drawf("60", x + 6, y + 10, COL_FG); } break; + case 10: { txt_drawf("66", x + 6, y + 10, COL_FG); } break; + case 11: { txt_drawf("73", x + 6, y + 10, COL_FG); } break; + case 12: { txt_drawf("80", x + 6, y + 10, COL_FG); } break; + case 13: { txt_drawf("86", x + 6, y + 10, COL_FG); } break; + case 14: { txt_drawf("93", x + 6, y + 10, COL_FG); } break; + case 15: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; } } @@ -1182,30 +997,14 @@ draw_parameters_noise(void) { txt_drawf_small("time", x + 3, y + 3, COL_FG); switch (params->env_time) { - case 0: { - txt_drawf("0", x + 9, y + 10, COL_FG); - } break; - case 1: { - txt_drawf("14", x + 6, y + 10, COL_FG); - } break; - case 2: { - txt_drawf("28", x + 6, y + 10, COL_FG); - } break; - case 3: { - txt_drawf("42", x + 6, y + 10, COL_FG); - } break; - case 4: { - txt_drawf("57", x + 6, y + 10, COL_FG); - } break; - case 5: { - txt_drawf("71", x + 6, y + 10, COL_FG); - } break; - case 6: { - txt_drawf("85", x + 6, y + 10, COL_FG); - } break; - case 7: { - txt_drawf("100", x + 3, y + 10, COL_FG); - } break; + case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; + case 1: { txt_drawf("14", x + 6, y + 10, COL_FG); } break; + case 2: { txt_drawf("28", x + 6, y + 10, COL_FG); } break; + case 3: { txt_drawf("42", x + 6, y + 10, COL_FG); } break; + case 4: { txt_drawf("57", x + 6, y + 10, COL_FG); } break; + case 5: { txt_drawf("71", x + 6, y + 10, COL_FG); } break; + case 6: { txt_drawf("85", x + 6, y + 10, COL_FG); } break; + case 7: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; } } } @@ -1221,27 +1020,32 @@ draw_parameters_noise(void) { void draw_parameters(void) { clear_parameters(); - if (input_handler != handle_trigger_selection && - input_handler != handle_param_selection_sq1 && - input_handler != handle_param_selection_sq2 && - input_handler != handle_param_selection_wave && - input_handler != handle_param_selection_noise) { + Pattern *pat = &patterns[pattern_selection_loc]; + if (input_handler == handle_trigger_selection || + input_handler == handle_param_selection_sq1 || + input_handler == handle_param_selection_sq2 || + input_handler == handle_param_selection_wave || + input_handler == handle_param_selection_noise) { + switch (channel_selection_loc) { + case 0: { draw_parameters_square(&pat->ch1.params[trig_selection_loc], true); } break; + case 1: { draw_parameters_square(&pat->ch2.params[trig_selection_loc], false); } break; + case 2: { draw_parameters_wave(&pat->ch3.params[trig_selection_loc]); } break; + case 3: { draw_parameters_noise(&pat->ch4.params[trig_selection_loc]); } break; + } return; } - Pattern *pat = &patterns[pattern_selection_loc]; - switch (channel_selection_loc) { - case 0: { - draw_parameters_square(&pat->ch1.params[trig_selection_loc], true); - } break; - case 1: { - draw_parameters_square(&pat->ch2.params[trig_selection_loc], false); - } break; - case 2: { - draw_parameters_wave(); - } break; - case 3: { - draw_parameters_noise(); - } break; + if (input_handler == handle_channel_selection || + input_handler == handle_param_selection_ch1 || + input_handler == handle_param_selection_ch2 || + input_handler == handle_param_selection_ch3 || + input_handler == handle_param_selection_ch4) { + switch (channel_selection_loc) { + case 0: { draw_parameters_square(&pat->ch1.params[16], true); } break; + case 1: { draw_parameters_square(&pat->ch2.params[16], false); } break; + case 2: { draw_parameters_wave(&pat->ch3.params[16]); } break; + case 3: { draw_parameters_noise(&pat->ch4.params[16]); } break; + } + return; } } -- cgit v1.2.1