imageScaleNNAA: Fix image clipping on rect- instead of image dimensions (#9896)
authorHugues Ross <hugues.ross@gmail.com>
Mon, 1 Jun 2020 13:22:04 +0000 (09:22 -0400)
committerGitHub <noreply@github.com>
Mon, 1 Jun 2020 13:22:04 +0000 (15:22 +0200)
Fixes GUI scaling filters applied on animated images and 9slice backgrounds.

src/client/imagefilters.cpp

index dd029628f3926aeecd27655c8c4b5cf375c61dad..0fa5014109b02bcad813c4f2f1a7975d96c8a448 100644 (file)
@@ -91,7 +91,7 @@ void imageScaleNNAA(video::IImage *src, const core::rect<s32> &srcrect, video::I
        u32 dy, dx;
        video::SColor pxl;
 
-       // Cache rectsngle boundaries.
+       // Cache rectangle boundaries.
        double sox = srcrect.UpperLeftCorner.X * 1.0;
        double soy = srcrect.UpperLeftCorner.Y * 1.0;
        double sw = srcrect.getWidth() * 1.0;
@@ -107,15 +107,15 @@ void imageScaleNNAA(video::IImage *src, const core::rect<s32> &srcrect, video::I
                // Do some basic clipping, and for mirrored/flipped rects,
                // make sure min/max are in the right order.
                minsx = sox + (dx * sw / dim.Width);
-               minsx = rangelim(minsx, 0, sw);
+               minsx = rangelim(minsx, 0, sox + sw);
                maxsx = minsx + sw / dim.Width;
-               maxsx = rangelim(maxsx, 0, sw);
+               maxsx = rangelim(maxsx, 0, sox + sw);
                if (minsx > maxsx)
                        SWAP(double, minsx, maxsx);
                minsy = soy + (dy * sh / dim.Height);
-               minsy = rangelim(minsy, 0, sh);
+               minsy = rangelim(minsy, 0, soy + sh);
                maxsy = minsy + sh / dim.Height;
-               maxsy = rangelim(maxsy, 0, sh);
+               maxsy = rangelim(maxsy, 0, soy + sh);
                if (minsy > maxsy)
                        SWAP(double, minsy, maxsy);