mirror of
https://github.com/Nightkingale/Wii-U-Account-Swap.git
synced 2026-05-05 20:45:41 -05:00
168 lines
5.4 KiB
C++
168 lines
5.4 KiB
C++
#include <string>
|
|
|
|
#include <coreinit/debug.h>
|
|
#include <coreinit/memory.h>
|
|
#include <nn/act.h>
|
|
#include <padscore/kpad.h>
|
|
#include <SDL2/SDL_ttf.h>
|
|
#include <vpad/input.h>
|
|
|
|
#include <fa-solid-900_ttf.h>
|
|
#include <ter-u32b_bdf.h>
|
|
#include "input.hpp"
|
|
#include "main.hpp"
|
|
#include "unlink.hpp"
|
|
|
|
|
|
void draw_background(int r, int g, int b, int a) {
|
|
SDL_SetRenderDrawColor(renderer, r, g, b, a);
|
|
SDL_RenderClear(renderer);
|
|
}
|
|
|
|
void draw_rectangle(int x, int y, int w, int h, int r, int g, int b, int a) {
|
|
SDL_Rect rect = {x, y, w, h};
|
|
SDL_SetRenderDrawColor(renderer, r, g, b, a);
|
|
SDL_RenderFillRect(renderer, &rect);
|
|
}
|
|
|
|
void draw_text(const char* text, int x, int y, int size, SDL_Color color = {255, 255, 255, 255}) {
|
|
void* font_data = nullptr;
|
|
uint32_t font_size = 0;
|
|
OSGetSharedData(OS_SHAREDDATATYPE_FONT_STANDARD, 0, &font_data, &font_size);
|
|
|
|
TTF_Font* font = TTF_OpenFontRW(SDL_RWFromMem((void*)font_data, font_size), 1, size);
|
|
if (font == NULL) {
|
|
return;
|
|
}
|
|
|
|
SDL_Surface* surface = TTF_RenderText_Blended(font, text, color);
|
|
if (surface == NULL) {
|
|
TTF_CloseFont(font);
|
|
return;
|
|
}
|
|
|
|
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
|
|
if (texture == NULL) {
|
|
SDL_FreeSurface(surface);
|
|
TTF_CloseFont(font);
|
|
return;
|
|
}
|
|
|
|
SDL_Rect rect = {x, y, surface->w, surface->h};
|
|
SDL_RenderCopy(renderer, texture, NULL, &rect);
|
|
|
|
SDL_DestroyTexture(texture);
|
|
SDL_FreeSurface(surface);
|
|
TTF_CloseFont(font);
|
|
}
|
|
|
|
int get_text_width(const char* text, int size) {
|
|
void* font_data = nullptr;
|
|
uint32_t font_size = 0;
|
|
OSGetSharedData(OS_SHAREDDATATYPE_FONT_STANDARD, 0, &font_data, &font_size);
|
|
|
|
TTF_Font* font = TTF_OpenFontRW(SDL_RWFromMem((void*)font_data, font_size), 1, size);
|
|
if (font == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
int width = 0;
|
|
int height = 0;
|
|
TTF_SizeText(font, text, &width, &height);
|
|
|
|
TTF_CloseFont(font);
|
|
return width;
|
|
}
|
|
|
|
void draw_screen_bars() {
|
|
draw_rectangle(0, 0, 1920, 90, 125, 0, 125, 255);
|
|
draw_text("Wii U Account Swap", 64, 10, 50);
|
|
draw_text(APP_VERSION, 64 + get_text_width("Wii U Account Swap", 50) + 16, 10, 50, {176, 176, 176, 255});
|
|
draw_text("Nightkingale", 1920 - 64 - get_text_width("Nightkingale", 50), 10, 50);
|
|
|
|
draw_rectangle(0, 940, 1920, 140, 125, 0, 125, 255);
|
|
draw_text("Current User: ", 64, 955, 40);
|
|
draw_text(MII_NICKNAME.c_str(), 64 + get_text_width("Current User: ", 40), 955, 40, {176, 176, 176, 255});
|
|
draw_text(ACCOUNT_FILE.c_str(), 64, 1005, 40);
|
|
}
|
|
|
|
void draw_confirm_button(const char* text) {
|
|
draw_rectangle(64, 760, 896, 100, 100, 100, 255, 255);
|
|
draw_rectangle(69, 765, 886, 90, 0, 0, 0, 255);
|
|
draw_text(text, 93, 780, 50);
|
|
}
|
|
|
|
void draw_menu_screen(int selected_menu_item) {
|
|
draw_background(16, 16, 16, 255);
|
|
draw_screen_bars();
|
|
|
|
const char* menu_options[] = {
|
|
"Switch to Nintendo Network ID",
|
|
"Switch to Pretendo Network ID",
|
|
"Backup Current Account",
|
|
"Unlink Network ID (Local-Only)"
|
|
};
|
|
const int NUM_MENU_ITEMS = sizeof(menu_options) / sizeof(menu_options[0]);
|
|
|
|
for (int i = 0; i < NUM_MENU_ITEMS; i++) {
|
|
if (i == selected_menu_item) {
|
|
// Draw black rectangle with blue border behind selected option
|
|
draw_rectangle(64, 135 + i * 120, 1797, 110, 100, 100, 255, 255); // blue border
|
|
draw_rectangle(69, 140 + i * 120, 1787, 100, 0, 0, 0, 255); // black rectangle
|
|
}
|
|
draw_text(menu_options[i], 93, 160 + i * 120, 50);
|
|
}
|
|
|
|
SDL_RenderPresent(renderer);
|
|
}
|
|
|
|
void draw_unlink_menu() {
|
|
draw_background(16, 16, 16, 255);
|
|
draw_screen_bars();
|
|
|
|
draw_text("Unlinking: Please read the following and confirm!", 64, 160, 50, {176, 176, 176, 255});
|
|
|
|
draw_text("This will unlink your Network ID from this user.", 64, 270, 50);
|
|
draw_text("You can reattach this account to any user on this Wii U,", 64, 330, 50);
|
|
draw_text("or attach a new account to this user.", 64, 390, 50);
|
|
|
|
draw_text("However, this unlink will not take place on the server.", 64, 510, 50);
|
|
draw_text("You won't be able to use this account on any other Wii U.", 64, 570, 50);
|
|
|
|
draw_confirm_button("Confirm Unlink");
|
|
|
|
SDL_RenderPresent(renderer);
|
|
}
|
|
|
|
void draw_backup_menu() {
|
|
draw_background(16, 16, 16, 255);
|
|
draw_screen_bars();
|
|
|
|
draw_text("Backup: Please read the following and confirm!", 64, 160, 50, {176, 176, 176, 255});
|
|
|
|
draw_text("This will backup your current account.dat file.", 64, 270, 50);
|
|
draw_text("The account.dat may contain sensitive personal", 64, 330, 50);
|
|
draw_text("information, such as your e-mail address and encrypted", 64, 390, 50);
|
|
draw_text("cached password (if you have chosen to save it).", 64, 450, 50);
|
|
|
|
draw_text("Please do not share these backups with anyone else!", 64, 560, 50);
|
|
|
|
draw_confirm_button("Confirm Backup");
|
|
|
|
SDL_RenderPresent(renderer);
|
|
}
|
|
|
|
void draw_overwrite_menu(const char* backup_path) {
|
|
draw_background(16, 16, 16, 255);
|
|
draw_screen_bars();
|
|
|
|
draw_text("Backup: Please read the following and confirm!", 64, 160, 50);
|
|
|
|
draw_text("This will overwrite the existing backup file:", 64, 270, 50);
|
|
draw_text(backup_path, 64, 330, 50);
|
|
draw_text("Are you sure you want to overwrite this file?", 64, 390, 50);
|
|
|
|
draw_confirm_button("Confirm Overwrite");
|
|
|
|
SDL_RenderPresent(renderer);
|
|
} |