diff options
author | Bad Diode <bd@badd10de.dev> | 2023-07-12 16:02:28 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-07-12 16:02:28 +0200 |
commit | d2be261b88753c3e0fdeb7588057aa3f1648ead5 (patch) | |
tree | 3463064f6101c76432a30788eeff25e03e73b2a6 | |
parent | 8d04ec381b8e28fe9d84ddf2e9f295723a95c407 (diff) | |
download | stepper-d2be261b88753c3e0fdeb7588057aa3f1648ead5.tar.gz stepper-d2be261b88753c3e0fdeb7588057aa3f1648ead5.zip |
Add notification bar and mockup of pattern chaining
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | src/drawing.c | 37 | ||||
-rw-r--r-- | src/globals.c | 14 | ||||
-rw-r--r-- | src/main.c | 14 |
4 files changed, 46 insertions, 21 deletions
@@ -27,7 +27,7 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS)) | |||
27 | INC_FLAGS += -I$(LIBGBA_SRC) | 27 | INC_FLAGS += -I$(LIBGBA_SRC) |
28 | 28 | ||
29 | # Output library names and executables. | 29 | # Output library names and executables. |
30 | TARGET := STEPPER-v1.4 | 30 | TARGET := STEPPER-v1.5-dev |
31 | ELF := $(BUILD_DIR)/$(TARGET).elf | 31 | ELF := $(BUILD_DIR)/$(TARGET).elf |
32 | BIN := $(BUILD_DIR)/$(TARGET).gba | 32 | BIN := $(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 | |||
1242 | void | ||
1243 | draw_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 |
@@ -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 | ||