From 98e0c2435bd69d6dd78fb0f84389a81b56278958 Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Thu, 7 Mar 2024 20:33:38 +0100 Subject: Fixed ambient layers "keepratio" option I had broken this in 264be2108c51837fa92085f6c839e66aebbcfc9e by no longer reading out the property. Made some further simplifications and two more fixes: * When the original image's size was not 800x600, it wouldn't get scaled as expected due to the integer division being performed before the multiplication. * I had changed the default resolution to 1280x720, while mKeepRatio expects to scale the original image as if it was displayed on an 800x600 screen. So now it's hardcoded on 800x600 rather than using the defaultScreenWidth/Height variables. * Removed the confusing x/y parameters from AmbientLayer::draw, which were actually set to the graphics width/height. * Changed SDLGraphics::drawRescaledImagePattern to not repeatedly set the source origin. --- src/resources/ambientlayer.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'src/resources/ambientlayer.cpp') diff --git a/src/resources/ambientlayer.cpp b/src/resources/ambientlayer.cpp index 2fa522e5..b292070b 100644 --- a/src/resources/ambientlayer.cpp +++ b/src/resources/ambientlayer.cpp @@ -21,7 +21,6 @@ #include "resources/ambientlayer.h" #include "graphics.h" -#include "video.h" #include "resources/image.h" #include "resources/resourcemanager.h" @@ -30,8 +29,7 @@ AmbientLayer::AmbientLayer(Image *img) : mImage(img) {} -AmbientLayer::~AmbientLayer() -{} +AmbientLayer::~AmbientLayer() = default; void AmbientLayer::update(int timePassed, float dx, float dy) { @@ -58,14 +56,27 @@ void AmbientLayer::update(int timePassed, float dx, float dy) mPosY += imgH; } -void AmbientLayer::draw(Graphics *graphics, int x, int y) +void AmbientLayer::draw(Graphics *graphics) { + const auto screenWidth = graphics->getWidth(); + const auto screenHeight = graphics->getHeight(); + const auto x = static_cast(mPosX); + const auto y = static_cast(mPosY); + if (!mKeepRatio) + { graphics->drawImagePattern(mImage, - (int) -mPosX, (int) -mPosY, x + (int) mPosX, y + (int) mPosY); + -x, -y, + screenWidth + x, + screenHeight + y); + } else + { graphics->drawRescaledImagePattern(mImage, - (int) -mPosX, (int) -mPosY, x + (int) mPosX, y + (int) mPosY, - (int) mImage->getWidth() / defaultScreenWidth * graphics->getWidth(), - (int) mImage->getHeight() / defaultScreenHeight * graphics->getHeight()); + -x, -y, + screenWidth + x, + screenHeight + y, + mImage->getWidth() * screenWidth / 800, + mImage->getHeight() * screenHeight / 600); + } } -- cgit v1.2.3-70-g09d2