From fff06404696bb8790901cdefe016cd8d0fe856cb Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 25 Aug 2023 15:42:58 +0200 Subject: Add pattern chain buttons behaviour (toggle/clear/random) --- src/drawing.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 10 deletions(-) (limited to 'src/drawing.c') diff --git a/src/drawing.c b/src/drawing.c index 50f3de3..e94d0ff 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -594,9 +594,19 @@ draw_piano(void) { draw_rect(x0, y0, x1, y1, COL_FG); for (size_t i = 0; i < 12 * 6; i++) { u8 clr = COL_FG; + s8 pos = i % 12; + switch (pos) { + case 0: + case 2: + case 4: + case 5: + case 7: + case 9: + case 11: break; + default: { clr = COL_BG; } break; + } if (input_handler == handle_right_col_selection && right_col_selection_loc == R_COL_SCALE) { - s8 pos = i % 12; if (pos == current_scale_root) { clr = COL_ACC_1; } else { @@ -1277,13 +1287,38 @@ clear_cursors(void) { void draw_pattern_chain_cursor(void) { - size_t offset_x = (PAT_TRIG_H + 7) * (param_selection_loc % 8); - size_t offset_y = param_selection_loc < 8 ? 0 : 0 + PAT_TRIG_OFFSET_Y; - size_t x0 = PAT_TRIG_START_X + offset_x; - size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W; - size_t y = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H + 2; - draw_line(x0, y, x1, y, COL_ACC_0); - draw_line(x0, y + 1, x1, y + 1, COL_ACC_0); + switch (param_selection_loc) { + case CHAIN_BTN_ENABLE: { + size_t x0 = PAT_TRIG_START_X + 24; + size_t x1 = x0 + 30; + size_t y = PAT_TRIG_START_Y - 16 + 1 + 10; + draw_line(x0, y, x1, y, COL_ACC_0); + draw_line(x0, y + 1, x1, y + 1, COL_ACC_0); + } break; + case CHAIN_BTN_CLEAR: { + size_t x0 = PAT_TRIG_START_X + 24 + 42; + size_t x1 = x0 + 30; + size_t y = PAT_TRIG_START_Y - 16 + 1 + 10; + draw_line(x0, y, x1, y, COL_ACC_0); + draw_line(x0, y + 1, x1, y + 1, COL_ACC_0); + } break; + case CHAIN_BTN_RANDOM: { + size_t x0 = PAT_TRIG_START_X + 24 + 42 * 2; + size_t x1 = x0 + 30; + size_t y = PAT_TRIG_START_Y - 16 + 1 + 10; + draw_line(x0, y, x1, y, COL_ACC_0); + draw_line(x0, y + 1, x1, y + 1, COL_ACC_0); + } break; + default: { + size_t offset_x = (PAT_TRIG_H + 7) * (param_selection_loc % 8); + size_t offset_y = param_selection_loc < 8 ? 0 : 0 + PAT_TRIG_OFFSET_Y; + size_t x0 = PAT_TRIG_START_X + offset_x; + size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W; + size_t y = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H + 2; + draw_line(x0, y, x1, y, COL_ACC_0); + draw_line(x0, y + 1, x1, y + 1, COL_ACC_0); + } break; + } } void @@ -1756,7 +1791,7 @@ draw_notif_bar() { return; } - if (chain.len != 0) { + if (chain.len != 0 && chain.enabled) { u8 x = x0 + 2; u8 y = y0 + 1; txt_drawf_small("CHAIN: ", x, y, color); @@ -1789,6 +1824,7 @@ draw_notif_bar() { void draw_pattern_chain() { clear_parameters(); + // Pattern chain triggers. for (size_t i = 0; i < 16; i++) { u8 color = COL_FG; size_t offset_x = PAT_TRIG_OFFSET_X * (i % 8); @@ -1797,12 +1833,15 @@ draw_pattern_chain() { size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W; size_t y0 = PAT_TRIG_START_Y + offset_y; size_t y1 = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H; + if (!chain.enabled) { + color = COL_OFF; + } draw_rect(x0, y0, x1, y1, color); if (chain.active[i]) { txt_drawc('A' + chain.chain[i], x0 + 4, y0 + 3, color); } color = COL_OFF; - if (chain.current == i && chain.len != 0) { + if (chain.current == i && chain.len != 0 && chain.enabled) { color = COL_ACC_2; if (chain.active[i]) { txt_drawc('A' + chain.chain[i], x0 + 4, y0 + 3, color); @@ -1811,4 +1850,20 @@ draw_pattern_chain() { } draw_line(x0 + 5, y1 - 2, x1 - 5, y1 - 2, color); } + + // Pattern chain buttons. + size_t x0 = PAT_TRIG_START_X + 24; + size_t x1 = x0 + 30; + size_t y0 = PAT_TRIG_START_Y - 16 + 1; + size_t y1 = y0 + 8; + txt_drawf_small("toggle", x0 + 2, y0, COL_FG); + draw_rect(x0, y0, x1, y1, COL_FG); + x0 += 42; + x1 += 42; + txt_drawf_small("clear", x0 + 4, y0, COL_FG); + draw_rect(x0, y0, x1, y1, COL_FG); + x0 += 42; + x1 += 42; + txt_drawf_small("random", x0 + 2, y0, COL_FG); + draw_rect(x0, y0, x1, y1, COL_FG); } -- cgit v1.2.1