aboutsummaryrefslogtreecommitdiffstats
path: root/src/drawing.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-25 15:42:58 +0200
committerBad Diode <bd@badd10de.dev>2023-08-25 15:42:58 +0200
commitfff06404696bb8790901cdefe016cd8d0fe856cb (patch)
treea42ac0a2afe3b15f9b90e9cc76d311c256e0ed98 /src/drawing.c
parent439f5564e4a92f91a43a7f36d734f6bd96effd63 (diff)
downloadstepper-fff06404696bb8790901cdefe016cd8d0fe856cb.tar.gz
stepper-fff06404696bb8790901cdefe016cd8d0fe856cb.zip
Add pattern chain buttons behaviour (toggle/clear/random)
Diffstat (limited to 'src/drawing.c')
-rw-r--r--src/drawing.c75
1 files changed, 65 insertions, 10 deletions
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) {
594 draw_rect(x0, y0, x1, y1, COL_FG); 594 draw_rect(x0, y0, x1, y1, COL_FG);
595 for (size_t i = 0; i < 12 * 6; i++) { 595 for (size_t i = 0; i < 12 * 6; i++) {
596 u8 clr = COL_FG; 596 u8 clr = COL_FG;
597 s8 pos = i % 12;
598 switch (pos) {
599 case 0:
600 case 2:
601 case 4:
602 case 5:
603 case 7:
604 case 9:
605 case 11: break;
606 default: { clr = COL_BG; } break;
607 }
597 if (input_handler == handle_right_col_selection && 608 if (input_handler == handle_right_col_selection &&
598 right_col_selection_loc == R_COL_SCALE) { 609 right_col_selection_loc == R_COL_SCALE) {
599 s8 pos = i % 12;
600 if (pos == current_scale_root) { 610 if (pos == current_scale_root) {
601 clr = COL_ACC_1; 611 clr = COL_ACC_1;
602 } else { 612 } else {
@@ -1277,13 +1287,38 @@ clear_cursors(void) {
1277 1287
1278void 1288void
1279draw_pattern_chain_cursor(void) { 1289draw_pattern_chain_cursor(void) {
1280 size_t offset_x = (PAT_TRIG_H + 7) * (param_selection_loc % 8); 1290 switch (param_selection_loc) {
1281 size_t offset_y = param_selection_loc < 8 ? 0 : 0 + PAT_TRIG_OFFSET_Y; 1291 case CHAIN_BTN_ENABLE: {
1282 size_t x0 = PAT_TRIG_START_X + offset_x; 1292 size_t x0 = PAT_TRIG_START_X + 24;
1283 size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W; 1293 size_t x1 = x0 + 30;
1284 size_t y = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H + 2; 1294 size_t y = PAT_TRIG_START_Y - 16 + 1 + 10;
1285 draw_line(x0, y, x1, y, COL_ACC_0); 1295 draw_line(x0, y, x1, y, COL_ACC_0);
1286 draw_line(x0, y + 1, x1, y + 1, COL_ACC_0); 1296 draw_line(x0, y + 1, x1, y + 1, COL_ACC_0);
1297 } break;
1298 case CHAIN_BTN_CLEAR: {
1299 size_t x0 = PAT_TRIG_START_X + 24 + 42;
1300 size_t x1 = x0 + 30;
1301 size_t y = PAT_TRIG_START_Y - 16 + 1 + 10;
1302 draw_line(x0, y, x1, y, COL_ACC_0);
1303 draw_line(x0, y + 1, x1, y + 1, COL_ACC_0);
1304 } break;
1305 case CHAIN_BTN_RANDOM: {
1306 size_t x0 = PAT_TRIG_START_X + 24 + 42 * 2;
1307 size_t x1 = x0 + 30;
1308 size_t y = PAT_TRIG_START_Y - 16 + 1 + 10;
1309 draw_line(x0, y, x1, y, COL_ACC_0);
1310 draw_line(x0, y + 1, x1, y + 1, COL_ACC_0);
1311 } break;
1312 default: {
1313 size_t offset_x = (PAT_TRIG_H + 7) * (param_selection_loc % 8);
1314 size_t offset_y = param_selection_loc < 8 ? 0 : 0 + PAT_TRIG_OFFSET_Y;
1315 size_t x0 = PAT_TRIG_START_X + offset_x;
1316 size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W;
1317 size_t y = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H + 2;
1318 draw_line(x0, y, x1, y, COL_ACC_0);
1319 draw_line(x0, y + 1, x1, y + 1, COL_ACC_0);
1320 } break;
1321 }
1287} 1322}
1288 1323
1289void 1324void
@@ -1756,7 +1791,7 @@ draw_notif_bar() {
1756 return; 1791 return;
1757 } 1792 }
1758 1793
1759 if (chain.len != 0) { 1794 if (chain.len != 0 && chain.enabled) {
1760 u8 x = x0 + 2; 1795 u8 x = x0 + 2;
1761 u8 y = y0 + 1; 1796 u8 y = y0 + 1;
1762 txt_drawf_small("CHAIN: ", x, y, color); 1797 txt_drawf_small("CHAIN: ", x, y, color);
@@ -1789,6 +1824,7 @@ draw_notif_bar() {
1789void 1824void
1790draw_pattern_chain() { 1825draw_pattern_chain() {
1791 clear_parameters(); 1826 clear_parameters();
1827 // Pattern chain triggers.
1792 for (size_t i = 0; i < 16; i++) { 1828 for (size_t i = 0; i < 16; i++) {
1793 u8 color = COL_FG; 1829 u8 color = COL_FG;
1794 size_t offset_x = PAT_TRIG_OFFSET_X * (i % 8); 1830 size_t offset_x = PAT_TRIG_OFFSET_X * (i % 8);
@@ -1797,12 +1833,15 @@ draw_pattern_chain() {
1797 size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W; 1833 size_t x1 = PAT_TRIG_START_X + offset_x + PAT_TRIG_W;
1798 size_t y0 = PAT_TRIG_START_Y + offset_y; 1834 size_t y0 = PAT_TRIG_START_Y + offset_y;
1799 size_t y1 = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H; 1835 size_t y1 = PAT_TRIG_START_Y + offset_y + PAT_TRIG_H;
1836 if (!chain.enabled) {
1837 color = COL_OFF;
1838 }
1800 draw_rect(x0, y0, x1, y1, color); 1839 draw_rect(x0, y0, x1, y1, color);
1801 if (chain.active[i]) { 1840 if (chain.active[i]) {
1802 txt_drawc('A' + chain.chain[i], x0 + 4, y0 + 3, color); 1841 txt_drawc('A' + chain.chain[i], x0 + 4, y0 + 3, color);
1803 } 1842 }
1804 color = COL_OFF; 1843 color = COL_OFF;
1805 if (chain.current == i && chain.len != 0) { 1844 if (chain.current == i && chain.len != 0 && chain.enabled) {
1806 color = COL_ACC_2; 1845 color = COL_ACC_2;
1807 if (chain.active[i]) { 1846 if (chain.active[i]) {
1808 txt_drawc('A' + chain.chain[i], x0 + 4, y0 + 3, color); 1847 txt_drawc('A' + chain.chain[i], x0 + 4, y0 + 3, color);
@@ -1811,4 +1850,20 @@ draw_pattern_chain() {
1811 } 1850 }
1812 draw_line(x0 + 5, y1 - 2, x1 - 5, y1 - 2, color); 1851 draw_line(x0 + 5, y1 - 2, x1 - 5, y1 - 2, color);
1813 } 1852 }
1853
1854 // Pattern chain buttons.
1855 size_t x0 = PAT_TRIG_START_X + 24;
1856 size_t x1 = x0 + 30;
1857 size_t y0 = PAT_TRIG_START_Y - 16 + 1;
1858 size_t y1 = y0 + 8;
1859 txt_drawf_small("toggle", x0 + 2, y0, COL_FG);
1860 draw_rect(x0, y0, x1, y1, COL_FG);
1861 x0 += 42;
1862 x1 += 42;
1863 txt_drawf_small("clear", x0 + 4, y0, COL_FG);
1864 draw_rect(x0, y0, x1, y1, COL_FG);
1865 x0 += 42;
1866 x1 += 42;
1867 txt_drawf_small("random", x0 + 2, y0, COL_FG);
1868 draw_rect(x0, y0, x1, y1, COL_FG);
1814} 1869}