diff options
author | Bad Diode <bd@badd10de.dev> | 2023-07-21 18:16:37 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-07-21 18:16:37 +0200 |
commit | abd10d9f6e048bb8cb21d2618f16e48ff5f781f2 (patch) | |
tree | 35d251fc2f0814ed226eb525d5d424c74d8ffec3 | |
parent | 293ac066f324964739efa7d34a0e01ef8af43e89 (diff) | |
download | stepper-abd10d9f6e048bb8cb21d2618f16e48ff5f781f2.tar.gz stepper-abd10d9f6e048bb8cb21d2618f16e48ff5f781f2.zip |
Add new parameter UI for square channels
-rw-r--r-- | src/drawing.c | 458 |
1 files changed, 194 insertions, 264 deletions
diff --git a/src/drawing.c b/src/drawing.c index c596995..f843cb1 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -3,6 +3,28 @@ | |||
3 | // | 3 | // |
4 | 4 | ||
5 | void | 5 | void |
6 | draw_param_stub(size_t idx, u8 color) { | ||
7 | if (idx >= 10) { | ||
8 | return; | ||
9 | } | ||
10 | u8 x0 = PARAMS_START_X + (idx % 5) * PARAMS_BOX_OFFSET_X; | ||
11 | u8 x1 = x0 + PARAMS_BOX_W; | ||
12 | u8 y0 = PARAMS_START_Y; | ||
13 | if (idx >= 5) { | ||
14 | y0 += PARAMS_BOX_OFFSET_Y; | ||
15 | } | ||
16 | u8 y1 = y0 + PARAMS_BOX_H; | ||
17 | for (size_t i = 0; i < PARAMS_BOX_W; i += 2) { | ||
18 | draw_pixel(x0 + i + 1, y0, color); | ||
19 | draw_pixel(x0 + i + 1, y1, color); | ||
20 | } | ||
21 | for (size_t i = 0; i < PARAMS_BOX_H; i += 2) { | ||
22 | draw_pixel(x0, y0 + i + 1, color); | ||
23 | draw_pixel(x1, y0 + i + 1, color); | ||
24 | } | ||
25 | } | ||
26 | |||
27 | void | ||
6 | draw_channel_sprite(size_t x, size_t y, u8 clr, u8 idx) { | 28 | draw_channel_sprite(size_t x, size_t y, u8 clr, u8 idx) { |
7 | draw_icn(x, y, &ch_btn_sprite[0 + 6 * idx], clr, 0, 0); | 29 | draw_icn(x, y, &ch_btn_sprite[0 + 6 * idx], clr, 0, 0); |
8 | draw_icn(x + 8, y, &ch_btn_sprite[2 + 6 * idx], clr, 0, 0); | 30 | draw_icn(x + 8, y, &ch_btn_sprite[2 + 6 * idx], clr, 0, 0); |
@@ -595,10 +617,10 @@ draw_wave_pattern(u8 *pattern, int x, int y, u8 clr) { | |||
595 | IWRAM_CODE | 617 | IWRAM_CODE |
596 | void | 618 | void |
597 | clear_parameters(void) { | 619 | clear_parameters(void) { |
598 | size_t x0 = PARAMS_START_X -1; | 620 | size_t x0 = PARAMS_START_X; |
599 | size_t y0 = PARAMS_START_Y; | 621 | size_t y0 = PARAMS_START_Y; |
600 | size_t x1 = PARAMS_START_X + PARAMS_W; | 622 | size_t x1 = PARAMS_START_X + PARAMS_W; |
601 | size_t y1 = PARAMS_START_Y + PARAMS_H - 1; | 623 | size_t y1 = PARAMS_START_Y + PARAMS_H; |
602 | draw_filled_rect(x0, y0, x1, y1, COL_BG); | 624 | draw_filled_rect(x0, y0, x1, y1, COL_BG); |
603 | } | 625 | } |
604 | 626 | ||
@@ -700,272 +722,176 @@ draw_parameters_wave(ChannelWaveParams *params, bool global) { | |||
700 | 722 | ||
701 | void | 723 | void |
702 | draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) { | 724 | draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) { |
703 | size_t x_offset = sweep ? 0 : 30; | ||
704 | u8 col_fg = COL_FG; | 725 | u8 col_fg = COL_FG; |
705 | if (global && input_handler == handle_channel_selection) { | 726 | if (global && input_handler == handle_channel_selection) { |
706 | col_fg = COL_OFF; | 727 | col_fg = COL_OFF; |
707 | } | 728 | } |
708 | 729 | ||
709 | // Duty cycle. | 730 | // Duty cycle / shape. |
710 | { | 731 | { |
711 | // Shape drawing. | 732 | size_t x = PARAMS_START_X + 3; |
712 | { | 733 | size_t y = PARAMS_START_Y + 1; |
713 | size_t x = PARAMS_START_X + x_offset; | 734 | |
714 | size_t y = PARAMS_START_Y + PARAMS_H - 43; | 735 | size_t x0 = x + 2; |
715 | 736 | size_t x1 = x0; | |
716 | size_t x0 = x + 2; | 737 | size_t x2 = x0; |
717 | size_t x1 = x0; | 738 | size_t x3 = x0; |
718 | size_t x2 = x0; | 739 | size_t x4 = x0; |
719 | size_t x3 = x0; | 740 | size_t x5 = x0; |
720 | size_t x4 = x0; | 741 | size_t y0 = y + 14; |
721 | size_t x5 = x0; | 742 | size_t y1 = y + 2; |
722 | size_t y0 = y + 14; | 743 | |
723 | size_t y1 = y + 2; | 744 | switch (params->duty_cycle) { |
724 | 745 | case 0: { | |
725 | switch (params->duty_cycle) { | 746 | x1 += 4; |
726 | case 0: { | 747 | x2 += 6; |
727 | x1 += 4; | 748 | x3 += 13; |
728 | x2 += 6; | 749 | x4 += 15; |
729 | x3 += 13; | 750 | x5 += 20; |
730 | x4 += 15; | 751 | } break; |
731 | x5 += 20; | 752 | case 1: { |
732 | } break; | 753 | x1 += 4; |
733 | case 1: { | 754 | x2 += 7; |
734 | x1 += 4; | 755 | x3 += 13; |
735 | x2 += 7; | 756 | x4 += 16; |
736 | x3 += 13; | 757 | x5 += 20; |
737 | x4 += 16; | 758 | } break; |
738 | x5 += 20; | 759 | case 2: { |
739 | } break; | 760 | x1 += 3; |
740 | case 2: { | 761 | x2 += 8; |
741 | x1 += 3; | 762 | x3 += 12; |
742 | x2 += 8; | 763 | x4 += 17; |
743 | x3 += 12; | 764 | x5 += 20; |
744 | x4 += 17; | 765 | } break; |
745 | x5 += 20; | 766 | case 3: { |
746 | } break; | 767 | x1 += 2; |
747 | case 3: { | 768 | x2 += 9; |
748 | x1 += 2; | 769 | x3 += 11; |
749 | x2 += 9; | 770 | x4 += 18; |
750 | x3 += 11; | 771 | x5 += 20; |
751 | x4 += 18; | 772 | } break; |
752 | x5 += 20; | ||
753 | } break; | ||
754 | } | ||
755 | draw_line(x0, y0, x1, y0, COL_ACC_1); | ||
756 | draw_line(x1, y1, x1, y0, COL_ACC_1); | ||
757 | draw_line(x1, y1, x2, y1, COL_ACC_1); | ||
758 | draw_line(x2, y1, x2, y0, COL_ACC_1); | ||
759 | draw_line(x2, y0, x3, y0, COL_ACC_1); | ||
760 | draw_line(x3, y1, x3, y0, COL_ACC_1); | ||
761 | draw_line(x3, y1, x4, y1, COL_ACC_1); | ||
762 | draw_line(x4, y1, x4, y0, COL_ACC_1); | ||
763 | draw_line(x4, y0, x5, y0, COL_ACC_1); | ||
764 | |||
765 | // Bounding box. | ||
766 | draw_rect(x, y - 3, x + 24, y + 18, COL_ACC_1); | ||
767 | } | ||
768 | |||
769 | // Param box. | ||
770 | { | ||
771 | size_t x = PARAMS_START_X + x_offset; | ||
772 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
773 | draw_line(x, y + 7, x + 2, y + 7, col_fg); | ||
774 | draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | ||
775 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
776 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
777 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
778 | txt_drawf_small("duty", x + 3, y + 3, col_fg); | ||
779 | |||
780 | switch (params->duty_cycle) { | ||
781 | case 0: { txt_drawf("12", x + 6, y + 10, col_fg); } break; | ||
782 | case 1: { txt_drawf("25", x + 6, y + 10, col_fg); } break; | ||
783 | case 2: { txt_drawf("50", x + 6, y + 10, col_fg); } break; | ||
784 | case 3: { txt_drawf("75", x + 6, y + 10, col_fg); } break; | ||
785 | } | ||
786 | } | 773 | } |
774 | draw_line(x0, y0, x1, y0, COL_ACC_1); | ||
775 | draw_line(x1, y1, x1, y0, COL_ACC_1); | ||
776 | draw_line(x1, y1, x2, y1, COL_ACC_1); | ||
777 | draw_line(x2, y1, x2, y0, COL_ACC_1); | ||
778 | draw_line(x2, y0, x3, y0, COL_ACC_1); | ||
779 | draw_line(x3, y1, x3, y0, COL_ACC_1); | ||
780 | draw_line(x3, y1, x4, y1, COL_ACC_1); | ||
781 | draw_line(x4, y1, x4, y0, COL_ACC_1); | ||
782 | draw_line(x4, y0, x5, y0, COL_ACC_1); | ||
787 | } | 783 | } |
788 | 784 | ||
789 | // Envelope. | 785 | // Envelope. |
790 | { | 786 | { |
791 | // Env. drawing. | 787 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 1 + 1; |
792 | { | 788 | size_t y = PARAMS_START_Y + 1; |
793 | // Bounding box. | 789 | size_t x0 = x; |
794 | { | 790 | size_t y0 = y + 15 - params->env_volume; |
795 | size_t x0 = PARAMS_START_X + 31 + x_offset; | 791 | size_t x1 = x + (3 * PARAMS_BOX_OFFSET_X) * params->env_time / 8 + 7; |
796 | size_t y0 = PARAMS_START_Y + PARAMS_H - 46; | 792 | size_t y1 = params->env_direction == 0 ? y + 15 : y; |
797 | size_t x1 = x0 + 79; | 793 | size_t x2 = x + PARAMS_BOX_OFFSET_X * 3 - 5; |
798 | size_t y1 = y0 + 21; | 794 | size_t y2 = y1; |
799 | draw_rect(x0, y0, x1, y1, COL_ACC_2); | 795 | |
800 | } | 796 | // Env. |
801 | 797 | if (params->env_time == 0) { | |
802 | size_t x = PARAMS_START_X + 42 + x_offset; | 798 | // TODO: Time 0 vol 0 (dir) doesn't make sense (mute) |
803 | size_t y = PARAMS_START_Y + PARAMS_H - 43; | 799 | // TODO: Time 0 vol 100 doesn't make sense (constant max volume) |
804 | size_t x0 = x; | 800 | // NOTE: Maybe it's just a matter of handling it better on the |
805 | size_t y0 = y + 15 - params->env_volume; | 801 | // control? Have to check every time we change direction to swap |
806 | size_t x1 = x + 8 * params->env_time; | 802 | // the conditions. |
807 | size_t y1 = params->env_direction == 0 ? y + 15 : y; | 803 | draw_line(x0, y0, x2, y0, COL_ACC_2); |
808 | size_t x2 = x + 8 * 7 + 1; | 804 | } else { |
809 | size_t y2 = y1; | 805 | draw_line(x0, y0, x1, y1, COL_ACC_2); |
810 | 806 | draw_line(x1, y1, x2, y2, COL_ACC_2); | |
811 | // Env. | ||
812 | if (params->env_time == 0) { | ||
813 | draw_line(x1, y0, x2, y0, COL_ACC_2); | ||
814 | } else { | ||
815 | draw_line(x0, y0, x1, y1, COL_ACC_2); | ||
816 | draw_line(x1, y1, x2, y2, COL_ACC_2); | ||
817 | } | ||
818 | } | ||
819 | |||
820 | // Env. volume. | ||
821 | { | ||
822 | size_t x = PARAMS_START_X + 31 + x_offset; | ||
823 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
824 | draw_line(x, y + 7, x + 4, y + 7, col_fg); | ||
825 | draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | ||
826 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
827 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
828 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
829 | txt_drawf_small("vol", x + 5, y + 3, col_fg); | ||
830 | |||
831 | switch (params->env_volume) { | ||
832 | case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | ||
833 | case 1: { txt_drawf("6", x + 9, y + 10, col_fg); } break; | ||
834 | case 2: { txt_drawf("13", x + 6, y + 10, col_fg); } break; | ||
835 | case 3: { txt_drawf("20", x + 6, y + 10, col_fg); } break; | ||
836 | case 4: { txt_drawf("26", x + 6, y + 10, col_fg); } break; | ||
837 | case 5: { txt_drawf("33", x + 6, y + 10, col_fg); } break; | ||
838 | case 6: { txt_drawf("40", x + 6, y + 10, col_fg); } break; | ||
839 | case 7: { txt_drawf("46", x + 6, y + 10, col_fg); } break; | ||
840 | case 8: { txt_drawf("53", x + 6, y + 10, col_fg); } break; | ||
841 | case 9: { txt_drawf("60", x + 6, y + 10, col_fg); } break; | ||
842 | case 10: { txt_drawf("66", x + 6, y + 10, col_fg); } break; | ||
843 | case 11: { txt_drawf("73", x + 6, y + 10, col_fg); } break; | ||
844 | case 12: { txt_drawf("80", x + 6, y + 10, col_fg); } break; | ||
845 | case 13: { txt_drawf("86", x + 6, y + 10, col_fg); } break; | ||
846 | case 14: { txt_drawf("93", x + 6, y + 10, col_fg); } break; | ||
847 | case 15: { txt_drawf("100", x + 3, y + 10, col_fg); } break; | ||
848 | } | ||
849 | } | ||
850 | |||
851 | // Env. direction | ||
852 | { | ||
853 | size_t x = PARAMS_START_X + 59 + x_offset; | ||
854 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
855 | draw_line(x, y + 7, x + 4, y + 7, col_fg); | ||
856 | draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | ||
857 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
858 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
859 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
860 | txt_drawf_small("dir", x + 5, y + 3, col_fg); | ||
861 | |||
862 | char arr_up[2] = { 0x19, 0 }; | ||
863 | char arr_down[2] = { 0x18, 0 }; | ||
864 | switch (params->env_direction) { | ||
865 | case 0: { txt_drawf(arr_up, x + 9, y + 11, col_fg); } break; | ||
866 | case 1: { txt_drawf(arr_down, x + 9, y + 11, col_fg); } break; | ||
867 | } | ||
868 | } | 807 | } |
808 | } | ||
869 | 809 | ||
870 | // Env. time. | 810 | // TODO: Trig probability |
871 | { | 811 | { |
872 | size_t x = PARAMS_START_X + 87 + x_offset; | 812 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; |
873 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | 813 | size_t y = PARAMS_START_Y + 5; |
874 | draw_line(x, y + 7, x + 2, y + 7, col_fg); | 814 | txt_drawf("100", x, y, col_fg); |
875 | draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | 815 | txt_drawc('%', x + 18, y, col_fg); |
876 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
877 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
878 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
879 | txt_drawf_small("time", x + 3, y + 3, col_fg); | ||
880 | |||
881 | switch (params->env_time) { | ||
882 | case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | ||
883 | case 1: { txt_drawf("14", x + 6, y + 10, col_fg); } break; | ||
884 | case 2: { txt_drawf("28", x + 6, y + 10, col_fg); } break; | ||
885 | case 3: { txt_drawf("42", x + 6, y + 10, col_fg); } break; | ||
886 | case 4: { txt_drawf("57", x + 6, y + 10, col_fg); } break; | ||
887 | case 5: { txt_drawf("71", x + 6, y + 10, col_fg); } break; | ||
888 | case 6: { txt_drawf("85", x + 6, y + 10, col_fg); } break; | ||
889 | case 7: { txt_drawf("100", x + 3, y + 10, col_fg); } break; | ||
890 | } | ||
891 | } | ||
892 | } | 816 | } |
893 | 817 | ||
894 | // Sweep number. | 818 | // Sweep. |
895 | if (sweep) { | 819 | if (sweep) { |
896 | size_t x = PARAMS_START_X + 118; | 820 | size_t x = PARAMS_START_X; |
897 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | 821 | size_t y = PARAMS_START_Y + PARAMS_BOX_OFFSET_Y; |
898 | draw_line(x, y + 7, x + 4, y + 7, col_fg); | 822 | |
899 | draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | 823 | // Bounding box. |
900 | draw_line(x, y + 8, x, y + 19, col_fg); | 824 | u8 x0 = x + 1; |
901 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | 825 | u8 x1 = x + PARAMS_BOX_OFFSET_X * 3 - 5; |
902 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | 826 | u8 y0 = y + 2; |
903 | txt_drawf_small("num", x + 5, y + 3, col_fg); | 827 | u8 y1 = y + PARAMS_BOX_H - 8; |
904 | 828 | draw_line(x0, y0, x1, y0, col_fg); | |
829 | draw_line(x0, y1, x1, y1, col_fg); | ||
830 | draw_line(x0 - 1, y0 + 1, x0 - 1, y1 - 1, col_fg); | ||
831 | draw_line(x1 + 1, y0 + 1, x1 + 1, y1 - 1, col_fg); | ||
832 | |||
833 | // Number. | ||
905 | switch (params->sweep_number) { | 834 | switch (params->sweep_number) { |
906 | case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | 835 | case 0: { txt_drawf("0", x + 12, y + 5, col_fg); } break; |
907 | case 1: { txt_drawf("1", x + 9, y + 10, col_fg); } break; | 836 | case 1: { txt_drawf("1", x + 12, y + 5, col_fg); } break; |
908 | case 2: { txt_drawf("2", x + 9, y + 10, col_fg); } break; | 837 | case 2: { txt_drawf("2", x + 12, y + 5, col_fg); } break; |
909 | case 3: { txt_drawf("3", x + 9, y + 10, col_fg); } break; | 838 | case 3: { txt_drawf("3", x + 12, y + 5, col_fg); } break; |
910 | case 4: { txt_drawf("4", x + 9, y + 10, col_fg); } break; | 839 | case 4: { txt_drawf("4", x + 12, y + 5, col_fg); } break; |
911 | case 5: { txt_drawf("5", x + 9, y + 10, col_fg); } break; | 840 | case 5: { txt_drawf("5", x + 12, y + 5, col_fg); } break; |
912 | case 6: { txt_drawf("6", x + 9, y + 10, col_fg); } break; | 841 | case 6: { txt_drawf("6", x + 12, y + 5, col_fg); } break; |
913 | case 7: { txt_drawf("7", x + 9, y + 10, col_fg); } break; | 842 | case 7: { txt_drawf("7", x + 12, y + 5, col_fg); } break; |
914 | } | 843 | } |
915 | } | ||
916 | |||
917 | // Sweep time. | ||
918 | if (sweep) { | ||
919 | size_t x = PARAMS_START_X + 146; | ||
920 | size_t y = PARAMS_START_Y + PARAMS_H - 26; | ||
921 | draw_line(x, y + 7, x + 2, y + 7, col_fg); | ||
922 | draw_line(x + 22, y + 7, x + 24, y + 7, col_fg); | ||
923 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
924 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
925 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
926 | txt_drawf_small("time", x + 3, y + 3, col_fg); | ||
927 | 844 | ||
845 | // Time. | ||
846 | x += PARAMS_BOX_OFFSET_X; | ||
928 | switch (params->sweep_time) { | 847 | switch (params->sweep_time) { |
929 | case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break; | 848 | case 0: { txt_drawf("0", x + 12, y + 5, col_fg); } break; |
930 | case 1: { txt_drawf("1", x + 9, y + 10, col_fg); } break; | 849 | case 1: { txt_drawf("1", x + 12, y + 5, col_fg); } break; |
931 | case 2: { txt_drawf("2", x + 9, y + 10, col_fg); } break; | 850 | case 2: { txt_drawf("2", x + 12, y + 5, col_fg); } break; |
932 | case 3: { txt_drawf("3", x + 9, y + 10, col_fg); } break; | 851 | case 3: { txt_drawf("3", x + 12, y + 5, col_fg); } break; |
933 | case 4: { txt_drawf("4", x + 9, y + 10, col_fg); } break; | 852 | case 4: { txt_drawf("4", x + 12, y + 5, col_fg); } break; |
934 | case 5: { txt_drawf("5", x + 9, y + 10, col_fg); } break; | 853 | case 5: { txt_drawf("5", x + 12, y + 5, col_fg); } break; |
935 | case 6: { txt_drawf("6", x + 9, y + 10, col_fg); } break; | 854 | case 6: { txt_drawf("6", x + 12, y + 5, col_fg); } break; |
936 | case 7: { txt_drawf("7", x + 9, y + 10, col_fg); } break; | 855 | case 7: { txt_drawf("7", x + 12, y + 5, col_fg); } break; |
937 | } | 856 | } |
938 | } | ||
939 | |||
940 | // Sweep direction. | ||
941 | if (sweep) { | ||
942 | size_t x = PARAMS_START_X + 132; | ||
943 | size_t y = PARAMS_START_Y + PARAMS_H - 46; | ||
944 | draw_line(x, y + 7, x + 4, y + 7, col_fg); | ||
945 | draw_line(x + 20, y + 7, x + 24, y + 7, col_fg); | ||
946 | draw_line(x, y + 8, x, y + 19, col_fg); | ||
947 | draw_line(x + 24, y + 8, x + 24, y + 19, col_fg); | ||
948 | draw_line(x, y + 20, x + 24, y + 20, col_fg); | ||
949 | txt_drawf_small("dir", x + 5, y + 3, col_fg); | ||
950 | 857 | ||
951 | char arr_up[2] = { 0x19, 0 }; | 858 | // Direction. |
952 | char arr_down[2] = { 0x18, 0 }; | 859 | x += PARAMS_BOX_OFFSET_X; |
860 | char arr_down[2] = { 0x19, 0 }; | ||
861 | char arr_up[2] = { 0x18, 0 }; | ||
953 | switch (params->sweep_direction) { | 862 | switch (params->sweep_direction) { |
954 | case 0: { txt_drawf(arr_up, x + 9, y + 11, col_fg); } break; | 863 | case 0: { txt_drawf(arr_up, x + 12, y + 5, col_fg); } break; |
955 | case 1: { txt_drawf(arr_down, x + 9, y + 11, col_fg); } break; | 864 | case 1: { txt_drawf(arr_down, x + 12, y + 5, col_fg); } break; |
956 | } | 865 | } |
957 | } | 866 | } |
958 | 867 | ||
959 | // Labels. | 868 | // Labels. |
960 | { | 869 | { |
961 | size_t x = PARAMS_START_X + x_offset; | 870 | size_t x = PARAMS_START_X; |
962 | size_t y = PARAMS_START_Y + PARAMS_H - 43; | 871 | size_t y = PARAMS_START_Y; |
963 | txt_drawf_small("shape", x + 1, y - 12, col_fg); | 872 | txt_drawf_small("shape", x + 4 + PARAMS_BOX_OFFSET_X * 0, y + PARAMS_BOX_H - 7, col_fg); |
964 | txt_drawf_small("envelope", x + 54, y - 12, col_fg); | 873 | txt_drawf_small("vol", x + 8 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); |
874 | txt_drawf_small("time", x + 6 + PARAMS_BOX_OFFSET_X * 2, y + PARAMS_BOX_H - 7, col_fg); | ||
875 | txt_drawf_small("dir", x + 8 + PARAMS_BOX_OFFSET_X * 3, y + PARAMS_BOX_H - 7, col_fg); | ||
876 | txt_drawf_small("prob", x + 6 + PARAMS_BOX_OFFSET_X * 4, y + PARAMS_BOX_H - 7, col_fg); | ||
877 | y += PARAMS_BOX_OFFSET_Y; | ||
965 | if (sweep) { | 878 | if (sweep) { |
966 | txt_drawf_small("sweep", x + 133, y - 12, col_fg); | 879 | txt_drawf_small("sweep", x + 4 + PARAMS_BOX_OFFSET_X * 0, y + PARAMS_BOX_H - 7, col_fg); |
880 | txt_drawf_small("time", x + 6 + PARAMS_BOX_OFFSET_X * 1, y + PARAMS_BOX_H - 7, col_fg); | ||
881 | txt_drawf_small("dir", x + 8 + PARAMS_BOX_OFFSET_X * 2, y + PARAMS_BOX_H - 7, col_fg); | ||
967 | } | 882 | } |
968 | } | 883 | } |
884 | |||
885 | // Empty spacers. | ||
886 | { | ||
887 | if (!sweep) { | ||
888 | draw_param_stub(5, COL_OFF); | ||
889 | draw_param_stub(6, COL_OFF); | ||
890 | draw_param_stub(7, COL_OFF); | ||
891 | } | ||
892 | draw_param_stub(8, COL_OFF); | ||
893 | draw_param_stub(9, COL_OFF); | ||
894 | } | ||
969 | } | 895 | } |
970 | 896 | ||
971 | void | 897 | void |
@@ -1117,34 +1043,38 @@ void | |||
1117 | draw_parameters(void) { | 1043 | draw_parameters(void) { |
1118 | clear_parameters(); | 1044 | clear_parameters(); |
1119 | Pattern *pat = &patterns[pattern_selection_loc]; | 1045 | Pattern *pat = &patterns[pattern_selection_loc]; |
1120 | draw_rect(PARAMS_START_X, PARAMS_START_Y, PARAMS_START_X + PARAMS_W, PARAMS_START_Y + PARAMS_H, COL_OFF); | 1046 | // DEBUG: Draw the parameter window |
1121 | // DEBUG: Drawing the reference grid | 1047 | // draw_rect(PARAMS_START_X, PARAMS_START_Y, PARAMS_START_X + PARAMS_W, PARAMS_START_Y + PARAMS_H, COL_OFF); |
1122 | // if (input_handler == handle_trigger_selection || | 1048 | // DEBUG: Drawing the reference grid overlay |
1123 | // input_handler == handle_param_selection_sq1 || | 1049 | // for (size_t i = 0; i < 10; i++) { |
1124 | // input_handler == handle_param_selection_sq2 || | 1050 | // draw_param_stub(i, COL_OFF); |
1125 | // input_handler == handle_param_selection_wave || | ||
1126 | // input_handler == handle_param_selection_noise) { | ||
1127 | // switch (channel_selection_loc) { | ||
1128 | // case 0: { draw_parameters_square(&pat->ch1.params[trig_selection_loc], true, false); } break; | ||
1129 | // case 1: { draw_parameters_square(&pat->ch2.params[trig_selection_loc], false, false); } break; | ||
1130 | // case 2: { draw_parameters_wave(&pat->ch3.params[trig_selection_loc], false); } break; | ||
1131 | // case 3: { draw_parameters_noise(&pat->ch4.params[trig_selection_loc], false); } break; | ||
1132 | // } | ||
1133 | // return; | ||
1134 | // } | ||
1135 | // if (input_handler == handle_channel_selection || | ||
1136 | // input_handler == handle_param_selection_ch1 || | ||
1137 | // input_handler == handle_param_selection_ch2 || | ||
1138 | // input_handler == handle_param_selection_ch3 || | ||
1139 | // input_handler == handle_param_selection_ch4) { | ||
1140 | // switch (channel_selection_loc) { | ||
1141 | // case 0: { draw_parameters_square(&ch1_params, true, true); } break; | ||
1142 | // case 1: { draw_parameters_square(&ch2_params, false, true); } break; | ||
1143 | // case 2: { draw_parameters_wave(&ch3_params, true); } break; | ||
1144 | // case 3: { draw_parameters_noise(&ch4_params, true); } break; | ||
1145 | // } | ||
1146 | // return; | ||
1147 | // } | 1051 | // } |
1052 | if (input_handler == handle_trigger_selection || | ||
1053 | input_handler == handle_param_selection_sq1 || | ||
1054 | input_handler == handle_param_selection_sq2 || | ||
1055 | input_handler == handle_param_selection_wave || | ||
1056 | input_handler == handle_param_selection_noise) { | ||
1057 | switch (channel_selection_loc) { | ||
1058 | case 0: { draw_parameters_square(&pat->ch1.params[trig_selection_loc], true, false); } break; | ||
1059 | case 1: { draw_parameters_square(&pat->ch2.params[trig_selection_loc], false, false); } break; | ||
1060 | case 2: { draw_parameters_wave(&pat->ch3.params[trig_selection_loc], false); } break; | ||
1061 | case 3: { draw_parameters_noise(&pat->ch4.params[trig_selection_loc], false); } break; | ||
1062 | } | ||
1063 | return; | ||
1064 | } | ||
1065 | if (input_handler == handle_channel_selection || | ||
1066 | input_handler == handle_param_selection_ch1 || | ||
1067 | input_handler == handle_param_selection_ch2 || | ||
1068 | input_handler == handle_param_selection_ch3 || | ||
1069 | input_handler == handle_param_selection_ch4) { | ||
1070 | switch (channel_selection_loc) { | ||
1071 | case 0: { draw_parameters_square(&ch1_params, true, true); } break; | ||
1072 | case 1: { draw_parameters_square(&ch2_params, false, true); } break; | ||
1073 | case 2: { draw_parameters_wave(&ch3_params, true); } break; | ||
1074 | case 3: { draw_parameters_noise(&ch4_params, true); } break; | ||
1075 | } | ||
1076 | return; | ||
1077 | } | ||
1148 | } | 1078 | } |
1149 | 1079 | ||
1150 | void | 1080 | void |