From ea2c7552dd414422bfe23117dc8440f4183611c7 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sat, 29 Jul 2023 20:56:09 +0200 Subject: Add per-trig panning support --- src/drawing.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 3 deletions(-) (limited to 'src/drawing.c') diff --git a/src/drawing.c b/src/drawing.c index a48a1ea..3ed294e 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -515,6 +515,11 @@ draw_params_cursor_wave(size_t i, u8 clr) { y += PARAMS_BOX_H - 7 + PARAMS_BOX_OFFSET_Y; txt_drawf_small("vol", x, y, COL_BG); } break; + case 9: { + x += 8 + PARAMS_BOX_OFFSET_X * 4; + y += PARAMS_BOX_H - 7 + PARAMS_BOX_OFFSET_Y; + txt_drawf_small("pan", x, y, COL_BG); + } break; default: break; } } @@ -563,6 +568,11 @@ draw_params_cursor_noise(size_t i, u8 clr) { y += PARAMS_BOX_H - 7; txt_drawf_small("prob", x, y, COL_BG); } break; + case 9: { + x += 8 + PARAMS_BOX_OFFSET_X * 4; + y += PARAMS_BOX_H - 7 + PARAMS_BOX_OFFSET_Y; + txt_drawf_small("pan", x, y, COL_BG); + } break; default: break; } } @@ -626,6 +636,11 @@ draw_params_cursor_square(size_t i, u8 clr) { y += PARAMS_BOX_H - 7 + PARAMS_BOX_OFFSET_Y; txt_drawf_small("dir", x, y, COL_BG); } break; + case 9: { + x += 8 + PARAMS_BOX_OFFSET_X * 4; + y += PARAMS_BOX_H - 7 + PARAMS_BOX_OFFSET_Y; + txt_drawf_small("pan", x, y, COL_BG); + } break; default: break; } } @@ -710,6 +725,33 @@ draw_prob(u8 prob, u8 clr) { } } +void +draw_panning(s8 pan, u8 clr) { + switch (settings.sync) { + case SYNC_OUT_LINK_AUDIO_4: + case SYNC_OUT_LINK_AUDIO_8: + case SYNC_OUT_LINK_AUDIO_16: + case SYNC_OUT_AUDIO_4: + case SYNC_OUT_AUDIO_8: + case SYNC_OUT_AUDIO_16: { clr = COL_OFF; } break; + default: break; + } + size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; + size_t y = PARAMS_START_Y + PARAMS_BOX_OFFSET_Y + 5; + switch (pan) { + case -1: { + txt_drawf("L", x + 9, y, clr); + } break; + case 0: { + txt_drawf("MID", x + 3, y, clr); + } break; + case 1: { + txt_drawf("R", x + 9, y, clr); + } break; + default: break; + } +} + IWRAM_CODE void draw_parameters_wave(ChannelWaveParams *params, bool global) { @@ -731,6 +773,9 @@ draw_parameters_wave(ChannelWaveParams *params, bool global) { // Trig probability. draw_prob(params->prob, col_fg); + // Trig pannning. + draw_panning(params->pan, col_fg); + // Mode selection. { size_t x = PARAMS_START_X; @@ -782,13 +827,13 @@ draw_parameters_wave(ChannelWaveParams *params, bool global) { y += PARAMS_BOX_OFFSET_Y; txt_drawf_small("mode", x + 6 + PARAMS_BOX_OFFSET_X * 0, y + PARAMS_BOX_H - 7, col_fg); txt_drawf_small("vol", x + 8 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); + txt_drawf_small("pan", x + 8 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); } // Empty spacers. { draw_param_stub(7, COL_OFF); draw_param_stub(8, COL_OFF); - draw_param_stub(9, COL_OFF); } } @@ -877,6 +922,9 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) { // Trig probability. draw_prob(params->prob, col_fg); + // Trig pannning. + draw_panning(params->pan, col_fg); + // Sweep. if (sweep) { size_t x = PARAMS_START_X; @@ -942,6 +990,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) { txt_drawf_small("time", x + 6 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); txt_drawf_small("dir", x + 8 + PARAMS_BOX_OFFSET_X * 2, y + PARAMS_BOX_H - 7, col_fg); } + txt_drawf_small("pan", x + 8 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); } // Empty spacers. @@ -952,7 +1001,6 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) { draw_param_stub(7, COL_OFF); } draw_param_stub(8, COL_OFF); - draw_param_stub(9, COL_OFF); } } @@ -996,6 +1044,9 @@ draw_parameters_noise(ChannelNoiseParams* params, bool global) { // Trig probability. draw_prob(params->prob, col_fg); + // Trig pannning. + draw_panning(params->pan, col_fg); + // Labels. { size_t x = PARAMS_START_X; @@ -1005,6 +1056,8 @@ draw_parameters_noise(ChannelNoiseParams* params, bool global) { txt_drawf_small("time", x + 6 + PARAMS_BOX_OFFSET_X * 2, y + PARAMS_BOX_H - 7, col_fg); txt_drawf_small("dir", x + 8 + PARAMS_BOX_OFFSET_X * 3, y + PARAMS_BOX_H - 7, col_fg); txt_drawf_small("prob", x + 6 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); + y += PARAMS_BOX_OFFSET_Y; + txt_drawf_small("pan", x + 8 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); } // Empty spacers. @@ -1013,7 +1066,6 @@ draw_parameters_noise(ChannelNoiseParams* params, bool global) { draw_param_stub(6, COL_OFF); draw_param_stub(7, COL_OFF); draw_param_stub(8, COL_OFF); - draw_param_stub(9, COL_OFF); } } @@ -1198,6 +1250,16 @@ draw_notif_param_edit_prob(u8 prob, u8 x, u8 y, u8 color) { } } +void +draw_notif_param_edit_pan(s8 pan, u8 x, u8 y, u8 color) { + txt_drawf_small("panning: ", x + 2, y + 1, color); + switch (pan) { + case -1: { txt_drawf_small("left", x + 2 + 9 * 4, y + 1, color); } break; + case 0: { txt_drawf_small("middle", x + 2 + 9 * 4, y + 1, color); } break; + case 1: { txt_drawf_small("right", x + 2 + 9 * 4, y + 1, color); } break; + } +} + void draw_notif_param_env_vol(u8 vol, u8 x, u8 y, u8 color) { txt_drawf_small("VOL: ", x + 2, y + 1, color); @@ -1324,6 +1386,7 @@ draw_notif_bar() { case 1: { txt_drawf_small("down", x0 + 2 + 17 * 4, y0 + 1, color); } break; } } break; + case 9: { draw_notif_param_edit_pan(params->pan, x0, y0, color); } break; } return; } @@ -1351,6 +1414,7 @@ draw_notif_bar() { case 2: { draw_notif_param_env_time(params->env_time, x0, y0, color); } break; case 3: { draw_notif_param_env_dir(params->env_direction, x0, y0, color); } break; case 4: { draw_notif_param_edit_prob(params->prob, x0, y0, color); } break; + case 9: { draw_notif_param_edit_pan(params->pan, x0, y0, color); } break; } return; } @@ -1425,6 +1489,7 @@ draw_notif_bar() { case 4: { txt_drawf_small("100", x0 + 2 + 8 * 4, y0 + 1, color); txt_drawc_small('%', x0 + 2 + 11 * 4, y0 + 1, color); } break; } } break; + case 9: { draw_notif_param_edit_pan(params->pan, x0, y0, color); } break; } return; } @@ -1449,6 +1514,7 @@ draw_notif_bar() { case 2: { draw_notif_param_env_time(params->env_time, x0, y0, color); } break; case 3: { draw_notif_param_env_dir(params->env_direction, x0, y0, color); } break; case 4: { draw_notif_param_edit_prob(params->prob, x0, y0, color); } break; + case 9: { draw_notif_param_edit_pan(params->pan, x0, y0, color); } break; } return; } -- cgit v1.2.1