diff options
author | Bad Diode <bd@badd10de.dev> | 2023-07-21 19:09:18 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-07-21 19:09:18 +0200 |
commit | f6b1834fd0cae56a125c7ea65b6e5bf15d553dd3 (patch) | |
tree | 8b676edb21fc0e93b8c50a4714cc380db66653a5 | |
parent | ed6f5a9dee2393a71343826eda27a97ad3d6bda4 (diff) | |
download | stepper-f6b1834fd0cae56a125c7ea65b6e5bf15d553dd3.tar.gz stepper-f6b1834fd0cae56a125c7ea65b6e5bf15d553dd3.zip |
Add new UI for wave channel parameters
-rw-r--r-- | src/drawing.c | 244 | ||||
-rw-r--r-- | src/globals.c | 2 | ||||
-rw-r--r-- | src/main.c | 12 |
3 files changed, 46 insertions, 212 deletions
diff --git a/src/drawing.c b/src/drawing.c index f8cacb0..78021c0 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -638,86 +638,65 @@ draw_parameters_wave(ChannelWaveParams *params, bool global) { | |||
638 | u8 *wave_b = params->wave_b; | 638 | u8 *wave_b = params->wave_b; |
639 | 639 | ||
640 | size_t x = PARAMS_START_X; | 640 | size_t x = PARAMS_START_X; |
641 | size_t y = PARAMS_START_Y + 8; | 641 | size_t y = PARAMS_START_Y; |
642 | 642 | ||
643 | // Wave Patterns. | 643 | // Wave Patterns. |
644 | draw_wave_pattern(wave_a, x, y + 1, COL_ACC_1); | 644 | draw_wave_pattern(wave_a, x, y, COL_ACC_1); |
645 | draw_wave_pattern(wave_b, x + 70, y + 1, COL_ACC_2); | 645 | draw_wave_pattern(wave_b, x + PARAMS_BOX_OFFSET_X * 2, y, COL_ACC_2); |
646 | |||
647 | // Wave text. | ||
648 | x -= 2; | ||
649 | txt_drawf_small("%02x%02x%02x%02x", x, y + 19, col_fg, | ||
650 | wave_a[0], wave_a[1], wave_a[2], wave_a[3]); | ||
651 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 19, col_fg, | ||
652 | wave_a[4], wave_a[5], wave_a[6], wave_a[7]); | ||
653 | txt_drawf_small("%02x%02x%02x%02x", x, y + 28, col_fg, | ||
654 | wave_a[8], wave_a[9], wave_a[10], wave_a[11]); | ||
655 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, col_fg, | ||
656 | wave_a[12], wave_a[13], wave_a[14], wave_a[15]); | ||
657 | |||
658 | x += 70; | ||
659 | txt_drawf_small("%02x%02x%02x%02x", x, y + 19, col_fg, | ||
660 | wave_b[0], wave_b[1], wave_b[2], wave_b[3]); | ||
661 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 19, col_fg, | ||
662 | wave_b[4], wave_b[5], wave_b[6], wave_b[7]); | ||
663 | txt_drawf_small("%02x%02x%02x%02x", x, y + 28, col_fg, | ||
664 | wave_b[8], wave_b[9], wave_b[10], wave_b[11]); | ||
665 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, col_fg, | ||
666 | wave_b[12], wave_b[13], wave_b[14], wave_b[15]); | ||
667 | } | 646 | } |
668 | 647 | ||
669 | // Draw default wave buttons. | 648 | // TODO: Trig probability |
670 | { | 649 | { |
671 | const u32 *tile = default_wave_buttons; | 650 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; |
672 | size_t x = PARAMS_START_X; | 651 | size_t y = PARAMS_START_Y + 5; |
673 | size_t y = PARAMS_START_Y + PARAMS_H - 13; | 652 | txt_drawf("100", x, y, col_fg); |
674 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { | 653 | txt_drawc('%', x + 18, y, col_fg); |
675 | draw_icn(x + 17 * k , y, &tile[i * 2 + 0], col_fg, 1, 0); | ||
676 | draw_icn(x + 17 * k + 8, y, &tile[i * 2 + 2], col_fg, 1, 0); | ||
677 | } | ||
678 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { | ||
679 | draw_icn(x + 70 + 17 * k , y, &tile[i * 2 + 0], col_fg, 1, 0); | ||
680 | draw_icn(x + 70 + 17 * k + 8, y, &tile[i * 2 + 2], col_fg, 1, 0); | ||
681 | } | ||
682 | } | 654 | } |
683 | 655 | ||
684 | // Mode selection. | 656 | // Mode selection. |
685 | { | 657 | { |
686 | size_t x = PARAMS_START_X + 140; | 658 | size_t x = PARAMS_START_X; |
687 | size_t y = PARAMS_START_Y + PARAMS_H - 23; | 659 | size_t y = PARAMS_START_Y + PARAMS_BOX_OFFSET_Y; |
688 | draw_line(x, y + 4, x + 5, y + 4, col_fg); | ||
689 | draw_line(x + 25, y + 4, x + 30, y + 4, col_fg); | ||
690 | draw_line(x, y + 5, x, y + 16, col_fg); | ||
691 | draw_line(x + 30, y + 5, x + 30, y + 17, col_fg); | ||
692 | draw_line(x, y + 17, x + 30, y + 17, col_fg); | ||
693 | txt_drawf_small("mode", x + 6, y, col_fg); | ||
694 | |||
695 | switch (params->wave_mode) { | 660 | switch (params->wave_mode) { |
696 | case 0: { txt_drawf("A", x + 12, y + 7, col_fg); } break; | 661 | case 0: { txt_drawf("A", x + 12, y + 5, col_fg); } break; |
697 | case 1: { txt_drawf("B", x + 12, y + 7, col_fg); } break; | 662 | case 1: { txt_drawf("B", x + 12, y + 5, col_fg); } break; |
698 | case 2: { txt_drawf("A+B", x + 6, y + 7, col_fg); } break; | 663 | case 2: { txt_drawf("A+B", x + 6, y + 5, col_fg); } break; |
699 | } | 664 | } |
700 | } | 665 | } |
701 | 666 | ||
702 | // Wave volume. | 667 | // Wave volume. |
703 | { | 668 | { |
704 | size_t x = PARAMS_START_X + 140; | 669 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X; |
705 | size_t y = PARAMS_START_Y + PARAMS_H - 46; | 670 | size_t y = PARAMS_START_Y + PARAMS_BOX_OFFSET_Y; |
706 | draw_line(x, y + 7, x + 7, y + 7, col_fg); | ||
707 | draw_line(x + 23, y + 7, x + 30, y + 7, col_fg); | ||
708 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
709 | draw_line(x + 30, y + 8, x + 30, y + 19, col_fg); | ||
710 | draw_line(x, y + 20, x + 30, y + 20, col_fg); | ||
711 | txt_drawf_small("vol", x + 8, y + 3, col_fg); | ||
712 | |||
713 | switch (params->wave_volume) { | 671 | switch (params->wave_volume) { |
714 | case 0: { txt_drawf("0", x + 12, y + 10, col_fg); } break; | 672 | case 0: { txt_drawf("0", x + 12, y + 5, col_fg); } break; |
715 | case 1: { txt_drawf("25", x + 9, y + 10, col_fg); } break; | 673 | case 1: { txt_drawf("25", x + 9, y + 5, col_fg); } break; |
716 | case 2: { txt_drawf("50", x + 9, y + 10, col_fg); } break; | 674 | case 2: { txt_drawf("50", x + 9, y + 5, col_fg); } break; |
717 | case 3: { txt_drawf("75", x + 9, y + 10, col_fg); } break; | 675 | case 3: { txt_drawf("75", x + 9, y + 5, col_fg); } break; |
718 | case 4: { txt_drawf("100", x + 6, y + 10, col_fg); } break; | 676 | case 4: { txt_drawf("100", x + 6, y + 5, col_fg); } break; |
719 | } | 677 | } |
720 | } | 678 | } |
679 | |||
680 | // Labels. | ||
681 | { | ||
682 | size_t x = PARAMS_START_X; | ||
683 | size_t y = PARAMS_START_Y; | ||
684 | txt_drawf_small("sin", x + 8 + PARAMS_BOX_OFFSET_X * 0, y + PARAMS_BOX_H - 7, col_fg); | ||
685 | txt_drawf_small("phase", x + 4 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); | ||
686 | txt_drawf_small("saw", x + 8 + PARAMS_BOX_OFFSET_X * 2, y + PARAMS_BOX_H - 7, col_fg); | ||
687 | txt_drawf_small("phase", x + 4 + PARAMS_BOX_OFFSET_X * 3, y + PARAMS_BOX_H - 7, col_fg); | ||
688 | txt_drawf_small("prob", x + 6 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); | ||
689 | y += PARAMS_BOX_OFFSET_Y; | ||
690 | txt_drawf_small("mode", x + 6 + PARAMS_BOX_OFFSET_X * 0, y + PARAMS_BOX_H - 7, col_fg); | ||
691 | txt_drawf_small("vol", x + 8 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); | ||
692 | } | ||
693 | |||
694 | // Empty spacers. | ||
695 | { | ||
696 | draw_param_stub(7, COL_OFF); | ||
697 | draw_param_stub(8, COL_OFF); | ||
698 | draw_param_stub(9, COL_OFF); | ||
699 | } | ||
721 | } | 700 | } |
722 | 701 | ||
723 | void | 702 | void |
@@ -963,147 +942,6 @@ draw_parameters_noise(ChannelNoiseParams* params, bool global) { | |||
963 | draw_param_stub(8, COL_OFF); | 942 | draw_param_stub(8, COL_OFF); |
964 | draw_param_stub(9, COL_OFF); | 943 | draw_param_stub(9, COL_OFF); |
965 | } | 944 | } |
966 | // size_t x_offset = 30; | ||
967 | // u8 col_fg = COL_FG; | ||
968 | // if (global && input_handler == handle_channel_selection) { | ||
969 | // col_fg = COL_OFF; | ||
970 | // } | ||
971 | |||
972 | // // Bit mode. | ||
973 | // { | ||
974 | // // Param box. | ||
975 | // { | ||
976 | // size_t x = PARAMS_START_X + x_offset; | ||
977 | // size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
978 | // draw_line(x, y + 7, x + 2, y + 7, col_fg); | ||
979 | // draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | ||
980 | // draw_line(x, y + 8, x, y + 19, col_fg); | ||
981 | // draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
982 | // draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
983 | // txt_drawf_small("mode", x + 3, y + 3, col_fg); | ||
984 | |||
985 | // switch (params->bit_mode) { | ||
986 | // case 0: { txt_drawf("A", x + 9, y + 10, col_fg); } break; | ||
987 | // case 1: { txt_drawf("B", x + 9, y + 10, col_fg); } break; | ||
988 | // } | ||
989 | // } | ||
990 | // } | ||
991 | |||
992 | // // Envelope. | ||
993 | // { | ||
994 | // // Env. drawing. | ||
995 | // { | ||
996 | // // Bounding box. | ||
997 | // { | ||
998 | // size_t x0 = PARAMS_START_X + 31 + x_offset; | ||
999 | // size_t y0 = PARAMS_START_Y + PARAMS_H - 46; | ||
1000 | // size_t x1 = x0 + 79; | ||
1001 | // size_t y1 = y0 + 21; | ||
1002 | // draw_rect(x0, y0, x1, y1, COL_ACC_2); | ||
1003 | // } | ||
1004 | |||
1005 | // size_t x = PARAMS_START_X + 42 + x_offset; | ||
1006 | // size_t y = PARAMS_START_Y + PARAMS_H - 43; | ||
1007 | // size_t x0 = x; | ||
1008 | // size_t y0 = y + 15 - params->env_volume; | ||
1009 | // size_t x1 = x + 8 * params->env_time; | ||
1010 | // size_t y1 = params->env_direction == 0 ? y + 15 : y; | ||
1011 | // size_t x2 = x + 8 * 7 + 1; | ||
1012 | // size_t y2 = y1; | ||
1013 | |||
1014 | // // Env. | ||
1015 | // if (params->env_time == 0) { | ||
1016 | // draw_line(x1, y0, x2, y0, COL_ACC_2); | ||
1017 | // } else { | ||
1018 | // draw_line(x0, y0, x1, y1, COL_ACC_2); | ||
1019 | // draw_line(x1, y1, x2, y2, COL_ACC_2); | ||
1020 | // } | ||
1021 | // } | ||
1022 | |||
1023 | // // Env. volume. | ||
1024 | // { | ||
1025 | // size_t x = PARAMS_START_X + 31 + x_offset; | ||
1026 | // size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
1027 | // draw_line(x, y + 7, x + 4, y + 7, col_fg); | ||
1028 | // draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | ||
1029 | // draw_line(x, y + 8, x, y + 19, col_fg); | ||
1030 | // draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
1031 | // draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
1032 | // txt_drawf_small("vol", x + 5, y + 3, col_fg); | ||
1033 | |||
1034 | // switch (params->env_volume) { | ||
1035 | // case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | ||
1036 | // case 1: { txt_drawf("6", x + 9, y + 10, col_fg); } break; | ||
1037 | // case 2: { txt_drawf("13", x + 6, y + 10, col_fg); } break; | ||
1038 | // case 3: { txt_drawf("20", x + 6, y + 10, col_fg); } break; | ||
1039 | // case 4: { txt_drawf("26", x + 6, y + 10, col_fg); } break; | ||
1040 | // case 5: { txt_drawf("33", x + 6, y + 10, col_fg); } break; | ||
1041 | // case 6: { txt_drawf("40", x + 6, y + 10, col_fg); } break; | ||
1042 | // case 7: { txt_drawf("46", x + 6, y + 10, col_fg); } break; | ||
1043 | // case 8: { txt_drawf("53", x + 6, y + 10, col_fg); } break; | ||
1044 | // case 9: { txt_drawf("60", x + 6, y + 10, col_fg); } break; | ||
1045 | // case 10: { txt_drawf("66", x + 6, y + 10, col_fg); } break; | ||
1046 | // case 11: { txt_drawf("73", x + 6, y + 10, col_fg); } break; | ||
1047 | // case 12: { txt_drawf("80", x + 6, y + 10, col_fg); } break; | ||
1048 | // case 13: { txt_drawf("86", x + 6, y + 10, col_fg); } break; | ||
1049 | // case 14: { txt_drawf("93", x + 6, y + 10, col_fg); } break; | ||
1050 | // case 15: { txt_drawf("100", x + 3, y + 10, col_fg); } break; | ||
1051 | // } | ||
1052 | // } | ||
1053 | |||
1054 | // // Env. direction | ||
1055 | // { | ||
1056 | // size_t x = PARAMS_START_X + 59 + x_offset; | ||
1057 | // size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
1058 | // draw_line(x, y + 7, x + 4, y + 7, col_fg); | ||
1059 | // draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | ||
1060 | // draw_line(x, y + 8, x, y + 19, col_fg); | ||
1061 | // draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
1062 | // draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
1063 | // txt_drawf_small("dir", x + 5, y + 3, col_fg); | ||
1064 | |||
1065 | // char arr_up[2] = { 0x19, 0 }; | ||
1066 | // char arr_down[2] = { 0x18, 0 }; | ||
1067 | // switch (params->env_direction) { | ||
1068 | // case 0: { | ||
1069 | // txt_drawf(arr_up, x + 9, y + 11, col_fg); | ||
1070 | // } break; | ||
1071 | // case 1: { | ||
1072 | // txt_drawf(arr_down, x + 9, y + 11, col_fg); | ||
1073 | // } break; | ||
1074 | // } | ||
1075 | // } | ||
1076 | |||
1077 | // // Env. time. | ||
1078 | // { | ||
1079 | // size_t x = PARAMS_START_X + 87 + x_offset; | ||
1080 | // size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
1081 | // draw_line(x, y + 7, x + 2, y + 7, col_fg); | ||
1082 | // draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | ||
1083 | // draw_line(x, y + 8, x, y + 19, col_fg); | ||
1084 | // draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
1085 | // draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
1086 | // txt_drawf_small("time", x + 3, y + 3, col_fg); | ||
1087 | |||
1088 | // switch (params->env_time) { | ||
1089 | // case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | ||
1090 | // case 1: { txt_drawf("14", x + 6, y + 10, col_fg); } break; | ||
1091 | // case 2: { txt_drawf("28", x + 6, y + 10, col_fg); } break; | ||
1092 | // case 3: { txt_drawf("42", x + 6, y + 10, col_fg); } break; | ||
1093 | // case 4: { txt_drawf("57", x + 6, y + 10, col_fg); } break; | ||
1094 | // case 5: { txt_drawf("71", x + 6, y + 10, col_fg); } break; | ||
1095 | // case 6: { txt_drawf("85", x + 6, y + 10, col_fg); } break; | ||
1096 | // case 7: { txt_drawf("100", x + 3, y + 10, col_fg); } break; | ||
1097 | // } | ||
1098 | // } | ||
1099 | // } | ||
1100 | |||
1101 | // // Labels. | ||
1102 | // { | ||
1103 | // size_t x = PARAMS_START_X + x_offset; | ||
1104 | // size_t y = PARAMS_START_Y + PARAMS_H - 43; | ||
1105 | // txt_drawf_small("envelope", x + 54, y - 12, col_fg); | ||
1106 | // } | ||
1107 | } | 945 | } |
1108 | 946 | ||
1109 | void | 947 | void |
diff --git a/src/globals.c b/src/globals.c index cd9fe72..758f3b5 100644 --- a/src/globals.c +++ b/src/globals.c | |||
@@ -5,7 +5,7 @@ | |||
5 | static int step_counter = 0; | 5 | static int step_counter = 0; |
6 | int trig_selection_loc = 0; | 6 | int trig_selection_loc = 0; |
7 | int param_selection_loc = 0; | 7 | int param_selection_loc = 0; |
8 | int channel_selection_loc = 3; | 8 | int channel_selection_loc = 0; |
9 | int pattern_selection_loc = 0; | 9 | int pattern_selection_loc = 0; |
10 | int right_col_selection_loc = 0; | 10 | int right_col_selection_loc = 0; |
11 | int play_status = 0; | 11 | int play_status = 0; |
@@ -13,22 +13,18 @@ WITH REGARD TO THIS SOFTWARE. | |||
13 | // | 13 | // |
14 | // UI tweaks. | 14 | // UI tweaks. |
15 | // - Add custom user themes | 15 | // - Add custom user themes |
16 | // + Notification support for feedback when doing some operations | ||
17 | // (copying/pasting) | ||
18 | // - Animations for cursor movement/current step highlight. (A fade out maybe?) | 16 | // - Animations for cursor movement/current step highlight. (A fade out maybe?) |
19 | // - Add panning support. | 17 | // - Add panning support. |
18 | // + Add new UI for the parameter pages | ||
19 | // - Change cursor drawing for new parameter pages | ||
20 | // - Change cursor behaviour for new parameter pages | ||
21 | // - Allow prob control (% based or 1:2, etc.) | ||
20 | // | 22 | // |
21 | // Quality of life improvements. | 23 | // Quality of life improvements. |
22 | // - When not on play mode, adjusting a note or a parameter triggers the sound. | 24 | // - When not on play mode, adjusting a note or a parameter triggers the sound. |
23 | // This could get annoying, so maybe it should be a configuration option to | 25 | // This could get annoying, so maybe it should be a configuration option to |
24 | // enable it? | 26 | // enable it? |
25 | // - Pattern chaining for more than 1 queue and/or song mode. | ||
26 | // - L: Remove from chain | ||
27 | // - R: Add to chain | ||
28 | // - Loop? | ||
29 | // - Undo/Redo. | 27 | // - Undo/Redo. |
30 | // - Select + up/down to queue the next pattern as we move to it? | ||
31 | // - Option to show help on the notification bar? | ||
32 | // | 28 | // |
33 | // Advanced | 29 | // Advanced |
34 | // - Add tap tempo for BPM. | 30 | // - Add tap tempo for BPM. |