aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-07-12 16:02:28 +0200
committerBad Diode <bd@badd10de.dev>2023-07-12 16:02:28 +0200
commitd2be261b88753c3e0fdeb7588057aa3f1648ead5 (patch)
tree3463064f6101c76432a30788eeff25e03e73b2a6
parent8d04ec381b8e28fe9d84ddf2e9f295723a95c407 (diff)
downloadstepper-d2be261b88753c3e0fdeb7588057aa3f1648ead5.tar.gz
stepper-d2be261b88753c3e0fdeb7588057aa3f1648ead5.zip
Add notification bar and mockup of pattern chaining
-rw-r--r--Makefile2
-rw-r--r--src/drawing.c37
-rw-r--r--src/globals.c14
-rw-r--r--src/main.c14
4 files changed, 46 insertions, 21 deletions
diff --git a/Makefile b/Makefile
index 48a3049..739a385 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS))
27INC_FLAGS += -I$(LIBGBA_SRC) 27INC_FLAGS += -I$(LIBGBA_SRC)
28 28
29# Output library names and executables. 29# Output library names and executables.
30TARGET := STEPPER-v1.4 30TARGET := STEPPER-v1.5-dev
31ELF := $(BUILD_DIR)/$(TARGET).elf 31ELF := $(BUILD_DIR)/$(TARGET).elf
32BIN := $(BUILD_DIR)/$(TARGET).gba 32BIN := $(BUILD_DIR)/$(TARGET).gba
33 33
diff --git a/src/drawing.c b/src/drawing.c
index 4481374..3e00e17 100644
--- a/src/drawing.c
+++ b/src/drawing.c
@@ -342,7 +342,7 @@ draw_note(u8 note, u8 clr) {
342 x0 = PIANO_START_X + 2 + octave * 28 + 4; 342 x0 = PIANO_START_X + 2 + octave * 28 + 4;
343 x1 = x0 + 2; 343 x1 = x0 + 2;
344 y0 = PIANO_START_Y - 2 + 13; 344 y0 = PIANO_START_Y - 2 + 13;
345 y1 = y0 + 7; 345 y1 = y0 + 2;
346 draw_filled_rect(x0, y0, x1, y1, clr); 346 draw_filled_rect(x0, y0, x1, y1, clr);
347 } break; 347 } break;
348 case 4:{ 348 case 4:{
@@ -354,7 +354,7 @@ draw_note(u8 note, u8 clr) {
354 x0 = PIANO_START_X + 2 + octave * 28 + 8; 354 x0 = PIANO_START_X + 2 + octave * 28 + 8;
355 x1 = x0 + 2; 355 x1 = x0 + 2;
356 y0 = PIANO_START_Y - 2 + 13; 356 y0 = PIANO_START_Y - 2 + 13;
357 y1 = y0 + 7; 357 y1 = y0 + 2;
358 draw_filled_rect(x0, y0, x1, y1, clr); 358 draw_filled_rect(x0, y0, x1, y1, clr);
359 } break; 359 } break;
360 case 5:{ 360 case 5:{
@@ -377,7 +377,7 @@ draw_note(u8 note, u8 clr) {
377 x0 = PIANO_START_X + 2 + octave * 28 + 16; 377 x0 = PIANO_START_X + 2 + octave * 28 + 16;
378 x1 = x0 + 2; 378 x1 = x0 + 2;
379 y0 = PIANO_START_Y - 2 + 13; 379 y0 = PIANO_START_Y - 2 + 13;
380 y1 = y0 + 7; 380 y1 = y0 + 2;
381 draw_filled_rect(x0, y0, x1, y1, clr); 381 draw_filled_rect(x0, y0, x1, y1, clr);
382 } break; 382 } break;
383 case 9:{ 383 case 9:{
@@ -389,7 +389,7 @@ draw_note(u8 note, u8 clr) {
389 x0 = PIANO_START_X + 2 + octave * 28 + 20; 389 x0 = PIANO_START_X + 2 + octave * 28 + 20;
390 x1 = x0 + 2; 390 x1 = x0 + 2;
391 y0 = PIANO_START_Y - 2 + 13; 391 y0 = PIANO_START_Y - 2 + 13;
392 y1 = y0 + 7; 392 y1 = y0 + 2;
393 draw_filled_rect(x0, y0, x1, y1, clr); 393 draw_filled_rect(x0, y0, x1, y1, clr);
394 } break; 394 } break;
395 case 11: { 395 case 11: {
@@ -401,7 +401,7 @@ draw_note(u8 note, u8 clr) {
401 x0 = PIANO_START_X + 2 + octave * 28 + 24; 401 x0 = PIANO_START_X + 2 + octave * 28 + 24;
402 x1 = x0 + 2; 402 x1 = x0 + 2;
403 y0 = PIANO_START_Y - 2 + 13; 403 y0 = PIANO_START_Y - 2 + 13;
404 y1 = y0 + 7; 404 y1 = y0 + 2;
405 draw_filled_rect(x0, y0, x1, y1, clr); 405 draw_filled_rect(x0, y0, x1, y1, clr);
406 } break; 406 } break;
407 default: { 407 default: {
@@ -611,7 +611,7 @@ draw_parameters_wave(ChannelWaveParams *params, bool global) {
611 u8 *wave_b = params->wave_b; 611 u8 *wave_b = params->wave_b;
612 612
613 size_t x = PARAMS_START_X; 613 size_t x = PARAMS_START_X;
614 size_t y = PARAMS_START_Y + 12; 614 size_t y = PARAMS_START_Y + 8;
615 615
616 // Wave Patterns. 616 // Wave Patterns.
617 draw_wave_pattern(wave_a, x, y + 1, COL_ACC_1); 617 draw_wave_pattern(wave_a, x, y + 1, COL_ACC_1);
@@ -706,7 +706,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) {
706 // Shape drawing. 706 // Shape drawing.
707 { 707 {
708 size_t x = PARAMS_START_X + x_offset; 708 size_t x = PARAMS_START_X + x_offset;
709 size_t y = PARAMS_START_Y + PARAMS_H - 47; 709 size_t y = PARAMS_START_Y + PARAMS_H - 43;
710 710
711 size_t x0 = x + 2; 711 size_t x0 = x + 2;
712 size_t x1 = x0; 712 size_t x1 = x0;
@@ -788,14 +788,14 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) {
788 // Bounding box. 788 // Bounding box.
789 { 789 {
790 size_t x0 = PARAMS_START_X + 31 + x_offset; 790 size_t x0 = PARAMS_START_X + 31 + x_offset;
791 size_t y0 = PARAMS_START_Y + PARAMS_H - 50; 791 size_t y0 = PARAMS_START_Y + PARAMS_H - 46;
792 size_t x1 = x0 + 79; 792 size_t x1 = x0 + 79;
793 size_t y1 = y0 + 21; 793 size_t y1 = y0 + 21;
794 draw_rect(x0, y0, x1, y1, COL_ACC_2); 794 draw_rect(x0, y0, x1, y1, COL_ACC_2);
795 } 795 }
796 796
797 size_t x = PARAMS_START_X + 42 + x_offset; 797 size_t x = PARAMS_START_X + 42 + x_offset;
798 size_t y = PARAMS_START_Y + PARAMS_H - 47; 798 size_t y = PARAMS_START_Y + PARAMS_H - 43;
799 size_t x0 = x; 799 size_t x0 = x;
800 size_t y0 = y + 15 - params->env_volume; 800 size_t y0 = y + 15 - params->env_volume;
801 size_t x1 = x + 8 * params->env_time; 801 size_t x1 = x + 8 * params->env_time;
@@ -954,7 +954,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) {
954 // Labels. 954 // Labels.
955 { 955 {
956 size_t x = PARAMS_START_X + x_offset; 956 size_t x = PARAMS_START_X + x_offset;
957 size_t y = PARAMS_START_Y + PARAMS_H - 48; 957 size_t y = PARAMS_START_Y + PARAMS_H - 43;
958 txt_drawf_small("shape", x + 1, y - 12, col_fg); 958 txt_drawf_small("shape", x + 1, y - 12, col_fg);
959 txt_drawf_small("envelope", x + 54, y - 12, col_fg); 959 txt_drawf_small("envelope", x + 54, y - 12, col_fg);
960 if (sweep) { 960 if (sweep) {
@@ -998,14 +998,14 @@ draw_parameters_noise(ChannelNoiseParams* params, bool global) {
998 // Bounding box. 998 // Bounding box.
999 { 999 {
1000 size_t x0 = PARAMS_START_X + 31 + x_offset; 1000 size_t x0 = PARAMS_START_X + 31 + x_offset;
1001 size_t y0 = PARAMS_START_Y + PARAMS_H - 50; 1001 size_t y0 = PARAMS_START_Y + PARAMS_H - 46;
1002 size_t x1 = x0 + 79; 1002 size_t x1 = x0 + 79;
1003 size_t y1 = y0 + 21; 1003 size_t y1 = y0 + 21;
1004 draw_rect(x0, y0, x1, y1, COL_ACC_2); 1004 draw_rect(x0, y0, x1, y1, COL_ACC_2);
1005 } 1005 }
1006 1006
1007 size_t x = PARAMS_START_X + 42 + x_offset; 1007 size_t x = PARAMS_START_X + 42 + x_offset;
1008 size_t y = PARAMS_START_Y + PARAMS_H - 47; 1008 size_t y = PARAMS_START_Y + PARAMS_H - 43;
1009 size_t x0 = x; 1009 size_t x0 = x;
1010 size_t y0 = y + 15 - params->env_volume; 1010 size_t y0 = y + 15 - params->env_volume;
1011 size_t x1 = x + 8 * params->env_time; 1011 size_t x1 = x + 8 * params->env_time;
@@ -1103,7 +1103,7 @@ draw_parameters_noise(ChannelNoiseParams* params, bool global) {
1103 // Labels. 1103 // Labels.
1104 { 1104 {
1105 size_t x = PARAMS_START_X + x_offset; 1105 size_t x = PARAMS_START_X + x_offset;
1106 size_t y = PARAMS_START_Y + PARAMS_H - 48; 1106 size_t y = PARAMS_START_Y + PARAMS_H - 43;
1107 txt_drawf_small("envelope", x + 54, y - 12, col_fg); 1107 txt_drawf_small("envelope", x + 54, y - 12, col_fg);
1108 } 1108 }
1109} 1109}
@@ -1238,3 +1238,14 @@ draw_piano_notes(void) {
1238 } 1238 }
1239 } 1239 }
1240} 1240}
1241
1242void
1243draw_notif_bar() {
1244 u8 x0 = PARAMS_START_X;
1245 u8 y0 = PARAMS_START_Y - 7;
1246 u8 x1 = PARAMS_START_X + PARAMS_W;
1247 u8 y1 = y0 + 10;
1248 u8 color = COL_FG;
1249 draw_rect(x0, y0, x1, y1, color);
1250 txt_drawf_small("HELLO WORLD!", x0 + 2, y0 + 1, color);
1251}
diff --git a/src/globals.c b/src/globals.c
index b113d6d..2f4d32d 100644
--- a/src/globals.c
+++ b/src/globals.c
@@ -33,32 +33,32 @@ bool clear_screen = true;
33#define CHAN_W 19 33#define CHAN_W 19
34#define CHAN_H 8 34#define CHAN_H 8
35#define CHAN_START_X 30 35#define CHAN_START_X 30
36#define CHAN_START_Y 95 36#define CHAN_START_Y 97
37#define CHAN_OFFSET_Y 15 37#define CHAN_OFFSET_Y 15
38 38
39#define TRIG_W 15 39#define TRIG_W 15
40#define TRIG_H 22 40#define TRIG_H 22
41#define TRIG_START_X 59 41#define TRIG_START_X 59
42#define TRIG_START_Y 95 42#define TRIG_START_Y 97
43#define TRIG_OFFSET_X (TRIG_W + 3) 43#define TRIG_OFFSET_X (TRIG_W + 3)
44#define TRIG_OFFSET_Y (TRIG_H + 8) 44#define TRIG_OFFSET_Y (TRIG_H + 8)
45 45
46#define PIANO_W 170 46#define PIANO_W 170
47#define PIANO_H 20 47#define PIANO_H 15
48#define PIANO_START_X 30 48#define PIANO_START_X 30
49#define PIANO_START_Y 69 49#define PIANO_START_Y 76
50#define PIANO_NOTE_W 2 50#define PIANO_NOTE_W 2
51 51
52#define PARAMS_W 170 52#define PARAMS_W 170
53#define PARAMS_H 64 53#define PARAMS_H 60
54#define PARAMS_START_X 30 54#define PARAMS_START_X 30
55#define PARAMS_START_Y 4 55#define PARAMS_START_Y 16
56 56
57#define R_SIDEBAR_X ((TRIG_START_X) + (TRIG_OFFSET_X) * 8 + 4) 57#define R_SIDEBAR_X ((TRIG_START_X) + (TRIG_OFFSET_X) * 8 + 4)
58#define L_SIDEBAR_X ((CHAN_START_X) - 26) 58#define L_SIDEBAR_X ((CHAN_START_X) - 26)
59 59
60#define PAT_START_X (L_SIDEBAR_X + 4) 60#define PAT_START_X (L_SIDEBAR_X + 4)
61#define PAT_START_Y 18 61#define PAT_START_Y 20
62#define PAT_W 14 62#define PAT_W 14
63#define PAT_H 10 63#define PAT_H 10
64#define PAT_OFFSET_Y 17 64#define PAT_OFFSET_Y 17
diff --git a/src/main.c b/src/main.c
index e819558..5c7d6ed 100644
--- a/src/main.c
+++ b/src/main.c
@@ -23,6 +23,9 @@ WITH REGARD TO THIS SOFTWARE.
23// This could get annoying, so maybe it should be a configuration option to 23// This could get annoying, so maybe it should be a configuration option to
24// enable it? 24// enable it?
25// - Pattern chaining for more than 1 queue and/or song mode. 25// - Pattern chaining for more than 1 queue and/or song mode.
26// - L: Remove from chain
27// - R: Add to chain
28// - Loop?
26// - Undo/Redo. 29// - Undo/Redo.
27// - Select + up/down to queue the next pattern as we move to it? 30// - Select + up/down to queue the next pattern as we move to it?
28// 31//
@@ -88,7 +91,18 @@ render_sequencer(void) {
88 if (redraw_params) { 91 if (redraw_params) {
89 PROF(draw_parameters(), draw_param_cycles); 92 PROF(draw_parameters(), draw_param_cycles);
90 redraw_params = false; 93 redraw_params = false;
94 } else if (input_handler == handle_pattern_selection){
95 // DEBUG: move to drawing file
96 draw_rect(
97 PARAMS_START_X,
98 PARAMS_START_Y + 6,
99 PARAMS_START_X + PARAMS_W,
100 PARAMS_START_Y + PARAMS_H - 6, COL_FG);
101 txt_drawf_small("Current pattern: %s", PARAMS_START_X + 3, PARAMS_START_Y + 8, COL_FG, "A");
102 txt_drawf_small("Next pattern: %s", PARAMS_START_X + 3, PARAMS_START_Y + 8 * 2, COL_FG, "A");
103 txt_drawf_small("Chain: %s", PARAMS_START_X + 3, PARAMS_START_Y + 8 * 3, COL_FG, "A - B - B - A - B");
91 } 104 }
105 draw_notif_bar();
92 PROF(draw_cursors(), draw_cursor_cycles); 106 PROF(draw_cursors(), draw_cursor_cycles);
93} 107}
94 108