initial commit
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
#include "license_blocked_page.h"
|
||||
#include "app_state.h"
|
||||
#include "home.h"
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
void LicenseBlockedPage::onPush(AppState& state)
|
||||
{
|
||||
state_ = &state;
|
||||
TTF_Init();
|
||||
createFonts();
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::onResume(AppState& state)
|
||||
{
|
||||
state_ = &state;
|
||||
createFonts();
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::onPause(AppState& state)
|
||||
{
|
||||
destroyFonts();
|
||||
destroyTextures();
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::onPop(AppState& state)
|
||||
{
|
||||
destroyFonts();
|
||||
destroyTextures();
|
||||
TTF_Quit();
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::createFonts()
|
||||
{
|
||||
destroyFonts();
|
||||
fontMessage_ = TTF_OpenFont("assets/fonts/Roboto-Regular.ttf", 40);
|
||||
fontPrompt_ = TTF_OpenFont("assets/fonts/Roboto-Regular.ttf", 24);
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::destroyFonts()
|
||||
{
|
||||
if (fontMessage_) { TTF_CloseFont(fontMessage_); fontMessage_ = nullptr; }
|
||||
if (fontPrompt_) { TTF_CloseFont(fontPrompt_); fontPrompt_ = nullptr; }
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::destroyTextures()
|
||||
{
|
||||
messageText_.destroy();
|
||||
infoText_.destroy();
|
||||
promptText_.destroy();
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::handleEvent(const SDL_Event& event)
|
||||
{
|
||||
if (event.type == SDL_EVENT_KEY_DOWN && event.key.key == SDLK_ESCAPE) {
|
||||
// Return to the main screen regardless of where the block was raised
|
||||
// (Play on Home, or Proclamations inside Settings). Snapshot the
|
||||
// state pointer first: the first pop() destroys this page, so reading
|
||||
// the state_ member afterwards would be a use-after-free.
|
||||
AppState* state = state_;
|
||||
while (state->pages.depth() > 0) {
|
||||
state->pages.pop(*state);
|
||||
}
|
||||
state->pages.push(*state, std::make_unique<Home>());
|
||||
}
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::update(float dt)
|
||||
{
|
||||
}
|
||||
|
||||
void LicenseBlockedPage::render(SDL_Renderer* renderer)
|
||||
{
|
||||
int winW, winH;
|
||||
SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH);
|
||||
float fw = static_cast<float>(winW);
|
||||
float fh = static_cast<float>(winH);
|
||||
|
||||
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
|
||||
SDL_SetRenderDrawColor(renderer, 15, 18, 25, 255);
|
||||
SDL_FRect bgRect{0, 0, fw, fh};
|
||||
SDL_RenderFillRect(renderer, &bgRect);
|
||||
|
||||
if (!fontMessage_ || !fontPrompt_) return;
|
||||
|
||||
SDL_Color white = {255, 255, 255, 255};
|
||||
SDL_Color gray = {170, 170, 170, 255};
|
||||
|
||||
const std::string message = "License could not be verified";
|
||||
const std::string info =
|
||||
"Please check that you are connected to the internet, and double check "
|
||||
"your license key and email address.";
|
||||
const std::string prompt = "Press ESC to return.";
|
||||
|
||||
messageText_.ensure(renderer, fontMessage_, message, white);
|
||||
infoText_.ensure(renderer, fontPrompt_, info, gray);
|
||||
promptText_.ensure(renderer, fontPrompt_, prompt, gray);
|
||||
|
||||
constexpr float gap = 24.0f;
|
||||
float totalH = 0;
|
||||
float maxW = 0;
|
||||
for (const CachedText* t : {&messageText_, &infoText_, &promptText_}) {
|
||||
maxW = std::max(maxW, t->width);
|
||||
totalH += (totalH > 0 ? gap : 0.0f) + t->height;
|
||||
}
|
||||
|
||||
float x = (fw - maxW) / 2.0f;
|
||||
float y = (fh - totalH) / 2.0f;
|
||||
|
||||
for (const CachedText* t : {&messageText_, &infoText_, &promptText_}) {
|
||||
if (t->texture) {
|
||||
SDL_FRect dst{x + (maxW - t->width) / 2.0f, y, t->width, t->height};
|
||||
SDL_RenderTexture(renderer, t->texture, nullptr, &dst);
|
||||
y += t->height + gap;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user