From 6eabfc84abd31425b0b222679493d9082cb29349 Mon Sep 17 00:00:00 2001 From: LiquidFenrir Date: Sun, 10 Dec 2017 18:19:26 +0100 Subject: [PATCH] General instructions-drawing function (#111) 1 info line above, 4 rows, 2 columns. --- include/draw.h | 15 +++++-- include/instructions.h | 99 ++++++++++++++++++++++++++++++++++++++++++ source/draw.c | 80 ++++++++++++++++------------------ source/main.c | 10 ++++- 4 files changed, 156 insertions(+), 48 deletions(-) create mode 100644 include/instructions.h diff --git a/include/draw.h b/include/draw.h index 000a0b4..b7d9919 100644 --- a/include/draw.h +++ b/include/draw.h @@ -50,12 +50,13 @@ typedef enum { #define BUTTONS_START_Y 130 #define BUTTONS_STEP 22 +#define BUTTONS_INFO_LINES 4 +#define BUTTONS_INFO_COLUNMNS 2 enum { + BUTTONS_Y_INFO = BUTTONS_START_Y+5, + BUTTONS_Y_LINE_1 = BUTTONS_START_Y + BUTTONS_STEP*1, - - BUTTONS_Y_INFO = BUTTONS_Y_LINE_1+5, - BUTTONS_Y_LINE_2 = BUTTONS_START_Y + BUTTONS_STEP*2, BUTTONS_Y_LINE_3 = BUTTONS_START_Y + BUTTONS_STEP*3, BUTTONS_Y_LINE_4 = BUTTONS_START_Y + BUTTONS_STEP*4, @@ -64,6 +65,11 @@ enum { BUTTONS_X_RIGHT = 200, } ButtonPos; +typedef struct { + const wchar_t * info_line; + const wchar_t * instructions[BUTTONS_INFO_LINES][BUTTONS_INFO_COLUNMNS]; +} Instructions_s; + void init_screens(void); void exit_screens(void); @@ -74,6 +80,7 @@ void draw_preview(int preview_offset); void draw_install(InstallType type); -void draw_interface(Entry_List_s* list, EntryMode current_mode, bool install_mode); +void draw_instructions(Instructions_s instructions); +void draw_interface(Entry_List_s* list, EntryMode current_mode); #endif \ No newline at end of file diff --git a/include/instructions.h b/include/instructions.h new file mode 100644 index 0000000..37876c2 --- /dev/null +++ b/include/instructions.h @@ -0,0 +1,99 @@ +/* +* This file is part of Anemone3DS +* Copyright (C) 2016-2017 Alex Taber ("astronautlevel"), Dawid Eckert ("daedreth") +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* Additional Terms 7.b and 7.c of GPLv3 apply to this file: +* * Requiring preservation of specified reasonable legal notices or +* author attributions in that material or in the Appropriate Legal +* Notices displayed by works containing it. +* * Prohibiting misrepresentation of the origin of that material, +* or requiring that modified versions of such material be marked in +* reasonable ways as different from the original version. +*/ + +#ifndef INSTRUCTIONS_H +#define INSTRUCTIONS_H + +#include "draw.h" + +Instructions_s normal_instructions[MODE_AMOUNT] = { + { + .info_line = NULL, + .instructions = { + { + L"\uE000 Hold to install", + L"\uE001 Queue shuffle theme" + }, + { + NULL, + L"\uE003 Preview theme" + }, + { + L"\uE004 Switch to splashes", + L"\uE005 Scan QR code" + }, + { + L"Exit", + L"Delete from SD" + } + } + }, + { + .info_line = NULL, + .instructions = { + { + L"\uE000 Install splash", + L"\uE001 Delete installed splash" + }, + { + NULL, + L"\uE003 Preview splash" + }, + { + L"\uE004 Switch to themes", + L"\uE005 Scan QR code" + }, + { + L"Exit", + L"Delete from SD" + } + } + } +}; + +Instructions_s install_instructions = { + .info_line = L"Release \uE000 to cancel or hold \uE006 and release \uE000 to install", + .instructions = { + { + L"\uE079 Normal install", + L"\uE07A Shuffle install" + }, + { + L"\uE07B BGM-only install", + L"\uE07C No-BGM install" + }, + { + NULL, + NULL + }, + { + L"Exit", + NULL + } + } +}; + +#endif \ No newline at end of file diff --git a/source/draw.c b/source/draw.c index 914ae02..ce95425 100644 --- a/source/draw.c +++ b/source/draw.c @@ -196,7 +196,43 @@ void draw_install(InstallType type) pp2d_end_draw(); } -void draw_interface(Entry_List_s* list, EntryMode current_mode, bool install_mode) +void draw_instructions(Instructions_s instructions) +{ + pp2d_draw_on(GFX_TOP, GFX_LEFT); + + if(instructions.info_line != NULL) + pp2d_draw_wtext_center(GFX_TOP, BUTTONS_Y_INFO, 0.55, 0.55, COLOR_WHITE, instructions.info_line); + + const int y_lines[BUTTONS_INFO_LINES-1] = { + BUTTONS_Y_LINE_1, + BUTTONS_Y_LINE_2, + BUTTONS_Y_LINE_3, + }; + + for(int i = 0; i < BUTTONS_INFO_LINES-1; i++) + { + if(instructions.instructions[i][0] != NULL) + pp2d_draw_wtext(BUTTONS_X_LEFT, y_lines[i], 0.6, 0.6, COLOR_WHITE, instructions.instructions[i][0]); + if(instructions.instructions[i][1] != NULL) + pp2d_draw_wtext(BUTTONS_X_RIGHT, y_lines[i], 0.6, 0.6, COLOR_WHITE, instructions.instructions[i][1]); + } + + const wchar_t * start_line = instructions.instructions[BUTTONS_INFO_LINES-1][0]; + if(start_line != NULL) + { + pp2d_draw_texture(TEXTURE_START_BUTTON, BUTTONS_X_LEFT-10, BUTTONS_Y_LINE_4 + 3); + pp2d_draw_wtext(BUTTONS_X_LEFT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, start_line); + } + + const wchar_t * select_line = instructions.instructions[BUTTONS_INFO_LINES-1][1]; + if(select_line != NULL) + { + pp2d_draw_texture(TEXTURE_SELECT_BUTTON, BUTTONS_X_RIGHT-10, BUTTONS_Y_LINE_4 + 3); + pp2d_draw_wtext(BUTTONS_X_RIGHT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, select_line); + } +} + +void draw_interface(Entry_List_s* list, EntryMode current_mode) { draw_base_interface(); @@ -240,48 +276,6 @@ void draw_interface(Entry_List_s* list, EntryMode current_mode, bool install_mod utf16_to_utf32((u32*)description, current_entry.desc, 0x80); pp2d_draw_wtext_wrap(20, 65, 0.5, 0.5, COLOR_WHITE, 363, description); - if(install_mode) - { - pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE079 Normal install"); - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE07A Shuffle install"); - - pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE07B BGM-only install"); - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE07C No-BGM install"); - - pp2d_draw_text_center(GFX_TOP, BUTTONS_Y_LINE_1, 0.55, 0.55, COLOR_WHITE, "Release \uE000 to cancel or hold \uE006 and release \uE000 to install"); - } - else - { - switch(current_mode) - { - case MODE_THEMES: - pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE000 Hold to install"); - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE001 Queue shuffle theme"); - - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE003 Preview theme"); - - pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE004 Switch to splashes"); - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE005 Scan QR code"); - break; - case MODE_SPLASHES: - pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE000 Install splash"); - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE001 Delete installed splash"); - - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE003 Preview splash"); - - pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE004 Switch to themes"); - pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE005 Scan QR code"); - break; - default: - break; - } - pp2d_draw_texture(TEXTURE_SELECT_BUTTON, BUTTONS_X_RIGHT-10, BUTTONS_Y_LINE_4 + 3); - pp2d_draw_wtext(BUTTONS_X_RIGHT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, L"Delete from SD"); - } - - pp2d_draw_texture(TEXTURE_START_BUTTON, BUTTONS_X_LEFT-10, BUTTONS_Y_LINE_4 + 3); - pp2d_draw_wtext(BUTTONS_X_LEFT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, L"Exit"); - pp2d_draw_on(GFX_BOTTOM, GFX_LEFT); switch(current_mode) diff --git a/source/main.c b/source/main.c index ce54639..15c9606 100644 --- a/source/main.c +++ b/source/main.c @@ -30,6 +30,7 @@ #include "splashes.h" #include "draw.h" #include "camera.h" +#include "instructions.h" #include "pp2d/pp2d/pp2d.h" #include @@ -157,7 +158,14 @@ int main(void) if(qr_mode) take_picture(); else if(preview_mode) draw_preview(preview_offset); - else draw_interface(current_list, current_mode, install_mode); + else { + draw_interface(current_list, current_mode); + if(install_mode) + draw_instructions(install_instructions); + else + draw_instructions(normal_instructions[current_mode]); + } + pp2d_end_draw(); if(kDown & KEY_START) break;