From 9c0c004b78a12861ed03ce851d0885d68a25cb02 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 22 Aug 2023 14:06:51 +0200 Subject: Add control for scale selection and rcol notifs --- src/drawing.c | 33 +++++++++++++++++++++++++++++-- src/globals.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 28 ++++----------------------- src/sequencer.c | 17 ++++++++++++++-- 4 files changed, 110 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/drawing.c b/src/drawing.c index 3922e09..3aa5de8 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -409,8 +409,7 @@ draw_scale() { draw_rect(x, y, x + R_COL_W - 2, y + SCALE_H - 3, COL_FG); txt_drawf_small("SCALE", x + 3, y - 10, COL_FG); - // TODO: Switch for different scales here - txt_drawf("CHRM", x + 2, y + 2, COL_FG); + txt_drawf(scale_short[current_scale], x + 2, y + 2, COL_FG); } void @@ -1657,6 +1656,36 @@ draw_notif_bar() { } return; } + if (input_handler == handle_right_col_selection) { + switch (right_col_selection_loc) { + case R_COL_BANK_A: { txt_drawf_small("BANK A", x0 + 2, y0 + 1, color); } break; + case R_COL_BANK_B: { txt_drawf_small("BANK B", x0 + 2, y0 + 1, color); } break; + case R_COL_BANK_C: { txt_drawf_small("BANK C", x0 + 2, y0 + 1, color); } break; + case R_COL_BANK_D: { txt_drawf_small("BANK D", x0 + 2, y0 + 1, color); } break; + case R_COL_BANK_E: { txt_drawf_small("BANK E", x0 + 2, y0 + 1, color); } break; + case R_COL_BANK_F: { txt_drawf_small("BANK F", x0 + 2, y0 + 1, color); } break; + case R_COL_STOP: { + txt_drawf_small("STOP", x0 + 2, y0 + 1, color); + } break; + case R_COL_PLAY: { + if (play_status == 0) { + txt_drawf_small("PLAY", x0 + 2, y0 + 1, color); + } else { + txt_drawf_small("PAUSE", x0 + 2, y0 + 1, color); + } + } break; + case R_COL_SETTINGS: { + txt_drawf_small("SETTINGS", x0 + 2, y0 + 1, color); + } break; + case R_COL_SCALE: { + txt_drawf_small("SCALE: %s", x0 + 2, y0 + 1, color, scale_long[current_scale]); + } break; + case R_COL_BPM: { + txt_drawf_small("TEMPO: %d bpm", x0 + 2, y0 + 1, color, patterns[pattern_selection_loc].bpm); + } break; + } + return; + } if (chain.len != 0) { u8 x = x0 + 2; diff --git a/src/globals.c b/src/globals.c index 23012c8..a971120 100644 --- a/src/globals.c +++ b/src/globals.c @@ -189,3 +189,63 @@ typedef enum Prob { PROB_20, PROB_NUM, } Prob; + +typedef enum Scales { + SCALE_CHRM, + SCALE_MAJR, + SCALE_MINR, + SCALE_PMAJ, + SCALE_PMIN, + SCALE_BLUE, + SCALE_DORI, + SCALE_PHYR, + SCALE_LYDI, + SCALE_MIXO, + SCALE_LOCR, + SCALE_PERS, + SCALE_HMIN, + SCALE_IWAT, + SCALE_INSN, + SCALE_HIRA, + SCALE_NUM, +} Scales; + +char *scale_short[] = { + "CHRM", + "MAJR", + "MINR", + "PMAJ", + "PMIN", + "BLUE", + "DORI", + "PHYR", + "LYDI", + "MIXO", + "LOCR", + "PERS", + "HMIN", + "IWAT", + "INSN", + "HIRA", +}; + +char *scale_long[] = { + "CHROMATIC", + "MAJOR", + "MINOR", + "PENTATONIC MAJOR", + "PENTATONIC MINOR", + "BLUES", + "DORIAN", + "PHYRGIAN", + "LYDIAN", + "MIXOLYDIAN", + "LOCRIAN", + "PERSIAN", + "HUNGARIAN MINOR", + "IWATO", + "IN-SEN", + "HIRAJOSHI", +}; + +int current_scale = SCALE_CHRM; diff --git a/src/main.c b/src/main.c index e294a0f..6bc3578 100644 --- a/src/main.c +++ b/src/main.c @@ -66,28 +66,6 @@ WITH REGARD TO THIS SOFTWARE. // later. // -// NOTE: (by catbeats) -// -// SCALES: -// -// CHRM - CHROMATIC -// MAJR - MAJOR (Ionian) -// MINR - MINOR (Aeolian) -// PMAJ - PENT MAJOR -// PMIN - PENT MINOR -// BLUE - BLUES -// DORI - DORIAN -// PHYR - PHYRGIAN -// LYDI - LYDIAN -// MIXO - MIXOLYDIAN -// LOCR - LOCRIAN -// PERS - PERSIAN -// HMIN - HUNGARIAN MINOR -// IWAT - IWATO -// INSN - IN-SEN -// HIRA - HIRAJOSHI -// - #include "gba/gba.h" #include "renderer_m0.c" @@ -124,11 +102,13 @@ render_sequencer(void) { if (redraw_play_pause) { PROF(draw_play(), draw_btn_cycles); PROF(draw_stop(), draw_btn_cycles); - // TODO: Move to separate if condition PROF(draw_settings(), draw_btn_cycles); - PROF(draw_scale(), draw_btn_cycles); redraw_play_pause = false; } + if (redraw_scale) { + PROF(draw_scale(), draw_btn_cycles); + redraw_scale = false; + } if (redraw_piano_note) { PROF(draw_piano_notes(), draw_piano_cycles); redraw_piano_note = false; diff --git a/src/sequencer.c b/src/sequencer.c index 04dd848..ce09658 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -16,6 +16,7 @@ bool redraw_bank_buttons = true; bool redraw_params = true; bool redraw_bpm = true; bool redraw_piano_note = true; +bool redraw_scale = true; bool update_bpm = false; u8 bar_counter = 0; @@ -677,7 +678,13 @@ handle_right_col_selection(void) { clear_pattern(pattern_selection_loc); } } break; - // TODO: Scale. + case R_COL_SCALE: { + current_scale--; + if (current_scale < 0) { + current_scale = SCALE_NUM - 1; + } + redraw_scale = true; + } break; } } else if (key_tap(KEY_R)) { switch (right_col_selection_loc) { @@ -699,7 +706,13 @@ handle_right_col_selection(void) { clear_pattern(pattern_selection_loc); } } break; - // TODO: Scale. + case R_COL_SCALE: { + current_scale++; + if (current_scale >= SCALE_NUM) { + current_scale = 0; + } + redraw_scale = true; + } break; } } else if (key_tap(KEY_B)) { switch (right_col_selection_loc) { -- cgit v1.2.1