Button prompt images
* Show button prompt images instead of text * Unsupported files show yellow triangles to the left of them * Change from Arial to Roboto font
4
Makefile
|
@ -46,7 +46,7 @@ ROMFS := romfs
|
||||||
|
|
||||||
VERSION_MAJOR := 0
|
VERSION_MAJOR := 0
|
||||||
VERSION_MINOR := 2
|
VERSION_MINOR := 2
|
||||||
VERSION_MICRO := 1
|
VERSION_MICRO := 2
|
||||||
|
|
||||||
APP_TITLE := eBookReader
|
APP_TITLE := eBookReader
|
||||||
APP_AUTHOR := SeanOMik
|
APP_AUTHOR := SeanOMik
|
||||||
|
@ -63,7 +63,7 @@ CFLAGS := -g -std=c++17 -Wall -O2 -ffunction-sections \
|
||||||
|
|
||||||
CFLAGS += -D__SWITCH__ $(INCLUDE) `sdl2-config --cflags`
|
CFLAGS += -D__SWITCH__ $(INCLUDE) `sdl2-config --cflags`
|
||||||
|
|
||||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -DDEBUG=1 -DEXPERIMENTAL=1
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions #-DDEBUG=1 -DEXPERIMENTAL=1
|
||||||
|
|
||||||
ASFLAGS := -g $(ARCH)
|
ASFLAGS := -g $(ARCH)
|
||||||
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
|
@ -8,6 +8,6 @@
|
||||||
extern SDL_Window *WINDOW;
|
extern SDL_Window *WINDOW;
|
||||||
//extern SDL_Surface *WINDOW_SURFACE;
|
//extern SDL_Surface *WINDOW_SURFACE;
|
||||||
extern SDL_Renderer *RENDERER;
|
extern SDL_Renderer *RENDERER;
|
||||||
extern TTF_Font *ARIAL, *ARIAL_35, *ARIAL_30, *ARIAL_27, *ARIAL_25, *ARIAL_20, *ARIAL_15;
|
extern TTF_Font *ROBOTO_35, *ROBOTO_30, *ROBOTO_27, *ROBOTO_25, *ROBOTO_20, *ROBOTO_15;
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -36,11 +36,12 @@ void SDL_DrawCircle(SDL_Renderer *renderer, int x, int y, int r, SDL_Color colou
|
||||||
void SDL_DrawText(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Color colour, const char *text);
|
void SDL_DrawText(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Color colour, const char *text);
|
||||||
void SDL_DrawRotatedText(SDL_Renderer *renderer, TTF_Font *font, double rotation, int x, int y, SDL_Color colour, const char *text);
|
void SDL_DrawRotatedText(SDL_Renderer *renderer, TTF_Font *font, double rotation, int x, int y, SDL_Color colour, const char *text);
|
||||||
void SDL_DrawTextf(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Color colour, const char* text, ...);
|
void SDL_DrawTextf(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Color colour, const char* text, ...);
|
||||||
//void SDL_LoadImage(SDL_Renderer *renderer, SDL_Texture **texture, char *path);
|
|
||||||
void SDL_LoadImage(SDL_Texture **texture, char *path);
|
void SDL_LoadImage(SDL_Texture **texture, char *path);
|
||||||
void SDL_LoadImageBuf(SDL_Renderer *renderer, SDL_Texture **texture, void *mem, int size);
|
void SDL_LoadImageBuf(SDL_Renderer *renderer, SDL_Texture **texture, void *mem, int size);
|
||||||
void SDL_DrawImage(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y);
|
void SDL_DrawImage(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y);
|
||||||
void SDL_DrawImageScale(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y, int w, int h);
|
void SDL_DrawImageScale(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y, int w, int h);
|
||||||
|
void SDL_DrawButtonPrompt(SDL_Renderer *renderer, SDL_Texture *texture, TTF_Font *font, SDL_Color textColor, const char* text, int x, int y, int imageW, int imageH, int imageDistance, int yTextOffset);
|
||||||
|
void SDL_DrawHorizonalAlignedImageText (SDL_Renderer *renderer, SDL_Texture *texture, TTF_Font *font, SDL_Color textColor, const char* text, int x, int y, int imageW, int imageH, int imageDistance, int yTextOffset);
|
||||||
void SDL_InvertSurfaceColor(SDL_Surface *surface);
|
void SDL_InvertSurfaceColor(SDL_Surface *surface);
|
||||||
Uint32 SDL_GetPixel32(SDL_Surface *surface, int x, int y);
|
Uint32 SDL_GetPixel32(SDL_Surface *surface, int x, int y);
|
||||||
void SDL_PutPixel32(SDL_Surface *surface, int x, int y, Uint32 pixel);
|
void SDL_PutPixel32(SDL_Surface *surface, int x, int y, Uint32 pixel);
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
extern SDL_Texture *battery_20, *battery_20_charging, *battery_30, *battery_30_charging, *battery_50, *battery_50_charging, \
|
extern SDL_Texture *battery_20, *battery_20_charging, *battery_30, *battery_30_charging, *battery_50, *battery_50_charging, \
|
||||||
*battery_60, *battery_60_charging, *battery_80, *battery_80_charging, *battery_90, *battery_90_charging, \
|
*battery_60, *battery_60_charging, *battery_80, *battery_80_charging, *battery_90, *battery_90_charging, \
|
||||||
*battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning, *button_a, *button_b, \
|
*battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning, *button_a, *button_b, \
|
||||||
*button_x, *button_y, *button_down, *button_up, *button_left, *button_right, *button_lb, *button_rb, *button_lt, \
|
*button_x, *button_y, *button_dpad_up_down, *button_dpad_left_right, *button_lb, *button_rb, *button_lt, \
|
||||||
*button_rt, *button_minus, *button_plus, *button_capture, *button_home;
|
*button_rt, *button_minus, *button_plus, *left_stick_up_down, *right_stick_up_down;
|
||||||
|
|
||||||
void Textures_Load(void);
|
void Textures_Load(void);
|
||||||
void Textures_Free(void);
|
void Textures_Free(void);
|
||||||
|
|
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.3 KiB |
|
@ -87,4 +87,21 @@ void SDL_DrawImageScale(SDL_Renderer *renderer, SDL_Texture *texture, int x, int
|
||||||
SDL_Rect position;
|
SDL_Rect position;
|
||||||
position.x = x; position.y = y; position.w = w; position.h = h;
|
position.x = x; position.y = y; position.w = w; position.h = h;
|
||||||
SDL_RenderCopy(renderer, texture, NULL, &position);
|
SDL_RenderCopy(renderer, texture, NULL, &position);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDL_DrawButtonPrompt(SDL_Renderer *renderer, SDL_Texture *texture, TTF_Font *font, SDL_Color textColor, const char* text, int x, int y, int imageW, int imageH, int imageDistance, int yTextOffset) {
|
||||||
|
int textWidth, textHeight;
|
||||||
|
TTF_SizeText(ROBOTO_20, text, &textWidth, &textHeight);
|
||||||
|
|
||||||
|
int imageX = x;
|
||||||
|
int imageY = y - imageH;
|
||||||
|
SDL_DrawImageScale(RENDERER, texture, imageX, imageY, imageW, imageH);
|
||||||
|
|
||||||
|
int textX = x + imageDistance + imageW;
|
||||||
|
int textY = y - (imageH * 0.85) - yTextOffset; // 0.85 was retreived from trail and error when trying to center the text with the image.
|
||||||
|
SDL_DrawText(RENDERER, ROBOTO_20, textX, textY, textColor, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDL_DrawHorizonalAlignedImageText (SDL_Renderer *renderer, SDL_Texture *texture, TTF_Font *font, SDL_Color textColor, const char* text, int x, int y, int imageW, int imageH, int imageDistance, int yTextOffset) {
|
||||||
|
SDL_DrawButtonPrompt(renderer, texture, font, textColor, text, x, y, imageW, imageH, imageDistance, yTextOffset);
|
||||||
}
|
}
|
|
@ -23,7 +23,7 @@ extern "C" {
|
||||||
SDL_Renderer* RENDERER;
|
SDL_Renderer* RENDERER;
|
||||||
SDL_Window* WINDOW;
|
SDL_Window* WINDOW;
|
||||||
SDL_Event EVENT;
|
SDL_Event EVENT;
|
||||||
TTF_Font *ARIAL, *ARIAL_35, *ARIAL_30, *ARIAL_27, *ARIAL_25, *ARIAL_20, *ARIAL_15;
|
TTF_Font *ROBOTO_35, *ROBOTO_30, *ROBOTO_27, *ROBOTO_25, *ROBOTO_20, *ROBOTO_15;
|
||||||
bool configDarkMode;
|
bool configDarkMode;
|
||||||
bool run = true;
|
bool run = true;
|
||||||
|
|
||||||
|
@ -32,13 +32,12 @@ void Term_Services() {
|
||||||
run = false;
|
run = false;
|
||||||
|
|
||||||
timeExit();
|
timeExit();
|
||||||
TTF_CloseFont(ARIAL_35);
|
TTF_CloseFont(ROBOTO_35);
|
||||||
TTF_CloseFont(ARIAL_30);
|
TTF_CloseFont(ROBOTO_30);
|
||||||
TTF_CloseFont(ARIAL_27);
|
TTF_CloseFont(ROBOTO_27);
|
||||||
TTF_CloseFont(ARIAL_25);
|
TTF_CloseFont(ROBOTO_25);
|
||||||
TTF_CloseFont(ARIAL_20);
|
TTF_CloseFont(ROBOTO_20);
|
||||||
TTF_CloseFont(ARIAL_15);
|
TTF_CloseFont(ROBOTO_15);
|
||||||
TTF_CloseFont(ARIAL);
|
|
||||||
TTF_Quit();
|
TTF_Quit();
|
||||||
|
|
||||||
Textures_Free();
|
Textures_Free();
|
||||||
|
@ -96,19 +95,16 @@ void Init_Services() {
|
||||||
}
|
}
|
||||||
std::cout << "Initalized TTF" << std::endl;
|
std::cout << "Initalized TTF" << std::endl;
|
||||||
|
|
||||||
#ifdef EXPERIMENTAL
|
Textures_Load();
|
||||||
std::cout << "Loading Textures" << std::endl;
|
std::cout << "Loaded Textures" << std::endl;
|
||||||
Textures_Load();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ARIAL_35 = TTF_OpenFont("romfs:/resources/font/arial.ttf", 35);
|
ROBOTO_35 = TTF_OpenFont("romfs:/resources/font/Roboto-Light.ttf", 35);
|
||||||
ARIAL_30 = TTF_OpenFont("romfs:/resources/font/arial.ttf", 30);
|
ROBOTO_30 = TTF_OpenFont("romfs:/resources/font/Roboto-Light.ttf", 30);
|
||||||
ARIAL_27 = TTF_OpenFont("romfs:/resources/font/arial.ttf", 27);
|
ROBOTO_27 = TTF_OpenFont("romfs:/resources/font/Roboto-Light.ttf", 27);
|
||||||
ARIAL_25 = TTF_OpenFont("romfs:/resources/font/arial.ttf", 25);
|
ROBOTO_25 = TTF_OpenFont("romfs:/resources/font/Roboto-Light.ttf", 25);
|
||||||
ARIAL_20 = TTF_OpenFont("romfs:/resources/font/arial.ttf", 20);
|
ROBOTO_20 = TTF_OpenFont("romfs:/resources/font/Roboto-Light.ttf", 20);
|
||||||
ARIAL_15 = TTF_OpenFont("romfs:/resources/font/arial.ttf", 15);
|
ROBOTO_15 = TTF_OpenFont("romfs:/resources/font/Roboto-Light.ttf", 15);
|
||||||
ARIAL = TTF_OpenFont("romfs:/resources/font/arial.ttf", 20);
|
if (!ROBOTO_35 || !ROBOTO_25 || !ROBOTO_15) {
|
||||||
if (!ARIAL_35 || !ARIAL_25 || !ARIAL_15 || !ARIAL) {
|
|
||||||
std::cout << "Failure to retrieve fonts" << std::endl;
|
std::cout << "Failure to retrieve fonts" << std::endl;
|
||||||
Term_Services();
|
Term_Services();
|
||||||
}
|
}
|
||||||
|
@ -131,7 +127,9 @@ void Init_Services() {
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
Init_Services();
|
Init_Services();
|
||||||
|
|
||||||
Menu_StartChoosing();
|
if (run) {
|
||||||
|
Menu_StartChoosing();
|
||||||
|
}
|
||||||
|
|
||||||
Term_Services();
|
Term_Services();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -22,7 +22,7 @@ template <typename T> bool contains(list<T> & listOfElements, const T & element)
|
||||||
return it != listOfElements.end();
|
return it != listOfElements.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern TTF_Font *ARIAL, *ARIAL_35, *ARIAL_25, *ARIAL_15;
|
extern TTF_Font *ROBOTO_35, *ROBOTO_25, *ROBOTO_15;
|
||||||
|
|
||||||
void Menu_StartChoosing() {
|
void Menu_StartChoosing() {
|
||||||
int choosenIndex = 0;
|
int choosenIndex = 0;
|
||||||
|
@ -129,8 +129,13 @@ void Menu_StartChoosing() {
|
||||||
configDarkMode = !configDarkMode;
|
configDarkMode = !configDarkMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, windowX - 123, windowY - 45, textColor, "\"B\" - Exit");
|
int exitWidth = 0;
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, windowX - 200, windowY - 80, textColor, "\"-\" - Switch theme");
|
TTF_SizeText(ROBOTO_20, "Exit", &exitWidth, NULL);
|
||||||
|
SDL_DrawButtonPrompt(RENDERER, button_b, ROBOTO_20, textColor, "Exit", windowX - exitWidth - 50, windowY - 10, 35, 35, 5, 0);
|
||||||
|
|
||||||
|
int themeWidth = 0;
|
||||||
|
TTF_SizeText(ROBOTO_20, "Switch Theme", &themeWidth, NULL);
|
||||||
|
SDL_DrawButtonPrompt(RENDERER, button_minus, ROBOTO_20, textColor, "Switch Theme", windowX - themeWidth - 50, windowY - 40, 35, 35, 5, 0);
|
||||||
|
|
||||||
int choosingIndex = 0;
|
int choosingIndex = 0;
|
||||||
for (const auto & entry : fs::directory_iterator(path)) {
|
for (const auto & entry : fs::directory_iterator(path)) {
|
||||||
|
@ -142,13 +147,11 @@ void Menu_StartChoosing() {
|
||||||
SDL_DrawRect(RENDERER, 15, 15 + (40 * choosingIndex), 1265, 40, configDarkMode ? SELECTOR_COLOUR_DARK : SELECTOR_COLOUR_LIGHT);
|
SDL_DrawRect(RENDERER, 15, 15 + (40 * choosingIndex), 1265, 40, configDarkMode ? SELECTOR_COLOUR_DARK : SELECTOR_COLOUR_LIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EXPERIMENTAL
|
if (contains(warnedExtentions, extention)) {
|
||||||
if (contains(warnedExtentions, extention)) {
|
SDL_DrawImage(RENDERER, warning, 25, 18 + (40 * choosingIndex));
|
||||||
SDL_DrawImage(RENDERER, warning, 25, 18 + (40 * choosingIndex));
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, 70, 20 + (40 * choosingIndex), textColor, entry.path().filename().c_str());
|
SDL_DrawText(RENDERER, ROBOTO_25, 70, 20 + (40 * choosingIndex), textColor, entry.path().filename().c_str());
|
||||||
|
|
||||||
if (isWarningOnScreen) {
|
if (isWarningOnScreen) {
|
||||||
if (!configDarkMode) { // Display a dimmed background if on light mode
|
if (!configDarkMode) { // Display a dimmed background if on light mode
|
||||||
|
@ -156,10 +159,10 @@ void Menu_StartChoosing() {
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_DrawRect(RENDERER, (windowX - warningWidth) / 2, (windowY - warningHeight) / 2, warningWidth, warningHeight, configDarkMode ? HINT_COLOUR_DARK : HINT_COLOUR_LIGHT);
|
SDL_DrawRect(RENDERER, (windowX - warningWidth) / 2, (windowY - warningHeight) / 2, warningWidth, warningHeight, configDarkMode ? HINT_COLOUR_DARK : HINT_COLOUR_LIGHT);
|
||||||
SDL_DrawText(RENDERER, ARIAL_30, (windowX - warningWidth) / 2 + 15, (windowY - warningHeight) / 2 + 15, textColor, "This file is not yet fully supported, and may");
|
SDL_DrawText(RENDERER, ROBOTO_30, (windowX - warningWidth) / 2 + 15, (windowY - warningHeight) / 2 + 15, textColor, "This file is not yet fully supported, and may");
|
||||||
SDL_DrawText(RENDERER, ARIAL_30, (windowX - warningWidth) / 2 + 15, (windowY - warningHeight) / 2 + 50, textColor, "cause a system, or app crash.");
|
SDL_DrawText(RENDERER, ROBOTO_30, (windowX - warningWidth) / 2 + 15, (windowY - warningHeight) / 2 + 50, textColor, "cause a system, or app crash.");
|
||||||
SDL_DrawText(RENDERER, ARIAL_20, (windowX - warningWidth) / 2 + warningWidth - 250, (windowY - warningHeight) / 2 + warningHeight - 30, textColor, "\"A\" - Read");
|
SDL_DrawText(RENDERER, ROBOTO_20, (windowX - warningWidth) / 2 + warningWidth - 250, (windowY - warningHeight) / 2 + warningHeight - 30, textColor, "\"A\" - Read");
|
||||||
SDL_DrawText(RENDERER, ARIAL_20, (windowX - warningWidth) / 2 + warningWidth - 125, (windowY - warningHeight) / 2 + warningHeight - 30, textColor, "\"B\" - Cancel.");
|
SDL_DrawText(RENDERER, ROBOTO_20, (windowX - warningWidth) / 2 + warningWidth - 125, (windowY - warningHeight) / 2 + warningHeight - 30, textColor, "\"B\" - Cancel.");
|
||||||
}
|
}
|
||||||
|
|
||||||
choosingIndex++;
|
choosingIndex++;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#include "BookReader.hpp"
|
#include "BookReader.hpp"
|
||||||
#include "PageLayout.hpp"
|
#include "PageLayout.hpp"
|
||||||
#include "LandscapePageLayout.hpp"
|
#include "LandscapePageLayout.hpp"
|
||||||
#include "common.h"
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <libconfig.h>
|
#include <libconfig.h>
|
||||||
|
@ -10,6 +9,8 @@ extern "C" {
|
||||||
#include "SDL_helper.h"
|
#include "SDL_helper.h"
|
||||||
#include "status_bar.h"
|
#include "status_bar.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "textures.h"
|
||||||
|
#include "common.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
fz_context *ctx = NULL;
|
fz_context *ctx = NULL;
|
||||||
|
@ -147,6 +148,7 @@ void BookReader::draw(bool drawHelp) {
|
||||||
if (drawHelp) { // Help menu
|
if (drawHelp) { // Help menu
|
||||||
int helpWidth = 680;
|
int helpWidth = 680;
|
||||||
int helpHeight = 365;
|
int helpHeight = 365;
|
||||||
|
helpHeight -= 38; // Removed due to removing the skip forward page button prompt.
|
||||||
|
|
||||||
if (!configDarkMode) { // Display a dimmed background if on light mode
|
if (!configDarkMode) { // Display a dimmed background if on light mode
|
||||||
SDL_DrawRect(RENDERER, 0, 0, 1280, 720, SDL_MakeColour(50, 50, 50, 150));
|
SDL_DrawRect(RENDERER, 0, 0, 1280, 720, SDL_MakeColour(50, 50, 50, 150));
|
||||||
|
@ -154,39 +156,39 @@ void BookReader::draw(bool drawHelp) {
|
||||||
|
|
||||||
SDL_DrawRect(RENDERER, (windowX - helpWidth) / 2, (windowY - helpHeight) / 2, helpWidth, helpHeight, configDarkMode ? HINT_COLOUR_DARK : HINT_COLOUR_LIGHT);
|
SDL_DrawRect(RENDERER, (windowX - helpWidth) / 2, (windowY - helpHeight) / 2, helpWidth, helpHeight, configDarkMode ? HINT_COLOUR_DARK : HINT_COLOUR_LIGHT);
|
||||||
|
|
||||||
// These already have margin added to them
|
|
||||||
int textX = (windowX - helpWidth) / 2 + 20;
|
int textX = (windowX - helpWidth) / 2 + 20;
|
||||||
int textY = (windowY - helpHeight) / 2 + 75;
|
int textY = (windowY - helpHeight) / 2 + 87;
|
||||||
SDL_DrawText(RENDERER, ARIAL_30, textX, (windowY - helpHeight) / 2 + 10, configDarkMode ? WHITE : BLACK, "Help Menu:");
|
SDL_Color textColor = configDarkMode ? WHITE : BLACK;
|
||||||
|
SDL_DrawText(RENDERER, ROBOTO_30, textX, (windowY - helpHeight) / 2 + 10, textColor, "Help Menu:");
|
||||||
|
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY, configDarkMode ? WHITE : BLACK, "\"B\" - Stop reading / Close help menu.");
|
SDL_DrawButtonPrompt(RENDERER, button_b, ROBOTO_25, textColor, "Stop reading / Close help menu.", textX, textY, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35, configDarkMode ? WHITE : BLACK, "\"-\" - Switch to dark/light theme.");
|
SDL_DrawButtonPrompt(RENDERER, button_minus, ROBOTO_25, textColor, "Switch to dark/light theme.", textX, textY + 38, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35 * 2, configDarkMode ? WHITE : BLACK, "\"Right Stick Up/Down\" - Zoom in/out.");
|
SDL_DrawButtonPrompt(RENDERER, right_stick_up_down, ROBOTO_25, textColor, "Zoom in/out.", textX, textY + 38 * 2, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35 * 3, configDarkMode ? WHITE : BLACK, "\"Left Stick Up/Down\" - Page up/down.");
|
SDL_DrawButtonPrompt(RENDERER, left_stick_up_down, ROBOTO_25, textColor, "Page up/down.", textX, textY + 38 * 3, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35 * 4, configDarkMode ? WHITE : BLACK, "\"Y\" - Rotate page.");
|
SDL_DrawButtonPrompt(RENDERER, button_y, ROBOTO_25, textColor, "Rotate page.", textX, textY + 38 * 4, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35 * 5, configDarkMode ? WHITE : BLACK, "\"X\" - Keep status bar on.");
|
SDL_DrawButtonPrompt(RENDERER, button_x, ROBOTO_25, textColor, "Keep status bar on.", textX, textY + 38 * 5, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35 * 6, configDarkMode ? WHITE : BLACK, "\"Left/Right DPad\" - Next/previous page.");
|
SDL_DrawButtonPrompt(RENDERER, button_dpad_left_right, ROBOTO_25, textColor, "Next/previous page.", textX, textY + 38 * 6, 35, 35, 5, 0);
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, textX, textY + 35 * 7, configDarkMode ? WHITE : BLACK, "\"Left/Right Bumper\" - Skip forward/backward 10 pages.");
|
//SDL_DrawButtonPrompt(RENDERER, button_dpad_up_down, ROBOTO_25, textColor, "Skip forward/backward 10 pages.", textX, textY + 38 * 7, 35, 35, 5, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permStatusBar || --status_bar_visible_counter > 0) {
|
if (permStatusBar || --status_bar_visible_counter > 0) {
|
||||||
char *title = layout->info();
|
char *title = layout->info();
|
||||||
|
|
||||||
int title_width = 0, title_height = 0;
|
int title_width = 0, title_height = 0;
|
||||||
TTF_SizeText(ARIAL_15, title, &title_width, &title_height);
|
TTF_SizeText(ROBOTO_15, title, &title_width, &title_height);
|
||||||
|
|
||||||
SDL_Color color = configDarkMode ? STATUS_BAR_DARK : STATUS_BAR_LIGHT;
|
SDL_Color color = configDarkMode ? STATUS_BAR_DARK : STATUS_BAR_LIGHT;
|
||||||
|
|
||||||
if (_currentPageLayout == BookPageLayoutPortrait) {
|
if (_currentPageLayout == BookPageLayoutPortrait) {
|
||||||
SDL_DrawRect(RENDERER, 0, 0, 1280, 45, SDL_MakeColour(color.r, color.g, color.b , 180));
|
SDL_DrawRect(RENDERER, 0, 0, 1280, 45, SDL_MakeColour(color.r, color.g, color.b , 180));
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, (1280 - title_width) / 2, (40 - title_height) / 2, WHITE, title);
|
SDL_DrawText(RENDERER, ROBOTO_25, (1280 - title_width) / 2, (40 - title_height) / 2, WHITE, title);
|
||||||
|
|
||||||
StatusBar_DisplayTime(false);
|
StatusBar_DisplayTime(false);
|
||||||
} else if (_currentPageLayout == BookPageLayoutLandscape) {
|
} else if (_currentPageLayout == BookPageLayoutLandscape) {
|
||||||
SDL_DrawRect(RENDERER, 1280 - 45, 0, 45, 720, SDL_MakeColour(color.r, color.g, color.b , 180));
|
SDL_DrawRect(RENDERER, 1280 - 45, 0, 45, 720, SDL_MakeColour(color.r, color.g, color.b , 180));
|
||||||
int x = (1280 - title_width) - ((40 - title_height) / 2);
|
int x = (1280 - title_width) - ((40 - title_height) / 2);
|
||||||
int y = (720 - title_height) / 2;
|
int y = (720 - title_height) / 2;
|
||||||
SDL_DrawRotatedText(RENDERER, ARIAL_25, (double) 90, x, y, WHITE, title);
|
SDL_DrawRotatedText(RENDERER, ROBOTO_25, (double) 90, x, y, WHITE, title);
|
||||||
|
|
||||||
StatusBar_DisplayTime(true);
|
StatusBar_DisplayTime(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,88 +41,103 @@ static void StatusBar_GetBatteryStatus(int x, int y) {
|
||||||
state = 0;
|
state = 0;
|
||||||
|
|
||||||
if (R_SUCCEEDED(psmGetBatteryChargePercentage(&percent))) {
|
if (R_SUCCEEDED(psmGetBatteryChargePercentage(&percent))) {
|
||||||
|
SDL_Texture *batteryImage;
|
||||||
if (percent < 20) {
|
if (percent < 20) {
|
||||||
SDL_DrawImage(RENDERER, battery_low, x, 3);
|
//SDL_DrawImage(RENDERER, battery_low, x, 3);
|
||||||
|
batteryImage = battery_low;
|
||||||
} else if ((percent >= 20) && (percent < 30)) {
|
} else if ((percent >= 20) && (percent < 30)) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_20_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_20_charging, x, 3);
|
||||||
|
batteryImage = battery_20_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_20, x, 3);
|
//SDL_DrawImage(RENDERER, battery_20, x, 3);
|
||||||
|
batteryImage = battery_20;
|
||||||
}
|
}
|
||||||
} else if ((percent >= 30) && (percent < 50)) {
|
} else if ((percent >= 30) && (percent < 50)) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_50_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_50_charging, x, 3);
|
||||||
|
batteryImage = battery_50_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_50, x, 3);
|
//SDL_DrawImage(RENDERER, battery_50, x, 3);
|
||||||
|
batteryImage = battery_50;
|
||||||
}
|
}
|
||||||
} else if ((percent >= 50) && (percent < 60)) {
|
} else if ((percent >= 50) && (percent < 60)) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_50_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_50_charging, x, 3);
|
||||||
|
batteryImage = battery_50_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_50, x, 3);
|
//SDL_DrawImage(RENDERER, battery_50, x, 3);
|
||||||
|
batteryImage = battery_50;
|
||||||
}
|
}
|
||||||
} else if ((percent >= 60) && (percent < 80)) {
|
} else if ((percent >= 60) && (percent < 80)) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_60_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_60_charging, x, 3);
|
||||||
|
batteryImage = battery_60_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_60, x, 3);
|
//SDL_DrawImage(RENDERER, battery_60, x, 3);
|
||||||
|
batteryImage = battery_60;
|
||||||
}
|
}
|
||||||
} else if ((percent >= 80) && (percent < 90)) {
|
} else if ((percent >= 80) && (percent < 90)) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_80_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_80_charging, x, 3);
|
||||||
|
batteryImage = battery_80_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_80, x, 3);
|
//SDL_DrawImage(RENDERER, battery_80, x, 3);
|
||||||
|
batteryImage = battery_80;
|
||||||
}
|
}
|
||||||
} else if ((percent >= 90) && (percent < 100)) {
|
} else if ((percent >= 90) && (percent < 100)) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_90_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_90_charging, x, 3);
|
||||||
|
batteryImage = battery_90_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_90, x, 3);
|
//SDL_DrawImage(RENDERER, battery_90, x, 3);
|
||||||
|
batteryImage = battery_90;
|
||||||
}
|
}
|
||||||
} else if (percent == 100) {
|
} else if (percent == 100) {
|
||||||
if (state != 0) {
|
if (state != 0) {
|
||||||
SDL_DrawImage(RENDERER, battery_full_charging, x, 3);
|
//SDL_DrawImage(RENDERER, battery_full_charging, x, 3);
|
||||||
|
batteryImage = battery_full_charging;
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawImage(RENDERER, battery_full, x, 3);
|
//SDL_DrawImage(RENDERER, battery_full, x, 3);
|
||||||
|
batteryImage = battery_full;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(buf, 5, "%d%%", percent);
|
snprintf(buf, 5, "%d%%", percent);
|
||||||
TTF_SizeText(ARIAL_20, buf, &width, NULL);
|
TTF_SizeText(ROBOTO_20, buf, &width, NULL);
|
||||||
SDL_DrawText(RENDERER, ARIAL_20, (x + width + 5), y, WHITE, buf);
|
SDL_DrawHorizonalAlignedImageText(RENDERER, batteryImage, ROBOTO_20, WHITE, buf, (x + width + 5), y, 34, 34, -2, -7);
|
||||||
|
//SDL_DrawText(RENDERER, ROBOTO_20, (x + width + 5), y, WHITE, buf);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buf, 5, "%d%%", percent);
|
snprintf(buf, 5, "%d%%", percent);
|
||||||
TTF_SizeText(ARIAL_20, buf, &width, NULL);
|
TTF_SizeText(ROBOTO_20, buf, &width, NULL);
|
||||||
SDL_DrawText(RENDERER, ARIAL_20, (x + width + 5), y, WHITE, buf);
|
SDL_DrawHorizonalAlignedImageText(RENDERER, battery_unknown, ROBOTO_20, WHITE, buf, x, y, 34, 34, -2, -7);
|
||||||
SDL_DrawImage(RENDERER, battery_unknown, x, 1);
|
|
||||||
|
/*SDL_DrawText(RENDERER, ROBOTO_20, (x + width + 5), y, WHITE, buf);
|
||||||
|
SDL_DrawImage(RENDERER, battery_unknown, x, 1);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatusBar_DisplayTime(bool portriat) {
|
void StatusBar_DisplayTime(bool portriat) {
|
||||||
int timeWidth = 0, timeHeight = 0;
|
int timeWidth = 0, timeHeight = 0;
|
||||||
TTF_SizeText(ARIAL_25, Clock_GetCurrentTime(), &timeWidth, &timeHeight);
|
TTF_SizeText(ROBOTO_25, Clock_GetCurrentTime(), &timeWidth, &timeHeight);
|
||||||
int helpWidth, helpHeight;
|
int helpWidth, helpHeight;
|
||||||
TTF_SizeText(ARIAL_20, "\"+\" - Help", &helpWidth, &helpHeight);
|
TTF_SizeText(ROBOTO_20, "\"+\" - Help", &helpWidth, &helpHeight);
|
||||||
|
|
||||||
if (portriat) {
|
if (portriat) {
|
||||||
int timeX = (1280 - timeWidth) + timeHeight;
|
int timeX = (1280 - timeWidth) + timeHeight;
|
||||||
int timeY = (720 - timeWidth) + 15;
|
int timeY = (720 - timeWidth) + 15;
|
||||||
SDL_DrawRotatedText(RENDERER, ARIAL_25, (double) 90, timeX, timeY, WHITE, Clock_GetCurrentTime());
|
SDL_DrawRotatedText(RENDERER, ROBOTO_25, (double) 90, timeX, timeY, WHITE, Clock_GetCurrentTime());
|
||||||
|
|
||||||
int helpX = (1280 - helpWidth) + 21;
|
int helpX = (1280 - helpWidth) + 21;
|
||||||
int helpY = (720 - helpHeight) - (720 - timeY) - 75;
|
int helpY = (720 - helpHeight) - (720 - timeY) - 75;
|
||||||
SDL_DrawRotatedText(RENDERER, ARIAL_20, (double) 90, helpX, helpY, WHITE, "\"+\" - Help");
|
SDL_DrawRotatedText(RENDERER, ROBOTO_20, (double) 90, helpX, helpY, WHITE, "\"+\" - Help");
|
||||||
|
|
||||||
//SDL_DrawRotatedText(RENDERER, ARIAL_25, (double) 90, 1270 - width, (720 - height), WHITE, Clock_GetCurrentTime());
|
//SDL_DrawRotatedText(RENDERER, ROBOTO_25, (double) 90, 1270 - width, (720 - height), WHITE, Clock_GetCurrentTime());
|
||||||
} else {
|
} else {
|
||||||
SDL_DrawText(RENDERER, ARIAL_25, 1260 - timeWidth, (40 - timeHeight) / 2, WHITE, Clock_GetCurrentTime());
|
SDL_DrawText(RENDERER, ROBOTO_25, 1260 - timeWidth, (40 - timeHeight) / 2, WHITE, Clock_GetCurrentTime());
|
||||||
|
|
||||||
SDL_DrawText(RENDERER, ARIAL_20, 1260 - helpWidth - timeWidth - 25, (40 - helpHeight) / 2, WHITE, "\"+\" - Help");
|
SDL_DrawText(RENDERER, ROBOTO_20, 1260 - helpWidth - timeWidth - 25, (40 - helpHeight) / 2, WHITE, "\"+\" - Help");
|
||||||
|
|
||||||
StatusBar_GetBatteryStatus(1260 - (timeWidth + helpWidth) - 110, (40 - timeHeight) / 2 + 15); // 34 is height of battery img
|
StatusBar_GetBatteryStatus(1260 - (timeWidth + helpWidth) - 110, (40 - timeHeight) / 2 + 34); // 34 is height of battery img
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EXPERIMENTAL
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
|
@ -5,14 +5,15 @@
|
||||||
SDL_Texture *battery_20, *battery_20_charging, *battery_30, *battery_30_charging, *battery_50, *battery_50_charging, \
|
SDL_Texture *battery_20, *battery_20_charging, *battery_30, *battery_30_charging, *battery_50, *battery_50_charging, \
|
||||||
*battery_60, *battery_60_charging, *battery_80, *battery_80_charging, *battery_90, *battery_90_charging, \
|
*battery_60, *battery_60_charging, *battery_80, *battery_80_charging, *battery_90, *battery_90_charging, \
|
||||||
*battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning, *button_a, *button_b, \
|
*battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning, *button_a, *button_b, \
|
||||||
*button_x, *button_y, *button_down, *button_up, *button_left, *button_right, *button_lb, *button_rb, *button_lt, \
|
*button_x, *button_y, *button_dpad_up_down, *button_dpad_left_right, *button_lb, *button_rb, *button_lt, \
|
||||||
*button_rt, *button_minus, *button_plus, *button_capture, *button_home;
|
*button_rt, *button_minus, *button_plus, *left_stick_up_down, *right_stick_up_down;
|
||||||
|
|
||||||
void Textures_Load(void) {
|
void Textures_Load(void) {
|
||||||
|
// Battery images
|
||||||
SDL_LoadImage(&battery_20, "romfs:/resources/images/battery/battery_20.png");
|
SDL_LoadImage(&battery_20, "romfs:/resources/images/battery/battery_20.png");
|
||||||
SDL_LoadImage(&battery_20_charging, "romfs:/resources/images/battery/battery_20_charging.png");
|
SDL_LoadImage(&battery_20_charging, "romfs:/resources/images/battery/battery_20_charging.png");
|
||||||
SDL_LoadImage(&battery_30, "romfs:/resources/images/battery/battery_30.png");
|
SDL_LoadImage(&battery_30, "romfs:/resources/images/battery/battery_30.png");
|
||||||
SDL_LoadImage(&battery_30_charging, "romfs:/resources/images/battery/battery/battery_30_charging.png");
|
SDL_LoadImage(&battery_30_charging, "romfs:/resources/images/battery/battery_30_charging.png");
|
||||||
SDL_LoadImage(&battery_50, "romfs:/resources/images/battery/battery_50.png");
|
SDL_LoadImage(&battery_50, "romfs:/resources/images/battery/battery_50.png");
|
||||||
SDL_LoadImage(&battery_50_charging, "romfs:/resources/images/battery/battery_50_charging.png");
|
SDL_LoadImage(&battery_50_charging, "romfs:/resources/images/battery/battery_50_charging.png");
|
||||||
SDL_LoadImage(&battery_60, "romfs:/resources/images/battery/battery_60.png");
|
SDL_LoadImage(&battery_60, "romfs:/resources/images/battery/battery_60.png");
|
||||||
|
@ -25,13 +26,50 @@ void Textures_Load(void) {
|
||||||
SDL_LoadImage(&battery_full_charging, "romfs:/resources/images/battery/battery_full_charging.png");
|
SDL_LoadImage(&battery_full_charging, "romfs:/resources/images/battery/battery_full_charging.png");
|
||||||
SDL_LoadImage(&battery_low, "romfs:/resources/images/battery/battery_low.png");
|
SDL_LoadImage(&battery_low, "romfs:/resources/images/battery/battery_low.png");
|
||||||
SDL_LoadImage(&battery_unknown, "romfs:/resources/images/battery/battery_unknown.png");
|
SDL_LoadImage(&battery_unknown, "romfs:/resources/images/battery/battery_unknown.png");
|
||||||
|
|
||||||
|
// Info images
|
||||||
SDL_LoadImage(&error, "romfs:/resources/images/info/error.png");
|
SDL_LoadImage(&error, "romfs:/resources/images/info/error.png");
|
||||||
SDL_LoadImage(&warning, "romfs:/resources/images/info/warning.png");
|
SDL_LoadImage(&warning, "romfs:/resources/images/info/warning.png");
|
||||||
|
|
||||||
|
// Button images
|
||||||
|
SDL_LoadImage(&button_a, "romfs:/resources/images/control/Switch_A.png");
|
||||||
|
SDL_LoadImage(&button_b, "romfs:/resources/images/control/Switch_B.png");
|
||||||
|
SDL_LoadImage(&button_x, "romfs:/resources/images/control/Switch_X.png");
|
||||||
|
SDL_LoadImage(&button_y, "romfs:/resources/images/control/Switch_Y.png");
|
||||||
|
SDL_LoadImage(&button_dpad_up_down, "romfs:/resources/images/control/Switch_Dpad_Up_down.png");
|
||||||
|
SDL_LoadImage(&button_dpad_left_right, "romfs:/resources/images/control/Switch_Dpad_Left_right.png");
|
||||||
|
SDL_LoadImage(&button_lb, "romfs:/resources/images/control/Switch_LB.png");
|
||||||
|
SDL_LoadImage(&button_rb, "romfs:/resources/images/control/Switch_RB.png");
|
||||||
|
SDL_LoadImage(&button_lt, "romfs:/resources/images/control/Switch_LT.png");
|
||||||
|
SDL_LoadImage(&button_rt, "romfs:/resources/images/control/Switch_RT.png");
|
||||||
|
SDL_LoadImage(&button_minus, "romfs:/resources/images/control/Switch_Minus.png");
|
||||||
|
SDL_LoadImage(&button_plus, "romfs:/resources/images/control/Switch_Plus.png");
|
||||||
|
SDL_LoadImage(&left_stick_up_down, "romfs:/resources/images/control/Switch_Left_Stick_up_down.png");
|
||||||
|
SDL_LoadImage(&right_stick_up_down, "romfs:/resources/images/control/Switch_Right_Stick_up_down.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Textures_Free(void) {
|
void Textures_Free(void) {
|
||||||
|
// Button images
|
||||||
|
SDL_DestroyTexture(button_a);
|
||||||
|
SDL_DestroyTexture(button_b);
|
||||||
|
SDL_DestroyTexture(button_x);
|
||||||
|
SDL_DestroyTexture(button_y);
|
||||||
|
SDL_DestroyTexture(button_dpad_up_down);
|
||||||
|
SDL_DestroyTexture(button_dpad_left_right);
|
||||||
|
SDL_DestroyTexture(button_lb);
|
||||||
|
SDL_DestroyTexture(button_rb);
|
||||||
|
SDL_DestroyTexture(button_lt);
|
||||||
|
SDL_DestroyTexture(button_rt);
|
||||||
|
SDL_DestroyTexture(button_minus);
|
||||||
|
SDL_DestroyTexture(button_plus);
|
||||||
|
SDL_DestroyTexture(left_stick_up_down);
|
||||||
|
SDL_DestroyTexture(right_stick_up_down);
|
||||||
|
|
||||||
|
// Info images
|
||||||
SDL_DestroyTexture(warning);
|
SDL_DestroyTexture(warning);
|
||||||
SDL_DestroyTexture(error);
|
SDL_DestroyTexture(error);
|
||||||
|
|
||||||
|
// Battery images
|
||||||
SDL_DestroyTexture(battery_unknown);
|
SDL_DestroyTexture(battery_unknown);
|
||||||
SDL_DestroyTexture(battery_low);
|
SDL_DestroyTexture(battery_low);
|
||||||
SDL_DestroyTexture(battery_full_charging);
|
SDL_DestroyTexture(battery_full_charging);
|
||||||
|
|