From e5d61a87ec41443a2e32cd8be1ecc62b8c590251 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 22 Aug 2023 12:28:10 +0200 Subject: Add pattern clearing with SEL+L+R on pattern view --- src/drawing.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'src/drawing.c') diff --git a/src/drawing.c b/src/drawing.c index d24307b..253a961 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -3,7 +3,7 @@ // void -draw_param_stub(size_t idx, u8 color) { +draw_param_stub(size_t idx, u8 clr) { if (idx >= 10) { return; } @@ -15,12 +15,12 @@ draw_param_stub(size_t idx, u8 color) { } u8 y1 = y0 + PARAMS_BOX_H; for (size_t i = 0; i < PARAMS_BOX_W; i += 2) { - draw_pixel(x0 + i + 1, y0, color); - draw_pixel(x0 + i + 1, y1, color); + draw_pixel(x0 + i + 1, y0, clr); + draw_pixel(x0 + i + 1, y1, clr); } for (size_t i = 0; i < PARAMS_BOX_H; i += 2) { - draw_pixel(x0, y0 + i + 1, color); - draw_pixel(x1, y0 + i + 1, color); + draw_pixel(x0, y0 + i + 1, clr); + draw_pixel(x1, y0 + i + 1, clr); } } @@ -79,6 +79,9 @@ draw_channels(void) { case 2: { active = patterns[pattern_selection_loc].ch3.active; } break; case 3: { active = patterns[pattern_selection_loc].ch4.active; } break; } + if (patterns[pattern_selection_loc].empty) { + active = true; + } u8 clr = active ? colors[i] : COL_OFF; size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; draw_channel_sprite(CHAN_START_X, y, clr, i); @@ -273,14 +276,26 @@ draw_bank_buttons() { } } +void +draw_dotted_rect(size_t x0, size_t y0, size_t x1, size_t y1, u8 clr) { + size_t w = x1 - x0; + size_t h = y1 - y0; + for (size_t i = 0; i <= w; i += 2) { + draw_pixel(x0 + i, y0, clr); + draw_pixel(x0 + i, y1, clr); + } + for (size_t i = 0; i <= h; i += 2) { + draw_pixel(x0, y0 + i, clr); + draw_pixel(x1, y0 + i, clr); + } +} + void draw_pattern_buttons() { // Clear patterns. size_t x = PAT_START_X; size_t y = PAT_START_Y; - draw_filled_rect(x, y, x + PAT_W, y + PAT_H * 8, COL_BG); - txt_drawf_small("PAT", x, y - 10, COL_FG); char pat_names[] = { 'A', 'B', 'C', 'D', @@ -294,7 +309,12 @@ draw_pattern_buttons() { if (i == next_pattern && current_pattern != next_pattern) { color = COL_ACC_0; } - draw_rect(x, y, x + PAT_W, y + PAT_H, color); + draw_filled_rect(x, y, x + PAT_W, y + PAT_H, COL_BG); + if (patterns[i].empty) { + draw_dotted_rect(x, y, x + PAT_W, y + PAT_H, color); + } else { + draw_rect(x, y, x + PAT_W, y + PAT_H, color); + } txt_drawc(pat_names[i], x + 4, y + 1, color); y += PAT_OFFSET_Y; } @@ -404,7 +424,9 @@ draw_triggers(void) { size_t y1 = TRIG_START_Y + offset_y + TRIG_H; draw_rect(x0, y0, x1, y1, COL_FG); clear_trigger(i); - draw_trigger(channel_selection_loc, i); + if (!patterns[pattern_selection_loc].empty) { + draw_trigger(channel_selection_loc, i); + } } } -- cgit v1.2.1