aboutsummaryrefslogtreecommitdiffstats
path: root/src/drawing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drawing.c')
-rw-r--r--src/drawing.c59
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
12void 12void
13draw_channels(void) { 13draw_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
1115TriggerNote * get_current_trig(void);
1116
1117void
1118draw_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}