diff --git a/core/libs/prx/libSceVideoOut/include/DisplayWindow.hpp b/core/libs/prx/libSceVideoOut/include/DisplayWindow.hpp index fbc4d960a..d2b8646d2 100644 --- a/core/libs/prx/libSceVideoOut/include/DisplayWindow.hpp +++ b/core/libs/prx/libSceVideoOut/include/DisplayWindow.hpp @@ -6,6 +6,7 @@ inline constexpr std::uint32_t DisplayWindowMinimumWidth = 320; inline constexpr std::uint32_t DisplayWindowMinimumHeight = 180; +inline constexpr std::uint32_t DisplayWindowInitialSizePercent = 60; class DisplayWindow { public: diff --git a/core/libs/prx/libSceVideoOut/src/DisplayWindow.cpp b/core/libs/prx/libSceVideoOut/src/DisplayWindow.cpp index 7c7f5ac23..0792c9565 100644 --- a/core/libs/prx/libSceVideoOut/src/DisplayWindow.cpp +++ b/core/libs/prx/libSceVideoOut/src/DisplayWindow.cpp @@ -38,15 +38,14 @@ void DisplayWindow::Ensure(std::uint32_t sourceWidth, std::uint32_t sourceHeight void DisplayWindow::create(std::uint32_t sourceWidth, std::uint32_t sourceHeight) { SDL_Rect usable{}; require(SDL_GetDisplayUsableBounds(0, &usable) == 0, SDL_GetError()); - std::uint32_t initialWidth = sourceWidth; - std::uint32_t initialHeight = sourceHeight; - if (usable.w > 0 && usable.h > 0 && (sourceWidth > static_cast(usable.w) || sourceHeight > static_cast(usable.h))) { - const auto fitted = AgcDriver::ComputeContainSize_nid_postfix(sourceWidth, sourceHeight, static_cast(usable.w), static_cast(usable.h), false); - initialWidth = fitted.width; - initialHeight = fitted.height; - } + require(DisplayWindowInitialSizePercent > 0 && DisplayWindowInitialSizePercent <= 100, "initial window size percent must be between 1 and 100"); + require(usable.w > 0 && usable.h > 0, "usable display extent must be positive"); + const auto boundsWidth = static_cast(static_cast(usable.w) * DisplayWindowInitialSizePercent / 100); + const auto boundsHeight = static_cast(static_cast(usable.h) * DisplayWindowInitialSizePercent / 100); + const auto initialSize = AgcDriver::ComputeContainSize_nid_postfix(sourceWidth, sourceHeight, boundsWidth, boundsHeight, true); + require(initialSize.width >= DisplayWindowMinimumWidth && initialSize.height >= DisplayWindowMinimumHeight, "initial window extent is smaller than the minimum"); const auto title = GetAppTitle_nid_postfix(); - window = SDL_CreateWindow(title.value, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, static_cast(initialWidth), static_cast(initialHeight), SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); + window = SDL_CreateWindow(title.value, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, static_cast(initialSize.width), static_cast(initialSize.height), SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); require(window != nullptr, SDL_GetError()); SDL_SetWindowMinimumSize(window, static_cast(DisplayWindowMinimumWidth), static_cast(DisplayWindowMinimumHeight)); installSubclass();