aboutsummaryrefslogtreecommitdiffstats
path: root/src/sequencer.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-23 18:48:32 +0200
committerBad Diode <bd@badd10de.dev>2023-04-23 18:48:32 +0200
commitec5c1ad9f16772434f0f49811c87ec58a3569e83 (patch)
tree854894d7e4e9abb15eceb71332dd9678adc21506 /src/sequencer.c
parentef6af29d99f7df6acf088ee28dc026023258c10c (diff)
downloadstepper-ec5c1ad9f16772434f0f49811c87ec58a3569e83.tar.gz
stepper-ec5c1ad9f16772434f0f49811c87ec58a3569e83.zip
Add conditional redrawing
This covers most of the previous functionality, but separating the input handling and rendering functions. Only cursor drawing and a few corner cases missing.
Diffstat (limited to 'src/sequencer.c')
-rw-r--r--src/sequencer.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index b689bf5..a560bcb 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -9,14 +9,14 @@
9 9
10void set_time(int bpm); 10void set_time(int bpm);
11 11
12bool redraw_pattern_buttons = false; 12bool redraw_pattern_buttons = true;
13bool redraw_play_pause = false; 13bool redraw_play_pause = true;
14bool redraw_trigs = false; 14bool redraw_trigs = true;
15bool redraw_channels = false; 15bool redraw_channels = true;
16bool redraw_bank_buttons = false; 16bool redraw_bank_buttons = true;
17bool redraw_params = false; 17bool redraw_params = true;
18bool redraw_bpm = false; 18bool redraw_bpm = true;
19bool redraw_piano_note = false; 19bool redraw_piano_note = true;
20 20
21void 21void
22irq_timer(void) { 22irq_timer(void) {
@@ -198,39 +198,30 @@ handle_channel_selection(void) {
198 patterns[pattern_selection_loc].ch4.active ^= 1; 198 patterns[pattern_selection_loc].ch4.active ^= 1;
199 } break; 199 } break;
200 } 200 }
201 draw_channels(); 201 redraw_channels = true;
202 } 202 }
203 if (key_tap(KEY_RIGHT)) { 203 if (key_tap(KEY_RIGHT)) {
204 trig_selection_loc = 0; 204 trig_selection_loc = 0;
205 param_selection_loc = 0; 205 param_selection_loc = 0;
206 input_handler = handle_trigger_selection; 206 input_handler = handle_trigger_selection;
207 draw_channel_cursor(channel_selection_loc, COL_GREY); 207 redraw_piano_note = true;
208 draw_trig_cursor(trig_selection_loc, COL_CURSOR); 208 redraw_params = true;
209 TriggerNote *trig = get_current_trig();
210 draw_note(trig->note, COL_NOTE_PRESSED);
211 draw_parameters();
212 } else if (key_tap(KEY_LEFT)) { 209 } else if (key_tap(KEY_LEFT)) {
213 input_handler = handle_pattern_selection; 210 input_handler = handle_pattern_selection;
214 draw_channel_cursor(channel_selection_loc, COL_GREY);
215 draw_pattern_cursor(pattern_selection_loc, COL_CURSOR);
216 } else if (key_tap(KEY_UP)) { 211 } else if (key_tap(KEY_UP)) {
217 draw_channel_cursor(channel_selection_loc, COL_BG);
218 if (channel_selection_loc == 0) { 212 if (channel_selection_loc == 0) {
219 channel_selection_loc = SEQ_N_CHANNELS - 1; 213 channel_selection_loc = SEQ_N_CHANNELS - 1;
220 } else { 214 } else {
221 channel_selection_loc = MAX(channel_selection_loc - 1, 0); 215 channel_selection_loc = MAX(channel_selection_loc - 1, 0);
222 } 216 }
223 draw_channel_cursor(channel_selection_loc, COL_CURSOR); 217 redraw_trigs = true;
224 draw_triggers();
225 } else if (key_tap(KEY_DOWN)) { 218 } else if (key_tap(KEY_DOWN)) {
226 draw_channel_cursor(channel_selection_loc, COL_BG);
227 if (channel_selection_loc == SEQ_N_CHANNELS - 1) { 219 if (channel_selection_loc == SEQ_N_CHANNELS - 1) {
228 channel_selection_loc = 0; 220 channel_selection_loc = 0;
229 } else { 221 } else {
230 channel_selection_loc = MIN(channel_selection_loc + 1, SEQ_N_CHANNELS); 222 channel_selection_loc = MIN(channel_selection_loc + 1, SEQ_N_CHANNELS);
231 } 223 }
232 draw_channel_cursor(channel_selection_loc, COL_CURSOR); 224 redraw_trigs = true;
233 draw_triggers();
234 } 225 }
235} 226}
236 227
@@ -384,7 +375,6 @@ handle_pattern_selection(void) {
384 } 375 }
385 } else if (key_tap(KEY_DOWN)) { 376 } else if (key_tap(KEY_DOWN)) {
386 if (pattern_selection_loc < 7) { 377 if (pattern_selection_loc < 7) {
387 draw_pattern_cursor(pattern_selection_loc, COL_BG);
388 pattern_selection_loc = pattern_selection_loc + 1; 378 pattern_selection_loc = pattern_selection_loc + 1;
389 redraw_channels = true; 379 redraw_channels = true;
390 redraw_trigs = true; 380 redraw_trigs = true;