diff --git a/src/audio_settings_page.cpp b/src/audio_settings_page.cpp index fa378c1..73ca32f 100644 --- a/src/audio_settings_page.cpp +++ b/src/audio_settings_page.cpp @@ -1,5 +1,6 @@ #include "audio_settings_page.h" #include "app_state.h" +#include "logical_size.h" #include #include #include @@ -477,7 +478,7 @@ void AudioSettingsPage::renderModal(SDL_Renderer* renderer, float fw, float fh, void AudioSettingsPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/date_format_page.cpp b/src/date_format_page.cpp index eba62d0..fd30751 100644 --- a/src/date_format_page.cpp +++ b/src/date_format_page.cpp @@ -1,6 +1,7 @@ #include "date_format_page.h" #include "app_state.h" #include "date_format.h" +#include "logical_size.h" #include #include #include @@ -131,7 +132,7 @@ void DateFormatPage::update(float dt) void DateFormatPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/email_address_page.cpp b/src/email_address_page.cpp index 11b1417..b2fa041 100644 --- a/src/email_address_page.cpp +++ b/src/email_address_page.cpp @@ -3,6 +3,7 @@ #include "db/db_keys.h" #include "provisioning.h" #include "validation.h" +#include "logical_size.h" #include namespace { @@ -164,7 +165,7 @@ void EmailAddressPage::exitPage(AppState& state) void EmailAddressPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/home.cpp b/src/home.cpp index 3b30149..e27cf00 100644 --- a/src/home.cpp +++ b/src/home.cpp @@ -8,6 +8,7 @@ #include "audio/audio_downloader.h" #include "db/db_keys.h" #include "network/proclamation_sync.h" +#include "logical_size.h" #include #include #include @@ -114,7 +115,7 @@ void Home::update(float dt) void Home::render(SDL_Renderer *renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/license_blocked_page.cpp b/src/license_blocked_page.cpp index a8e06ad..4032cfe 100644 --- a/src/license_blocked_page.cpp +++ b/src/license_blocked_page.cpp @@ -1,6 +1,7 @@ #include "license_blocked_page.h" #include "app_state.h" #include "home.h" +#include "logical_size.h" #include void LicenseBlockedPage::onPush(AppState& state) @@ -71,7 +72,7 @@ void LicenseBlockedPage::update(float dt) void LicenseBlockedPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/license_key_page.cpp b/src/license_key_page.cpp index 750fac5..c9708f8 100644 --- a/src/license_key_page.cpp +++ b/src/license_key_page.cpp @@ -4,6 +4,7 @@ #include "network/license_service.h" #include "provisioning.h" #include "validation.h" +#include "logical_size.h" #include void LicenseKeyPage::onPush(AppState& state) @@ -172,7 +173,7 @@ void LicenseKeyPage::exitPage(AppState& state) void LicenseKeyPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/log_viewer_page.cpp b/src/log_viewer_page.cpp index 31cc93e..6d25549 100644 --- a/src/log_viewer_page.cpp +++ b/src/log_viewer_page.cpp @@ -1,6 +1,7 @@ #include "log_viewer_page.h" #include "app_state.h" #include "timezone_helper.h" +#include "logical_size.h" #include #include #include @@ -162,7 +163,7 @@ void LogViewerPage::update(float dt) { void LogViewerPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/logical_size.h b/src/logical_size.h new file mode 100644 index 0000000..239f492 --- /dev/null +++ b/src/logical_size.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +namespace radiantwave { + +inline void getLayoutSize(SDL_Renderer* renderer, int* w, int* h) +{ + SDL_RendererLogicalPresentation mode = SDL_LOGICAL_PRESENTATION_DISABLED; + if (!SDL_GetRenderLogicalPresentation(renderer, w, h, &mode) || + mode == SDL_LOGICAL_PRESENTATION_DISABLED || *w <= 0 || *h <= 0) + { + SDL_GetWindowSize(SDL_GetRenderWindow(renderer), w, h); + } +} + +} // namespace radiantwave diff --git a/src/main.cpp b/src/main.cpp index d930431..491038b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -62,12 +62,12 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) { // Lock the renderer to a 1920x1080 logical coordinate space. All page // layout code already targets this resolution, so everything renders at // the correct size on any display — the GPU scales to native pixels. - // if (!SDL_SetRenderLogicalPresentation(state->renderer, 1920, 1080, - // SDL_LOGICAL_PRESENTATION_STRETCH)) { - // radiantwave::logger::Logger::instance().warning("Graphics", - // "Could not set logical render size; layout may be wrong on HiDPI - // displays"); - // } + if (!SDL_SetRenderLogicalPresentation(state->renderer, 1920, 1080, + SDL_LOGICAL_PRESENTATION_STRETCH)) { + radiantwave::logger::Logger::instance().warning( + "Graphics", "Could not set logical render size; layout may be " + "wrong on HiDPI displays"); + } SDL_HideCursor(); diff --git a/src/proclamation_options_page.cpp b/src/proclamation_options_page.cpp index 8fe1848..07e04df 100644 --- a/src/proclamation_options_page.cpp +++ b/src/proclamation_options_page.cpp @@ -1,6 +1,7 @@ #include "proclamation_options_page.h" #include "app_state.h" #include "network/proclamation_sync.h" +#include "logical_size.h" #include #include #include @@ -552,7 +553,7 @@ void ProclamationOptionsPage::update(float dt) void ProclamationOptionsPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/scroller_page.cpp b/src/scroller_page.cpp index 6483a54..3903e8e 100644 --- a/src/scroller_page.cpp +++ b/src/scroller_page.cpp @@ -5,6 +5,7 @@ #include "proclamation_options_page.h" #include "scramble/fibonacci_scrambler.h" #include "utf8_utils.h" +#include "logical_size.h" #include #include @@ -35,7 +36,7 @@ void ScrollerPage::onPush(AppState &state) int winW = 0; int winH = 0; - SDL_GetWindowSize(state.window, &winW, &winH); + radiantwave::getLayoutSize(state.renderer, &winW, &winH); screenW_ = static_cast(winW); screenH_ = static_cast(winH); // Lines are capped at the full screen width; the widest Fibonacci lines are diff --git a/src/settings.cpp b/src/settings.cpp index f558e4f..ac68696 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -10,6 +10,7 @@ #include "email_address_page.h" #include "license_key_page.h" #include "date_format_page.h" +#include "logical_size.h" #include #include #include @@ -128,7 +129,7 @@ void Settings::update(float dt) void Settings::render(SDL_Renderer *renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/timezone_page.cpp b/src/timezone_page.cpp index fe87a6c..6a01063 100644 --- a/src/timezone_page.cpp +++ b/src/timezone_page.cpp @@ -1,5 +1,6 @@ #include "timezone_page.h" #include "app_state.h" +#include "logical_size.h" #include #include #include @@ -199,7 +200,7 @@ void TimeZonePage::update(float dt) { void TimeZonePage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH); diff --git a/src/wifi_setup_page.cpp b/src/wifi_setup_page.cpp index c711c02..8aec797 100644 --- a/src/wifi_setup_page.cpp +++ b/src/wifi_setup_page.cpp @@ -1,6 +1,7 @@ #include "wifi_setup_page.h" #include "app_state.h" #include "provisioning.h" +#include "logical_size.h" #include #include #include @@ -301,7 +302,7 @@ void WiFiSetupPage::update(float dt) { void WiFiSetupPage::render(SDL_Renderer* renderer) { int winW, winH; - SDL_GetWindowSize(SDL_GetRenderWindow(renderer), &winW, &winH); + radiantwave::getLayoutSize(renderer, &winW, &winH); float fw = static_cast(winW); float fh = static_cast(winH);