From ec5c1ad9f16772434f0f49811c87ec58a3569e83 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 23 Apr 2023 18:48:32 +0200 Subject: 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. --- src/sequencer.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) (limited to 'src/sequencer.c') 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 @@ void set_time(int bpm); -bool redraw_pattern_buttons = false; -bool redraw_play_pause = false; -bool redraw_trigs = false; -bool redraw_channels = false; -bool redraw_bank_buttons = false; -bool redraw_params = false; -bool redraw_bpm = false; -bool redraw_piano_note = false; +bool redraw_pattern_buttons = true; +bool redraw_play_pause = true; +bool redraw_trigs = true; +bool redraw_channels = true; +bool redraw_bank_buttons = true; +bool redraw_params = true; +bool redraw_bpm = true; +bool redraw_piano_note = true; void irq_timer(void) { @@ -198,39 +198,30 @@ handle_channel_selection(void) { patterns[pattern_selection_loc].ch4.active ^= 1; } break; } - draw_channels(); + redraw_channels = true; } if (key_tap(KEY_RIGHT)) { trig_selection_loc = 0; param_selection_loc = 0; input_handler = handle_trigger_selection; - draw_channel_cursor(channel_selection_loc, COL_GREY); - draw_trig_cursor(trig_selection_loc, COL_CURSOR); - TriggerNote *trig = get_current_trig(); - draw_note(trig->note, COL_NOTE_PRESSED); - draw_parameters(); + redraw_piano_note = true; + redraw_params = true; } else if (key_tap(KEY_LEFT)) { input_handler = handle_pattern_selection; - draw_channel_cursor(channel_selection_loc, COL_GREY); - draw_pattern_cursor(pattern_selection_loc, COL_CURSOR); } else if (key_tap(KEY_UP)) { - draw_channel_cursor(channel_selection_loc, COL_BG); if (channel_selection_loc == 0) { channel_selection_loc = SEQ_N_CHANNELS - 1; } else { channel_selection_loc = MAX(channel_selection_loc - 1, 0); } - draw_channel_cursor(channel_selection_loc, COL_CURSOR); - draw_triggers(); + redraw_trigs = true; } else if (key_tap(KEY_DOWN)) { - draw_channel_cursor(channel_selection_loc, COL_BG); if (channel_selection_loc == SEQ_N_CHANNELS - 1) { channel_selection_loc = 0; } else { channel_selection_loc = MIN(channel_selection_loc + 1, SEQ_N_CHANNELS); } - draw_channel_cursor(channel_selection_loc, COL_CURSOR); - draw_triggers(); + redraw_trigs = true; } } @@ -384,7 +375,6 @@ handle_pattern_selection(void) { } } else if (key_tap(KEY_DOWN)) { if (pattern_selection_loc < 7) { - draw_pattern_cursor(pattern_selection_loc, COL_BG); pattern_selection_loc = pattern_selection_loc + 1; redraw_channels = true; redraw_trigs = true; -- cgit v1.2.1