Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
400c6a782b |
+10
-5
@@ -7,6 +7,7 @@
|
|||||||
#include "logical_size.h"
|
#include "logical_size.h"
|
||||||
#include "logger/logger.h"
|
#include "logger/logger.h"
|
||||||
#include "provisioning.h"
|
#include "provisioning.h"
|
||||||
|
#include "scroller_page.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
// How long audio fades out before the app tears down on quit. Only applied
|
// How long audio fades out before the app tears down on quit. Only applied
|
||||||
@@ -201,11 +202,15 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
|
|||||||
std::to_string(event->window.data1) + "x" +
|
std::to_string(event->window.data1) + "x" +
|
||||||
std::to_string(event->window.data2));
|
std::to_string(event->window.data2));
|
||||||
// Logical presentation persists across resizes; re-apply defensively
|
// Logical presentation persists across resizes; re-apply defensively
|
||||||
// in case backend state was reset underneath us.
|
// in case backend state was reset underneath us. Skip while the
|
||||||
SDL_SetRenderLogicalPresentation(state.renderer,
|
// scroller is active — it owns its own presentation (NONE, full
|
||||||
radiantwave::kDesignWidth,
|
// window) and restores LETTERBOX in onPop.
|
||||||
radiantwave::kDesignHeight,
|
if (!dynamic_cast<ScrollerPage *>(state.pages.current())) {
|
||||||
SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
SDL_SetRenderLogicalPresentation(state.renderer,
|
||||||
|
radiantwave::kDesignWidth,
|
||||||
|
radiantwave::kDesignHeight,
|
||||||
|
SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!state.keybinds.handleEvent(*event)) {
|
if (!state.keybinds.handleEvent(*event)) {
|
||||||
|
|||||||
+36
-7
@@ -34,13 +34,37 @@ void ScrollerPage::onPush(AppState &state)
|
|||||||
{
|
{
|
||||||
state_ = &state;
|
state_ = &state;
|
||||||
|
|
||||||
int winW = 0;
|
// Save the current logical presentation (LETTERBOX at design resolution)
|
||||||
int winH = 0;
|
// and switch to NONE so we render into the full physical window. This
|
||||||
radiantwave::getLayoutSize(state.renderer, &winW, &winH);
|
// lets the scroller scroll the entire vertical extent of tall/rotated
|
||||||
screenW_ = static_cast<float>(winW);
|
// displays while keeping text at the same pixel scale. onPop restores
|
||||||
screenH_ = static_cast<float>(winH);
|
// the original presentation for other pages.
|
||||||
// Lines are capped at the full screen width; the widest Fibonacci lines are
|
SDL_GetRenderLogicalPresentation(state.renderer, &savedLogicalW_,
|
||||||
// sized to fill it with whole words (peak word count derived from the
|
&savedLogicalH_, &savedMode_);
|
||||||
|
|
||||||
|
SDL_Window *window = SDL_GetRenderWindow(state.renderer);
|
||||||
|
int windowW = 0;
|
||||||
|
int windowH = 0;
|
||||||
|
if (window)
|
||||||
|
{
|
||||||
|
SDL_GetWindowSize(window, &windowW, &windowH);
|
||||||
|
}
|
||||||
|
if (windowW <= 0)
|
||||||
|
{
|
||||||
|
windowW = radiantwave::kDesignWidth;
|
||||||
|
}
|
||||||
|
if (windowH <= 0)
|
||||||
|
{
|
||||||
|
windowH = radiantwave::kDesignHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_SetRenderLogicalPresentation(state.renderer, windowW, windowH,
|
||||||
|
SDL_LOGICAL_PRESENTATION_DISABLED);
|
||||||
|
|
||||||
|
screenW_ = static_cast<float>(windowW);
|
||||||
|
screenH_ = static_cast<float>(windowH);
|
||||||
|
// Lines are capped at the full screen width; the widest Fibonacci lines
|
||||||
|
// are sized to fill it with whole words (peak word count derived from the
|
||||||
// screen), independent of resolution.
|
// screen), independent of resolution.
|
||||||
maxLineWidth_ = screenW_;
|
maxLineWidth_ = screenW_;
|
||||||
|
|
||||||
@@ -101,6 +125,11 @@ void ScrollerPage::onPause(AppState &state)
|
|||||||
|
|
||||||
void ScrollerPage::onPop(AppState &state)
|
void ScrollerPage::onPop(AppState &state)
|
||||||
{
|
{
|
||||||
|
// Restore the original logical presentation so other pages (Home,
|
||||||
|
// Settings, etc.) render in the design-resolution LETTERBOX space.
|
||||||
|
SDL_SetRenderLogicalPresentation(state.renderer, savedLogicalW_,
|
||||||
|
savedLogicalH_, savedMode_);
|
||||||
|
|
||||||
state.audio.stopTrackFadeOut(kFadeSeconds);
|
state.audio.stopTrackFadeOut(kFadeSeconds);
|
||||||
state.keybinds.unbindAll();
|
state.keybinds.unbindAll();
|
||||||
destroyResources();
|
destroyResources();
|
||||||
|
|||||||
@@ -115,4 +115,8 @@ private:
|
|||||||
float velocityDelay_ = 2.5f;
|
float velocityDelay_ = 2.5f;
|
||||||
int velocityState_ = 0;
|
int velocityState_ = 0;
|
||||||
float velocityTimer_ = 0.0f;
|
float velocityTimer_ = 0.0f;
|
||||||
|
|
||||||
|
int savedLogicalW_ = 0;
|
||||||
|
int savedLogicalH_ = 0;
|
||||||
|
SDL_RendererLogicalPresentation savedMode_ = SDL_LOGICAL_PRESENTATION_DISABLED;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user