1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-10-08 23:22:25 +02:00

Merge pull request #6128 from Laserlicht/portrait

fix android portrait mode
This commit is contained in:
Ivan Savenko
2025-09-21 21:09:59 +03:00
committed by GitHub
3 changed files with 15 additions and 2 deletions

View File

@@ -255,7 +255,11 @@ void InputHandler::preprocessEvent(const SDL_Event & ev)
case SDL_WINDOWEVENT_SIZE_CHANGED:
{
std::scoped_lock interfaceLock(ENGINE->interfaceMutex);
#ifdef VCMI_MOBILE
ENGINE->onScreenResize(true, false);
#else
ENGINE->onScreenResize(true, true);
#endif
}
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:

View File

@@ -48,6 +48,8 @@ std::tuple<int, int> ScreenHandler::getSupportedScalingRange() const
Point renderResolution = getRenderResolution();
double reservedAreaWidth = settings["video"]["reservedWidth"].Float();
Point availableResolution = Point(renderResolution.x * (1 - reservedAreaWidth), renderResolution.y);
if(renderResolution.x < renderResolution.y) // reserved in portrait mode
availableResolution = Point(renderResolution.x, renderResolution.y * (1 - reservedAreaWidth));
double maximalScalingWidth = 100.0 * availableResolution.x / minResolution.x;
double maximalScalingHeight = 100.0 * availableResolution.y / minResolution.y;
@@ -114,6 +116,8 @@ Point ScreenHandler::getPreferredLogicalResolution() const
int scaling = getInterfaceScalingPercentage();
Point availableResolution = Point(renderResolution.x * (1 - reservedAreaWidth), renderResolution.y);
if(renderResolution.x < renderResolution.y) // reserved in portrait mode
availableResolution = Point(renderResolution.x, renderResolution.y * (1 - reservedAreaWidth));
Point logicalResolution = availableResolution * 100.0 / scaling;
return logicalResolution;
}

View File

@@ -338,10 +338,17 @@ void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
bool fullscreen = settings["video"]["fullscreen"].Bool();
bool realFullscreen = settings["video"]["realFullscreen"].Bool();
int resX = settings["video"]["resolution"]["width"].Integer();
int resY = settings["video"]["resolution"]["height"].Integer();
QSize currentRes(resX, resY);
if (!fullscreen || realFullscreen)
{
QVector<QSize> resolutions = findAvailableResolutions(screenIndex);
if(!resolutions.contains(currentRes))
resolutions.append(currentRes);
for(const auto & entry : resolutions)
ui->comboBoxResolution->addItem(resolutionToString(entry));
}
@@ -351,8 +358,6 @@ void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
}
ui->comboBoxResolution->setEnabled(ui->comboBoxResolution->count() > 1);
int resX = settings["video"]["resolution"]["width"].Integer();
int resY = settings["video"]["resolution"]["height"].Integer();
int resIndex = ui->comboBoxResolution->findText(resolutionToString({resX, resY}));
ui->comboBoxResolution->setCurrentIndex(resIndex);