Statbars: fix incorrect half-images in non-standard orientations (fixes #6198)
authorNathanaƫl Courant <Ekdohibs@users.noreply.github.com>
Sun, 27 Aug 2017 17:06:40 +0000 (19:06 +0200)
committerSmallJoker <mk939@ymail.com>
Sun, 3 Jun 2018 15:31:59 +0000 (17:31 +0200)
src/hud.cpp

index a2f031b4c4a7ca0974f820c674587495c7a05912..6895349ef822d179743d99c76aeaaf6398273187 100644 (file)
@@ -407,24 +407,32 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
        p += offset;
 
        v2s32 steppos;
+       core::rect<s32> srchalfrect, dsthalfrect;
        switch (drawdir) {
                case HUD_DIR_RIGHT_LEFT:
                        steppos = v2s32(-1, 0);
+                       srchalfrect = core::rect<s32>(srcd.Width / 2, 0, srcd.Width, srcd.Height);
+                       dsthalfrect = core::rect<s32>(dstd.Width / 2, 0, dstd.Width, dstd.Height);
                        break;
                case HUD_DIR_TOP_BOTTOM:
                        steppos = v2s32(0, 1);
+                       srchalfrect = core::rect<s32>(0, 0, srcd.Width, srcd.Height / 2);
+                       dsthalfrect = core::rect<s32>(0, 0, dstd.Width, dstd.Height / 2);
                        break;
                case HUD_DIR_BOTTOM_TOP:
                        steppos = v2s32(0, -1);
+                       srchalfrect = core::rect<s32>(0, srcd.Height / 2, srcd.Width, srcd.Height);
+                       dsthalfrect = core::rect<s32>(0, dstd.Height / 2, dstd.Width, dstd.Height);
                        break;
                default:
                        steppos = v2s32(1, 0);
+                       srchalfrect = core::rect<s32>(0, 0, srcd.Width / 2, srcd.Height);
+                       dsthalfrect = core::rect<s32>(0, 0, dstd.Width / 2, dstd.Height);
        }
        steppos.X *= dstd.Width;
        steppos.Y *= dstd.Height;
 
-       for (s32 i = 0; i < count / 2; i++)
-       {
+       for (s32 i = 0; i < count / 2; i++) {
                core::rect<s32> srcrect(0, 0, srcd.Width, srcd.Height);
                core::rect<s32> dstrect(0,0, dstd.Width, dstd.Height);
 
@@ -433,13 +441,9 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
                p += steppos;
        }
 
-       if (count % 2 == 1)
-       {
-               core::rect<s32> srcrect(0, 0, srcd.Width / 2, srcd.Height);
-               core::rect<s32> dstrect(0,0, dstd.Width / 2, dstd.Height);
-
-               dstrect += p;
-               draw2DImageFilterScaled(driver, stat_texture, dstrect, srcrect, NULL, colors, true);
+       if (count % 2 == 1) {
+               dsthalfrect += p;
+               draw2DImageFilterScaled(driver, stat_texture, dsthalfrect, srchalfrect, NULL, colors, true);
        }
 }