diff options
author | Bad Diode <bd@badd10de.dev> | 2023-07-21 18:47:58 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-07-21 18:47:58 +0200 |
commit | ed6f5a9dee2393a71343826eda27a97ad3d6bda4 (patch) | |
tree | 5cd83615370bc7ff8a611ca701af47e3e36c610d | |
parent | abd10d9f6e048bb8cb21d2618f16e48ff5f781f2 (diff) | |
download | stepper-ed6f5a9dee2393a71343826eda27a97ad3d6bda4.tar.gz stepper-ed6f5a9dee2393a71343826eda27a97ad3d6bda4.zip |
Add new UI for noise channel
-rw-r--r-- | src/drawing.c | 311 | ||||
-rw-r--r-- | src/globals.c | 2 |
2 files changed, 190 insertions, 123 deletions
diff --git a/src/drawing.c b/src/drawing.c index f843cb1..f8cacb0 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -896,147 +896,214 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) { | |||
896 | 896 | ||
897 | void | 897 | void |
898 | draw_parameters_noise(ChannelNoiseParams* params, bool global) { | 898 | draw_parameters_noise(ChannelNoiseParams* params, bool global) { |
899 | size_t x_offset = 30; | ||
900 | u8 col_fg = COL_FG; | 899 | u8 col_fg = COL_FG; |
901 | if (global && input_handler == handle_channel_selection) { | 900 | if (global && input_handler == handle_channel_selection) { |
902 | col_fg = COL_OFF; | 901 | col_fg = COL_OFF; |
903 | } | 902 | } |
904 | 903 | ||
905 | // Bit mode. | 904 | // Mode. |
906 | { | 905 | { |
907 | // Param box. | 906 | size_t x = PARAMS_START_X; |
908 | { | 907 | size_t y = PARAMS_START_Y; |
909 | size_t x = PARAMS_START_X + x_offset; | 908 | switch (params->bit_mode) { |
910 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | 909 | case 0: { txt_drawf("A", x + 12, y + 5, col_fg); } break; |
911 | draw_line(x, y + 7, x + 2, y + 7, col_fg); | 910 | case 1: { txt_drawf("B", x + 12, y + 5, col_fg); } break; |
912 | draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | ||
913 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
914 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
915 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
916 | txt_drawf_small("mode", x + 3, y + 3, col_fg); | ||
917 | |||
918 | switch (params->bit_mode) { | ||
919 | case 0: { txt_drawf("A", x + 9, y + 10, col_fg); } break; | ||
920 | case 1: { txt_drawf("B", x + 9, y + 10, col_fg); } break; | ||
921 | } | ||
922 | } | 911 | } |
923 | } | 912 | } |
924 | 913 | ||
925 | // Envelope. | 914 | // Envelope. |
926 | { | 915 | { |
927 | // Env. drawing. | 916 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 1 + 1; |
928 | { | 917 | size_t y = PARAMS_START_Y + 1; |
929 | // Bounding box. | 918 | size_t x0 = x; |
930 | { | 919 | size_t y0 = y + 15 - params->env_volume; |
931 | size_t x0 = PARAMS_START_X + 31 + x_offset; | 920 | size_t x1 = x + (3 * PARAMS_BOX_OFFSET_X) * params->env_time / 8 + 7; |
932 | size_t y0 = PARAMS_START_Y + PARAMS_H - 46; | 921 | size_t y1 = params->env_direction == 0 ? y + 15 : y; |
933 | size_t x1 = x0 + 79; | 922 | size_t x2 = x + PARAMS_BOX_OFFSET_X * 3 - 5; |
934 | size_t y1 = y0 + 21; | 923 | size_t y2 = y1; |
935 | draw_rect(x0, y0, x1, y1, COL_ACC_2); | ||
936 | } | ||
937 | |||
938 | size_t x = PARAMS_START_X + 42 + x_offset; | ||
939 | size_t y = PARAMS_START_Y + PARAMS_H - 43; | ||
940 | size_t x0 = x; | ||
941 | size_t y0 = y + 15 - params->env_volume; | ||
942 | size_t x1 = x + 8 * params->env_time; | ||
943 | size_t y1 = params->env_direction == 0 ? y + 15 : y; | ||
944 | size_t x2 = x + 8 * 7 + 1; | ||
945 | size_t y2 = y1; | ||
946 | |||
947 | // Env. | ||
948 | if (params->env_time == 0) { | ||
949 | draw_line(x1, y0, x2, y0, COL_ACC_2); | ||
950 | } else { | ||
951 | draw_line(x0, y0, x1, y1, COL_ACC_2); | ||
952 | draw_line(x1, y1, x2, y2, COL_ACC_2); | ||
953 | } | ||
954 | } | ||
955 | |||
956 | // Env. volume. | ||
957 | { | ||
958 | size_t x = PARAMS_START_X + 31 + x_offset; | ||
959 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
960 | draw_line(x, y + 7, x + 4, y + 7, col_fg); | ||
961 | draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | ||
962 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
963 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
964 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
965 | txt_drawf_small("vol", x + 5, y + 3, col_fg); | ||
966 | |||
967 | switch (params->env_volume) { | ||
968 | case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | ||
969 | case 1: { txt_drawf("6", x + 9, y + 10, col_fg); } break; | ||
970 | case 2: { txt_drawf("13", x + 6, y + 10, col_fg); } break; | ||
971 | case 3: { txt_drawf("20", x + 6, y + 10, col_fg); } break; | ||
972 | case 4: { txt_drawf("26", x + 6, y + 10, col_fg); } break; | ||
973 | case 5: { txt_drawf("33", x + 6, y + 10, col_fg); } break; | ||
974 | case 6: { txt_drawf("40", x + 6, y + 10, col_fg); } break; | ||
975 | case 7: { txt_drawf("46", x + 6, y + 10, col_fg); } break; | ||
976 | case 8: { txt_drawf("53", x + 6, y + 10, col_fg); } break; | ||
977 | case 9: { txt_drawf("60", x + 6, y + 10, col_fg); } break; | ||
978 | case 10: { txt_drawf("66", x + 6, y + 10, col_fg); } break; | ||
979 | case 11: { txt_drawf("73", x + 6, y + 10, col_fg); } break; | ||
980 | case 12: { txt_drawf("80", x + 6, y + 10, col_fg); } break; | ||
981 | case 13: { txt_drawf("86", x + 6, y + 10, col_fg); } break; | ||
982 | case 14: { txt_drawf("93", x + 6, y + 10, col_fg); } break; | ||
983 | case 15: { txt_drawf("100", x + 3, y + 10, col_fg); } break; | ||
984 | } | ||
985 | } | ||
986 | 924 | ||
987 | // Env. direction | 925 | // Env. |
988 | { | 926 | if (params->env_time == 0) { |
989 | size_t x = PARAMS_START_X + 59 + x_offset; | 927 | // TODO: Time 0 vol 0 (dir) doesn't make sense (mute) |
990 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | 928 | // TODO: Time 0 vol 100 doesn't make sense (constant max volume) |
991 | draw_line(x, y + 7, x + 4, y + 7, col_fg); | 929 | // NOTE: Maybe it's just a matter of handling it better on the |
992 | draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | 930 | // control? Have to check every time we change direction to swap |
993 | draw_line(x, y + 8, x, y + 19, col_fg); | 931 | // the conditions. |
994 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | 932 | draw_line(x0, y0, x2, y0, COL_ACC_2); |
995 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | 933 | } else { |
996 | txt_drawf_small("dir", x + 5, y + 3, col_fg); | 934 | draw_line(x0, y0, x1, y1, COL_ACC_2); |
997 | 935 | draw_line(x1, y1, x2, y2, COL_ACC_2); | |
998 | char arr_up[2] = { 0x19, 0 }; | ||
999 | char arr_down[2] = { 0x18, 0 }; | ||
1000 | switch (params->env_direction) { | ||
1001 | case 0: { | ||
1002 | txt_drawf(arr_up, x + 9, y + 11, col_fg); | ||
1003 | } break; | ||
1004 | case 1: { | ||
1005 | txt_drawf(arr_down, x + 9, y + 11, col_fg); | ||
1006 | } break; | ||
1007 | } | ||
1008 | } | 936 | } |
937 | } | ||
1009 | 938 | ||
1010 | // Env. time. | 939 | // TODO: Trig probability |
1011 | { | 940 | { |
1012 | size_t x = PARAMS_START_X + 87 + x_offset; | 941 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; |
1013 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | 942 | size_t y = PARAMS_START_Y + 5; |
1014 | draw_line(x, y + 7, x + 2, y + 7, col_fg); | 943 | txt_drawf("100", x, y, col_fg); |
1015 | draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | 944 | txt_drawc('%', x + 18, y, col_fg); |
1016 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
1017 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
1018 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
1019 | txt_drawf_small("time", x + 3, y + 3, col_fg); | ||
1020 | |||
1021 | switch (params->env_time) { | ||
1022 | case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | ||
1023 | case 1: { txt_drawf("14", x + 6, y + 10, col_fg); } break; | ||
1024 | case 2: { txt_drawf("28", x + 6, y + 10, col_fg); } break; | ||
1025 | case 3: { txt_drawf("42", x + 6, y + 10, col_fg); } break; | ||
1026 | case 4: { txt_drawf("57", x + 6, y + 10, col_fg); } break; | ||
1027 | case 5: { txt_drawf("71", x + 6, y + 10, col_fg); } break; | ||
1028 | case 6: { txt_drawf("85", x + 6, y + 10, col_fg); } break; | ||
1029 | case 7: { txt_drawf("100", x + 3, y + 10, col_fg); } break; | ||
1030 | } | ||
1031 | } | ||
1032 | } | 945 | } |
1033 | 946 | ||
1034 | // Labels. | 947 | // Labels. |
1035 | { | 948 | { |
1036 | size_t x = PARAMS_START_X + x_offset; | 949 | size_t x = PARAMS_START_X; |
1037 | size_t y = PARAMS_START_Y + PARAMS_H - 43; | 950 | size_t y = PARAMS_START_Y; |
1038 | txt_drawf_small("envelope", x + 54, y - 12, col_fg); | 951 | txt_drawf_small("mode", x + 6 + PARAMS_BOX_OFFSET_X * 0, y + PARAMS_BOX_H - 7, col_fg); |
952 | txt_drawf_small("vol", x + 8 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); | ||
953 | txt_drawf_small("time", x + 6 + PARAMS_BOX_OFFSET_X * 2, y + PARAMS_BOX_H - 7, col_fg); | ||
954 | txt_drawf_small("dir", x + 8 + PARAMS_BOX_OFFSET_X * 3, y + PARAMS_BOX_H - 7, col_fg); | ||
955 | txt_drawf_small("prob", x + 6 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); | ||
956 | } | ||
957 | |||
958 | // Empty spacers. | ||
959 | { | ||
960 | draw_param_stub(5, COL_OFF); | ||
961 | draw_param_stub(6, COL_OFF); | ||
962 | draw_param_stub(7, COL_OFF); | ||
963 | draw_param_stub(8, COL_OFF); | ||
964 | draw_param_stub(9, COL_OFF); | ||
1039 | } | 965 | } |
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 | // } | ||
1040 | } | 1107 | } |
1041 | 1108 | ||
1042 | void | 1109 | void |
diff --git a/src/globals.c b/src/globals.c index 758f3b5..cd9fe72 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 = 0; | 8 | int channel_selection_loc = 3; |
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; |