From ef6af29d99f7df6acf088ee28dc026023258c10c Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 23 Apr 2023 17:42:55 +0200 Subject: Remove drawing functions from input handlers --- src/sequencer.c | 155 +++++++++++++++++--------------------------------------- 1 file changed, 47 insertions(+), 108 deletions(-) (limited to 'src') diff --git a/src/sequencer.c b/src/sequencer.c index fd47d0b..b689bf5 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -9,11 +9,20 @@ 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; + void irq_timer(void) { if (current_pattern != next_pattern && step_counter == 0) { current_pattern = next_pattern; - draw_pattern_buttons(); + redraw_pattern_buttons = true; } Pattern *pat = &patterns[current_pattern]; set_time(pat->bpm); @@ -135,9 +144,7 @@ irq_timer(void) { SOUND_NOISE_CTRL = 0; SOUND_NOISE_FREQ = 0; } - draw_current_step(COL_BG); step_counter = (step_counter + 1) % 16; - draw_current_step(COL_RED); } void @@ -230,25 +237,18 @@ handle_channel_selection(void) { void stop_playing(void) { play_status = 0; - if (step_counter != 0) { - draw_current_step(COL_BG); - } step_counter = 0; TIMER_CTRL_0 = 0; SOUND_SQUARE1_CTRL = 0; SOUND_SQUARE2_CTRL = 0; SOUND_WAVE_CTRL = 0; SOUND_NOISE_CTRL = 0; - draw_current_step(COL_RED); - draw_play(); + redraw_play_pause = true; } void toggle_playing(void) { play_status ^= 1; - if (step_counter != 0) { - draw_current_step(COL_BG); - } step_counter = 0; if ((TIMER_CTRL_0 & TIMER_CTRL_ENABLE) == 0) { set_time(patterns[current_pattern].bpm); @@ -259,8 +259,7 @@ toggle_playing(void) { SOUND_WAVE_CTRL = 0; SOUND_NOISE_CTRL = 0; } - draw_current_step(COL_RED); - draw_play(); + redraw_play_pause = true; } void @@ -275,7 +274,7 @@ pause_playing(void) { SOUND_WAVE_CTRL = 0; SOUND_NOISE_CTRL = 0; } - draw_play(); + redraw_play_pause = true; } void @@ -290,10 +289,10 @@ select_bank(int i) { load_bank(i); } current_bank = i; - draw_pattern_buttons(); - draw_triggers(); - draw_channels(); - draw_bank_buttons(); + redraw_pattern_buttons = true; + redraw_trigs = true; + redraw_channels = true; + redraw_bank_buttons = true; } void @@ -309,22 +308,14 @@ handle_right_col_selection(void) { trig_selection_loc = 7; } break; } - draw_right_col_cursor(COL_BG); - draw_trig_cursor(trig_selection_loc, COL_CURSOR); - TriggerNote *trig = get_current_trig(); - draw_note(trig->note, COL_NOTE_PRESSED); - draw_parameters(); + redraw_params = true; } else if (key_tap(KEY_UP)) { if (right_col_selection_loc < R_COL_BANK_A) { - draw_right_col_cursor(COL_BG); right_col_selection_loc++; - draw_right_col_cursor(COL_CURSOR); } } else if (key_tap(KEY_DOWN)) { if (right_col_selection_loc > R_COL_BPM) { - draw_right_col_cursor(COL_BG); right_col_selection_loc--; - draw_right_col_cursor(COL_CURSOR); } } else if (key_tap(KEY_L)) { switch (right_col_selection_loc) { @@ -335,7 +326,7 @@ handle_right_col_selection(void) { && current_pattern == pattern_selection_loc) { set_time(patterns[current_pattern].bpm); } - draw_bpm(); + redraw_bpm = true; } } break; } @@ -348,7 +339,7 @@ handle_right_col_selection(void) { && current_pattern == pattern_selection_loc) { set_time(patterns[current_pattern].bpm); } - draw_bpm(); + redraw_bpm = true; } } break; } @@ -380,29 +371,24 @@ void handle_pattern_selection(void) { if (key_tap(KEY_B)) { next_pattern = pattern_selection_loc; - draw_pattern_buttons(); + redraw_pattern_buttons = true; } if (key_tap(KEY_RIGHT)) { input_handler = handle_channel_selection; - draw_channel_cursor(channel_selection_loc, COL_CURSOR); - draw_pattern_cursor(pattern_selection_loc, COL_GREY); } else if (key_tap(KEY_UP)) { if (pattern_selection_loc > 0) { - draw_pattern_cursor(pattern_selection_loc, COL_BG); pattern_selection_loc = pattern_selection_loc - 1; - draw_pattern_cursor(pattern_selection_loc, COL_CURSOR); - draw_channels(); - draw_triggers(); - draw_bpm(); + redraw_channels = true; + redraw_trigs = true; + redraw_bpm = true; } } 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; - draw_pattern_cursor(pattern_selection_loc, COL_CURSOR); - draw_channels(); - draw_triggers(); - draw_bpm(); + redraw_channels = true; + redraw_trigs = true; + redraw_bpm = true; } } } @@ -411,9 +397,7 @@ void handle_param_selection_sq1(void) { // Go back to trigger selection. if (key_released(KEY_A)) { - draw_params_cursor(param_selection_loc, COL_BG); input_handler = handle_trigger_selection; - draw_trig_cursor(trig_selection_loc, COL_CURSOR); return; } @@ -434,9 +418,7 @@ handle_param_selection_sq1(void) { inc = -2; } } - draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 6); - draw_params_cursor(param_selection_loc, COL_CURSOR); } if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { int inc = 0; @@ -458,9 +440,7 @@ handle_param_selection_sq1(void) { inc = -1; } } - draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 6); - draw_params_cursor(param_selection_loc, COL_CURSOR); } // Adjust parameter. @@ -496,8 +476,7 @@ handle_param_selection_sq1(void) { params->sweep_direction ^= 1; } break; } - draw_parameters(); - draw_params_cursor(param_selection_loc, COL_CURSOR); + redraw_params = true; } } @@ -505,9 +484,7 @@ void handle_param_selection_sq2(void) { // Go back to trigger selection. if (key_released(KEY_A)) { - draw_params_cursor(param_selection_loc, COL_BG); input_handler = handle_trigger_selection; - draw_trig_cursor(trig_selection_loc, COL_CURSOR); return; } @@ -520,9 +497,7 @@ handle_param_selection_sq2(void) { } else { inc = -1; } - draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 3); - draw_params_cursor(param_selection_loc, COL_CURSOR); } // Adjust parameter. @@ -549,8 +524,7 @@ handle_param_selection_sq2(void) { params->env_time = CLAMP(params->env_time + inc, 0, 7); } break; } - draw_parameters(); - draw_params_cursor(param_selection_loc, COL_CURSOR); + redraw_params = true; } } @@ -560,9 +534,7 @@ handle_param_selection_wave(void) { // Go back to trigger selection. if (key_released(KEY_A)) { - draw_params_cursor(param_selection_loc, COL_BG); input_handler = handle_trigger_selection; - draw_trig_cursor(trig_selection_loc, COL_CURSOR); return; } @@ -589,9 +561,7 @@ handle_param_selection_wave(void) { inc = -1; } } - draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 73); - draw_params_cursor(param_selection_loc, COL_CURSOR); } if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { int inc = 0; @@ -645,9 +615,7 @@ handle_param_selection_wave(void) { inc = -1; } } - draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 73); - draw_params_cursor(param_selection_loc, COL_CURSOR); } // Adjust parameter. @@ -727,8 +695,7 @@ handle_param_selection_wave(void) { u8 *wave_volume = &pat->ch3.params[trig_selection_loc].wave_volume; *wave_volume = CLAMP(*wave_volume + inc, 0, 4); } - draw_parameters(); - draw_params_cursor(param_selection_loc, COL_CURSOR); + redraw_params = true; } } @@ -736,9 +703,7 @@ void handle_param_selection_noise(void) { // Go back to trigger selection. if (key_released(KEY_A)) { - draw_params_cursor(param_selection_loc, COL_BG); input_handler = handle_trigger_selection; - draw_trig_cursor(trig_selection_loc, COL_CURSOR); return; } @@ -751,9 +716,7 @@ handle_param_selection_noise(void) { } else { inc = -1; } - draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 3); - draw_params_cursor(param_selection_loc, COL_CURSOR); } // Adjust parameter. @@ -780,8 +743,7 @@ handle_param_selection_noise(void) { params->env_time = CLAMP(params->env_time + inc, 0, 7); } break; } - draw_parameters(); - draw_params_cursor(param_selection_loc, COL_CURSOR); + redraw_params = true; } } @@ -792,24 +754,20 @@ handle_trigger_selection(void) { if (key_tap(KEY_B)) { // Toggle trigger. trig->active ^= 1; - draw_trigger(channel_selection_loc, trig_selection_loc); + redraw_trigs = true; } else if (key_tap(KEY_L)) { // Decrease note. if (trig->active) { - draw_note(trig->note, COL_FG); trig->note = MAX(trig->note - 1, NOTE_C_2); - draw_note(trig->note, COL_NOTE_PRESSED); - clear_trigger(trig_selection_loc); - draw_trigger(channel_selection_loc, trig_selection_loc); + redraw_trigs = true; + redraw_piano_note = true; } } else if (key_tap(KEY_R)) { // Increase note. if (trig->active) { - draw_note(trig->note, COL_FG); trig->note = MIN( trig->note + 1, NOTE_C_8 - 1); - draw_note(trig->note, COL_NOTE_PRESSED); - clear_trigger(trig_selection_loc); - draw_trigger(channel_selection_loc, trig_selection_loc); + redraw_trigs = true; + redraw_piano_note = true; } } @@ -817,50 +775,31 @@ handle_trigger_selection(void) { if (key_tap(KEY_LEFT)) { if (trig_selection_loc == 0 || trig_selection_loc == 8) { // We are at the boundary, switch to channel selection. - draw_trig_cursor(trig_selection_loc, COL_BG); - draw_note(trig->note, COL_FG); input_handler = handle_channel_selection; - draw_channel_cursor(channel_selection_loc, COL_CURSOR); - clear_parameters(); + redraw_params = true; } else { - draw_trig_cursor(trig_selection_loc, COL_BG); - draw_note(trig->note, COL_FG); trig_selection_loc = MAX(trig_selection_loc - 1, 0); - trig = get_current_trig(); - draw_trig_cursor(trig_selection_loc, COL_CURSOR); - draw_note(trig->note, COL_NOTE_PRESSED); - draw_parameters(); + redraw_piano_note = true; + redraw_params = true; } } else if (key_tap(KEY_RIGHT)) { if (trig_selection_loc != 7 && trig_selection_loc != 15) { - draw_trig_cursor(trig_selection_loc, COL_BG); - draw_note(trig->note, COL_FG); trig_selection_loc = MIN(trig_selection_loc + 1, 15); - trig = get_current_trig(); - draw_trig_cursor(trig_selection_loc, COL_CURSOR); - draw_note(trig->note, COL_NOTE_PRESSED); - draw_parameters(); + redraw_piano_note = true; + redraw_params = true; } else if (trig_selection_loc == 7) { input_handler = handle_right_col_selection; right_col_selection_loc = R_COL_STOP; - draw_trig_cursor(trig_selection_loc, COL_BG); - draw_note(trig->note, COL_FG); - draw_right_col_cursor(COL_CURSOR); + redraw_params = true; } else if (trig_selection_loc == 15) { right_col_selection_loc = R_COL_BPM; input_handler = handle_right_col_selection; - draw_trig_cursor(trig_selection_loc, COL_BG); - draw_note(trig->note, COL_FG); - draw_right_col_cursor(COL_CURSOR); + redraw_params = true; } } else if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { - draw_trig_cursor(trig_selection_loc, COL_BG); - draw_note(trig->note, COL_FG); trig_selection_loc = (trig_selection_loc + 8) % 16; - trig = get_current_trig(); - draw_trig_cursor(trig_selection_loc, COL_CURSOR); - draw_note(trig->note, COL_NOTE_PRESSED); - draw_parameters(); + redraw_piano_note = true; + redraw_params = true; } else if (key_tap(KEY_A)) { // Switch to parameter selection. switch (channel_selection_loc) { @@ -877,8 +816,8 @@ handle_trigger_selection(void) { input_handler = handle_param_selection_noise; } break; } - draw_params_cursor(param_selection_loc, COL_CURSOR); - draw_trig_cursor(trig_selection_loc, COL_GREY); + redraw_piano_note = true; + redraw_params = true; } } -- cgit v1.2.1