1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Fix handling of autoselected interface scaling by client

This commit is contained in:
Ivan Savenko
2024-10-09 17:37:47 +00:00
parent c8a0664b3c
commit e442e71ed9
5 changed files with 16 additions and 10 deletions

View File

@@ -44,6 +44,8 @@ public:
/// Dimensions of logical output. Can be different if scaling is used /// Dimensions of logical output. Can be different if scaling is used
virtual Point getLogicalResolution() const = 0; virtual Point getLogicalResolution() const = 0;
virtual int getInterfaceScalingPercentage() const = 0;
virtual int getScalingFactor() const = 0; virtual int getScalingFactor() const = 0;
/// Window has focus /// Window has focus

View File

@@ -48,7 +48,7 @@ void CursorHardware::setVisible(bool on)
void CursorHardware::setImage(std::shared_ptr<IImage> image, const Point & pivotOffset) void CursorHardware::setImage(std::shared_ptr<IImage> image, const Point & pivotOffset)
{ {
int videoScalingSettings = settings["video"]["resolution"]["scaling"].Integer(); int videoScalingSettings = GH.screenHandler().getInterfaceScalingPercentage();
float cursorScalingSettings = settings["video"]["cursorScalingFactor"].Float(); float cursorScalingSettings = settings["video"]["cursorScalingFactor"].Float();
int cursorScalingPercent = videoScalingSettings * cursorScalingSettings; int cursorScalingPercent = videoScalingSettings * cursorScalingSettings;
Point cursorDimensions = image->dimensions() * GH.screenHandler().getScalingFactor(); Point cursorDimensions = image->dimensions() * GH.screenHandler().getScalingFactor();

View File

@@ -84,12 +84,8 @@ Rect ScreenHandler::convertLogicalPointsToWindow(const Rect & input) const
return result; return result;
} }
Point ScreenHandler::getPreferredLogicalResolution() const int ScreenHandler::getInterfaceScalingPercentage() const
{ {
Point renderResolution = getRenderResolution();
double reservedAreaWidth = settings["video"]["reservedWidth"].Float();
Point availableResolution = Point(renderResolution.x * (1 - reservedAreaWidth), renderResolution.y);
auto [minimalScaling, maximalScaling] = getSupportedScalingRange(); auto [minimalScaling, maximalScaling] = getSupportedScalingRange();
int userScaling = settings["video"]["resolution"]["scaling"].Integer(); int userScaling = settings["video"]["resolution"]["scaling"].Integer();
@@ -110,9 +106,17 @@ Point ScreenHandler::getPreferredLogicalResolution() const
} }
int scaling = std::clamp(userScaling, minimalScaling, maximalScaling); int scaling = std::clamp(userScaling, minimalScaling, maximalScaling);
return scaling;
}
Point ScreenHandler::getPreferredLogicalResolution() const
{
Point renderResolution = getRenderResolution();
double reservedAreaWidth = settings["video"]["reservedWidth"].Float();
int scaling = getInterfaceScalingPercentage();
Point availableResolution = Point(renderResolution.x * (1 - reservedAreaWidth), renderResolution.y);
Point logicalResolution = availableResolution * 100.0 / scaling; Point logicalResolution = availableResolution * 100.0 / scaling;
return logicalResolution; return logicalResolution;
} }

View File

@@ -112,6 +112,8 @@ public:
int getScalingFactor() const final; int getScalingFactor() const final;
int getInterfaceScalingPercentage() const final;
std::vector<Point> getSupportedResolutions() const final; std::vector<Point> getSupportedResolutions() const final;
std::vector<Point> getSupportedResolutions(int displayIndex) const; std::vector<Point> getSupportedResolutions(int displayIndex) const;
std::tuple<int, int> getSupportedScalingRange() const final; std::tuple<int, int> getSupportedScalingRange() const final;

View File

@@ -194,10 +194,8 @@ GeneralOptionsTab::GeneralOptionsTab()
build(config); build(config);
const auto & currentResolution = settings["video"]["resolution"];
std::shared_ptr<CLabel> scalingLabel = widget<CLabel>("scalingLabel"); std::shared_ptr<CLabel> scalingLabel = widget<CLabel>("scalingLabel");
scalingLabel->setText(scalingToLabelString(currentResolution["scaling"].Integer())); scalingLabel->setText(scalingToLabelString(GH.screenHandler().getInterfaceScalingPercentage()));
std::shared_ptr<CLabel> longTouchLabel = widget<CLabel>("longTouchLabel"); std::shared_ptr<CLabel> longTouchLabel = widget<CLabel>("longTouchLabel");
if (longTouchLabel) if (longTouchLabel)