diff options
Diffstat (limited to 'src/drawing.c')
-rw-r--r-- | src/drawing.c | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/src/drawing.c b/src/drawing.c index 149aa19..3264ad8 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -11,6 +11,10 @@ draw_channel_sprite(size_t x, size_t y, u8 clr, u8 idx) { | |||
11 | 11 | ||
12 | void | 12 | void |
13 | draw_channels(void) { | 13 | draw_channels(void) { |
14 | // NOTE: Different channel colors can be interesting. | ||
15 | u8 colors[] = { | ||
16 | 1, 1, 1, 1, | ||
17 | }; | ||
14 | for (size_t i = 0; i < 4; i++) { | 18 | for (size_t i = 0; i < 4; i++) { |
15 | bool active = false; | 19 | bool active = false; |
16 | switch (i) { | 20 | switch (i) { |
@@ -19,7 +23,7 @@ draw_channels(void) { | |||
19 | case 2: { active = patterns[pattern_selection_loc].ch3.active; } break; | 23 | case 2: { active = patterns[pattern_selection_loc].ch3.active; } break; |
20 | case 3: { active = patterns[pattern_selection_loc].ch4.active; } break; | 24 | case 3: { active = patterns[pattern_selection_loc].ch4.active; } break; |
21 | } | 25 | } |
22 | u8 clr = active ? COL_FG : COL_GREY; | 26 | u8 clr = active ? colors[i] : COL_GREY; |
23 | size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; | 27 | size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; |
24 | draw_channel_sprite(CHAN_START_X, y, clr, i); | 28 | draw_channel_sprite(CHAN_START_X, y, clr, i); |
25 | } | 29 | } |
@@ -1107,3 +1111,56 @@ draw_cursors(void) { | |||
1107 | draw_params_cursor(param_selection_loc, COL_CURSOR); | 1111 | draw_params_cursor(param_selection_loc, COL_CURSOR); |
1108 | } | 1112 | } |
1109 | } | 1113 | } |
1114 | |||
1115 | TriggerNote * get_current_trig(void); | ||
1116 | |||
1117 | void | ||
1118 | draw_piano_notes(void) { | ||
1119 | draw_piano(); | ||
1120 | if (input_handler == handle_channel_selection) { | ||
1121 | // Show note on current channel only. | ||
1122 | Pattern *pat = &patterns[current_pattern]; | ||
1123 | u8 step = (step_counter - 1) % 16; | ||
1124 | switch (channel_selection_loc) { | ||
1125 | case 0: { | ||
1126 | if (pat->ch1.active && pat->ch1.notes[step].active) { | ||
1127 | draw_note(pat->ch1.notes[step].note, COL_NOTE_PRESSED); | ||
1128 | } | ||
1129 | } break; | ||
1130 | case 1: { | ||
1131 | if (pat->ch2.active && pat->ch2.notes[step].active) { | ||
1132 | draw_note(pat->ch2.notes[step].note, COL_NOTE_PRESSED); | ||
1133 | } | ||
1134 | } break; | ||
1135 | case 2: { | ||
1136 | if (pat->ch3.active && pat->ch3.notes[step].active) { | ||
1137 | draw_note(pat->ch3.notes[step].note, COL_NOTE_PRESSED); | ||
1138 | } | ||
1139 | } break; | ||
1140 | } | ||
1141 | |||
1142 | } else if (input_handler == handle_trigger_selection || | ||
1143 | input_handler == handle_param_selection_sq1 || | ||
1144 | input_handler == handle_param_selection_sq2 || | ||
1145 | input_handler == handle_param_selection_wave || | ||
1146 | input_handler == handle_param_selection_noise) { | ||
1147 | // Show currently selected trigger note. | ||
1148 | TriggerNote *trig = get_current_trig(); | ||
1149 | draw_note(trig->note, COL_NOTE_PRESSED); | ||
1150 | } else { | ||
1151 | // Show last/current played notes in all channels. | ||
1152 | if (play_status == 1) { | ||
1153 | Pattern *pat = &patterns[current_pattern]; | ||
1154 | u8 step = (step_counter - 1) % 16; | ||
1155 | if (pat->ch3.active && pat->ch3.notes[step].active) { | ||
1156 | draw_note(pat->ch3.notes[step].note, COL_NOTE_PRESSED); | ||
1157 | } | ||
1158 | if (pat->ch2.active && pat->ch2.notes[step].active) { | ||
1159 | draw_note(pat->ch2.notes[step].note, COL_NOTE_PRESSED); | ||
1160 | } | ||
1161 | if (pat->ch1.active && pat->ch1.notes[step].active) { | ||
1162 | draw_note(pat->ch1.notes[step].note, COL_NOTE_PRESSED); | ||
1163 | } | ||
1164 | } | ||
1165 | } | ||
1166 | } | ||