General instructions-drawing function (#111)

1 info line above, 4 rows, 2 columns.
This commit is contained in:
LiquidFenrir
2017-12-10 18:19:26 +01:00
committed by GitHub
parent cb88c7e2dc
commit 6eabfc84ab
4 changed files with 156 additions and 48 deletions

View File

@@ -50,12 +50,13 @@ typedef enum {
#define BUTTONS_START_Y 130 #define BUTTONS_START_Y 130
#define BUTTONS_STEP 22 #define BUTTONS_STEP 22
#define BUTTONS_INFO_LINES 4
#define BUTTONS_INFO_COLUNMNS 2
enum { enum {
BUTTONS_Y_INFO = BUTTONS_START_Y+5,
BUTTONS_Y_LINE_1 = BUTTONS_START_Y + BUTTONS_STEP*1, 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_2 = BUTTONS_START_Y + BUTTONS_STEP*2,
BUTTONS_Y_LINE_3 = BUTTONS_START_Y + BUTTONS_STEP*3, BUTTONS_Y_LINE_3 = BUTTONS_START_Y + BUTTONS_STEP*3,
BUTTONS_Y_LINE_4 = BUTTONS_START_Y + BUTTONS_STEP*4, BUTTONS_Y_LINE_4 = BUTTONS_START_Y + BUTTONS_STEP*4,
@@ -64,6 +65,11 @@ enum {
BUTTONS_X_RIGHT = 200, BUTTONS_X_RIGHT = 200,
} ButtonPos; } 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 init_screens(void);
void exit_screens(void); void exit_screens(void);
@@ -74,6 +80,7 @@ void draw_preview(int preview_offset);
void draw_install(InstallType type); 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 #endif

99
include/instructions.h Normal file
View File

@@ -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 <http://www.gnu.org/licenses/>.
*
* 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

View File

@@ -196,7 +196,43 @@ void draw_install(InstallType type)
pp2d_end_draw(); 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(); 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); utf16_to_utf32((u32*)description, current_entry.desc, 0x80);
pp2d_draw_wtext_wrap(20, 65, 0.5, 0.5, COLOR_WHITE, 363, description); 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); pp2d_draw_on(GFX_BOTTOM, GFX_LEFT);
switch(current_mode) switch(current_mode)

View File

@@ -30,6 +30,7 @@
#include "splashes.h" #include "splashes.h"
#include "draw.h" #include "draw.h"
#include "camera.h" #include "camera.h"
#include "instructions.h"
#include "pp2d/pp2d/pp2d.h" #include "pp2d/pp2d/pp2d.h"
#include <time.h> #include <time.h>
@@ -157,7 +158,14 @@ int main(void)
if(qr_mode) take_picture(); if(qr_mode) take_picture();
else if(preview_mode) draw_preview(preview_offset); 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(); pp2d_end_draw();
if(kDown & KEY_START) break; if(kDown & KEY_START) break;