From fc04cf5c36e22fa7982eb02d0aef390f29a96830 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 20 Jun 2021 13:17:45 +0200 Subject: Add sq shape and env drawing --- src/sequencer.c | 373 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 226 insertions(+), 147 deletions(-) diff --git a/src/sequencer.c b/src/sequencer.c index 41d8ee7..2d9ca4f 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -781,166 +781,245 @@ draw_parameters_wave(void) { void draw_parameters_square(ChannelSquareParams *params, bool sweep) { // DEBUG: Bounding box. - { - size_t x0 = PARAMS_START_X; - size_t y0 = PARAMS_START_Y; - size_t x1 = PARAMS_START_X + PARAMS_W; - size_t y1 = PARAMS_START_Y + PARAMS_H - 5; - // draw_rect(x0, y0, x1, y1, COL_FG); - } + // { + // size_t x0 = PARAMS_START_X; + // size_t y0 = PARAMS_START_Y; + // size_t x1 = PARAMS_START_X + PARAMS_W; + // size_t y1 = PARAMS_START_Y + PARAMS_H - 5; + // draw_rect(x0, y0, x1, y1, COL_FG); + // } // Duty cycle. { - size_t x = PARAMS_START_X; - size_t y = PARAMS_START_Y + PARAMS_H - 25; - draw_line(x, y + 7, x + 2, y + 7, COL_FG); - draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); - draw_line(x, y + 8, x, y + 19, COL_FG); - draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); - draw_line(x, y + 20, x + 24, y + 20, COL_FG); - txt_drawf_small("duty", x + 3, y + 3, 4, COL_FG); - - switch (params->duty_cycle) { - case 0: { - txt_drawf("0", x + 9, y + 10, 6, COL_FG); - } break; - case 1: { - txt_drawf("25", x + 6, y + 10, 6, COL_FG); - } break; - case 2: { - txt_drawf("50", x + 6, y + 10, 6, COL_FG); - } break; - case 3: { - txt_drawf("75", x + 6, y + 10, 6, COL_FG); - } break; - case 4: { - txt_drawf("100", x + 3, y + 10, 6, COL_FG); - } break; + // Shape drawing. + { + size_t x = PARAMS_START_X; + size_t y = PARAMS_START_Y + PARAMS_H - 42; + + size_t x0 = x + 2; + size_t x1 = x0; + size_t x2 = x0; + size_t x3 = x0; + size_t x4 = x0; + size_t x5 = x0; + size_t y0 = y + 14; + size_t y1 = y + 2; + + switch (params->duty_cycle) { + case 0: { + x1 += 4; + x2 += 6; + x3 += 13; + x4 += 15; + x5 += 20; + } break; + case 1: { + x1 += 4; + x2 += 7; + x3 += 13; + x4 += 16; + x5 += 20; + } break; + case 2: { + x1 += 3; + x2 += 8; + x3 += 12; + x4 += 17; + x5 += 20; + } break; + case 3: { + x1 += 2; + x2 += 9; + x3 += 11; + x4 += 18; + x5 += 20; + } break; + } + draw_line(x0, y0, x1, y0, COL_RED); + draw_line(x1, y1, x1, y0, COL_RED); + draw_line(x1, y1, x2, y1, COL_RED); + draw_line(x2, y1, x2, y0, COL_RED); + draw_line(x2, y0, x3, y0, COL_RED); + draw_line(x3, y1, x3, y0, COL_RED); + draw_line(x3, y1, x4, y1, COL_RED); + draw_line(x4, y1, x4, y0, COL_RED); + draw_line(x4, y0, x5, y0, COL_RED); + + // DEBUG: Bounding box. + // draw_rect(x, y - 1, x + 24, y + 17, COL_RED); } - } - - // Env. volume. - { - size_t x = PARAMS_START_X + 31; - size_t y = PARAMS_START_Y + PARAMS_H - 25; - draw_line(x, y + 7, x + 4, y + 7, COL_FG); - draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); - draw_line(x, y + 8, x, y + 19, COL_FG); - draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); - draw_line(x, y + 20, x + 24, y + 20, COL_FG); - txt_drawf_small("vol", x + 5, y + 3, 4, COL_FG); - switch (params->env_volume) { - case 0: { - txt_drawf("0", x + 9, y + 10, 6, COL_FG); - } break; - case 1: { - txt_drawf("6", x + 9, y + 10, 6, COL_FG); - } break; - case 2: { - txt_drawf("13", x + 6, y + 10, 6, COL_FG); - } break; - case 3: { - txt_drawf("20", x + 6, y + 10, 6, COL_FG); - } break; - case 4: { - txt_drawf("26", x + 6, y + 10, 6, COL_FG); - } break; - case 5: { - txt_drawf("33", x + 6, y + 10, 6, COL_FG); - } break; - case 6: { - txt_drawf("40", x + 6, y + 10, 6, COL_FG); - } break; - case 7: { - txt_drawf("46", x + 6, y + 10, 6, COL_FG); - } break; - case 8: { - txt_drawf("53", x + 6, y + 10, 6, COL_FG); - } break; - case 9: { - txt_drawf("60", x + 6, y + 10, 6, COL_FG); - } break; - case 10: { - txt_drawf("66", x + 6, y + 10, 6, COL_FG); - } break; - case 11: { - txt_drawf("73", x + 6, y + 10, 6, COL_FG); - } break; - case 12: { - txt_drawf("80", x + 6, y + 10, 6, COL_FG); - } break; - case 13: { - txt_drawf("86", x + 6, y + 10, 6, COL_FG); - } break; - case 14: { - txt_drawf("93", x + 6, y + 10, 6, COL_FG); - } break; - case 15: { - txt_drawf("100", x + 3, y + 10, 6, COL_FG); - } break; + // Param box. + { + size_t x = PARAMS_START_X; + size_t y = PARAMS_START_Y + PARAMS_H - 25; + draw_line(x, y + 7, x + 2, y + 7, COL_FG); + draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); + draw_line(x, y + 8, x, y + 19, COL_FG); + draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); + draw_line(x, y + 20, x + 24, y + 20, COL_FG); + txt_drawf_small("duty", x + 3, y + 3, 4, COL_FG); + + switch (params->duty_cycle) { + case 0: { + txt_drawf("0", x + 9, y + 10, 6, COL_FG); + } break; + case 1: { + txt_drawf("25", x + 6, y + 10, 6, COL_FG); + } break; + case 2: { + txt_drawf("50", x + 6, y + 10, 6, COL_FG); + } break; + case 3: { + txt_drawf("75", x + 6, y + 10, 6, COL_FG); + } break; + } } } - // Env. direction + // Envelope. { - size_t x = PARAMS_START_X + 59; - size_t y = PARAMS_START_Y + PARAMS_H - 25; - draw_line(x, y + 7, x + 4, y + 7, COL_FG); - draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); - draw_line(x, y + 8, x, y + 19, COL_FG); - draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); - draw_line(x, y + 20, x + 24, y + 20, COL_FG); - txt_drawf_small("dir", x + 5, y + 3, 4, COL_FG); + // Env. drawing. + { + size_t x = PARAMS_START_X + 43; + size_t y = PARAMS_START_Y + PARAMS_H - 41; + size_t x0 = x; + size_t y0 = y + 16 - params->env_volume; + size_t x1 = x + 8 * params->env_time; + size_t y1 = params->env_direction == 0 ? y : y + 16; + size_t x2 = x + 8 * 7; + size_t y2 = y1; + // Axis. + draw_line(x, y - 2, x, y + 16, COL_CYAN); + draw_line(x, y + 16, x + 8 * 7 + 2, y + 16, COL_CYAN); + // Env. + draw_line(x0, y0, x1, y1, COL_CYAN); + draw_line(x1, y1, x2, y2, COL_CYAN); + } - char arr_up[2] = { 0x19, 0 }; - char arr_down[2] = { 0x18, 0 }; - switch (params->env_direction) { - case 0: { - txt_drawf(arr_down, x + 9, y + 11, 6, COL_FG); - } break; - case 1: { - txt_drawf(arr_up, x + 9, y + 11, 6, COL_FG); - } break; + // Env. volume. + { + size_t x = PARAMS_START_X + 31; + size_t y = PARAMS_START_Y + PARAMS_H - 25; + draw_line(x, y + 7, x + 4, y + 7, COL_FG); + draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); + draw_line(x, y + 8, x, y + 19, COL_FG); + draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); + draw_line(x, y + 20, x + 24, y + 20, COL_FG); + txt_drawf_small("vol", x + 5, y + 3, 4, COL_FG); + + switch (params->env_volume) { + case 0: { + txt_drawf("0", x + 9, y + 10, 6, COL_FG); + } break; + case 1: { + txt_drawf("6", x + 9, y + 10, 6, COL_FG); + } break; + case 2: { + txt_drawf("13", x + 6, y + 10, 6, COL_FG); + } break; + case 3: { + txt_drawf("20", x + 6, y + 10, 6, COL_FG); + } break; + case 4: { + txt_drawf("26", x + 6, y + 10, 6, COL_FG); + } break; + case 5: { + txt_drawf("33", x + 6, y + 10, 6, COL_FG); + } break; + case 6: { + txt_drawf("40", x + 6, y + 10, 6, COL_FG); + } break; + case 7: { + txt_drawf("46", x + 6, y + 10, 6, COL_FG); + } break; + case 8: { + txt_drawf("53", x + 6, y + 10, 6, COL_FG); + } break; + case 9: { + txt_drawf("60", x + 6, y + 10, 6, COL_FG); + } break; + case 10: { + txt_drawf("66", x + 6, y + 10, 6, COL_FG); + } break; + case 11: { + txt_drawf("73", x + 6, y + 10, 6, COL_FG); + } break; + case 12: { + txt_drawf("80", x + 6, y + 10, 6, COL_FG); + } break; + case 13: { + txt_drawf("86", x + 6, y + 10, 6, COL_FG); + } break; + case 14: { + txt_drawf("93", x + 6, y + 10, 6, COL_FG); + } break; + case 15: { + txt_drawf("100", x + 3, y + 10, 6, COL_FG); + } break; + } } - } - // Env. time. - { - size_t x = PARAMS_START_X + 87; - size_t y = PARAMS_START_Y + PARAMS_H - 25; - draw_line(x, y + 7, x + 2, y + 7, COL_FG); - draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); - draw_line(x, y + 8, x, y + 19, COL_FG); - draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); - draw_line(x, y + 20, x + 24, y + 20, COL_FG); - txt_drawf_small("time", x + 3, y + 3, 4, COL_FG); + // Env. direction + { + size_t x = PARAMS_START_X + 59; + size_t y = PARAMS_START_Y + PARAMS_H - 25; + draw_line(x, y + 7, x + 4, y + 7, COL_FG); + draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); + draw_line(x, y + 8, x, y + 19, COL_FG); + draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); + draw_line(x, y + 20, x + 24, y + 20, COL_FG); + txt_drawf_small("dir", x + 5, y + 3, 4, COL_FG); + + char arr_up[2] = { 0x19, 0 }; + char arr_down[2] = { 0x18, 0 }; + switch (params->env_direction) { + case 0: { + txt_drawf(arr_down, x + 9, y + 11, 6, COL_FG); + } break; + case 1: { + txt_drawf(arr_up, x + 9, y + 11, 6, COL_FG); + } break; + } + } - switch (params->env_time) { - case 0: { - txt_drawf("0", x + 9, y + 10, 6, COL_FG); - } break; - case 1: { - txt_drawf("14", x + 6, y + 10, 6, COL_FG); - } break; - case 2: { - txt_drawf("28", x + 6, y + 10, 6, COL_FG); - } break; - case 3: { - txt_drawf("42", x + 6, y + 10, 6, COL_FG); - } break; - case 4: { - txt_drawf("57", x + 6, y + 10, 6, COL_FG); - } break; - case 5: { - txt_drawf("71", x + 6, y + 10, 6, COL_FG); - } break; - case 6: { - txt_drawf("85", x + 6, y + 10, 6, COL_FG); - } break; - case 7: { - txt_drawf("100", x + 3, y + 10, 6, COL_FG); - } break; + // Env. time. + { + size_t x = PARAMS_START_X + 87; + size_t y = PARAMS_START_Y + PARAMS_H - 25; + draw_line(x, y + 7, x + 2, y + 7, COL_FG); + draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); + draw_line(x, y + 8, x, y + 19, COL_FG); + draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); + draw_line(x, y + 20, x + 24, y + 20, COL_FG); + txt_drawf_small("time", x + 3, y + 3, 4, COL_FG); + + switch (params->env_time) { + case 0: { + txt_drawf("0", x + 9, y + 10, 6, COL_FG); + } break; + case 1: { + txt_drawf("14", x + 6, y + 10, 6, COL_FG); + } break; + case 2: { + txt_drawf("28", x + 6, y + 10, 6, COL_FG); + } break; + case 3: { + txt_drawf("42", x + 6, y + 10, 6, COL_FG); + } break; + case 4: { + txt_drawf("57", x + 6, y + 10, 6, COL_FG); + } break; + case 5: { + txt_drawf("71", x + 6, y + 10, 6, COL_FG); + } break; + case 6: { + txt_drawf("85", x + 6, y + 10, 6, COL_FG); + } break; + case 7: { + txt_drawf("100", x + 3, y + 10, 6, COL_FG); + } break; + } } } -- cgit v1.2.1