]> git.lizzy.rs Git - minetest.git/commitdiff
Use legacy image implementation (no NNAA filter) when not using 9-slice image (#12608)
authorx2048 <codeforsmile@gmail.com>
Sun, 31 Jul 2022 19:57:13 +0000 (21:57 +0200)
committerGitHub <noreply@github.com>
Sun, 31 Jul 2022 19:57:13 +0000 (21:57 +0200)
src/gui/guiFormSpecMenu.cpp

index 342ef0e18c7e1f4cb302e4d4da338764ca5a3d83..5d4ca6747374ebbcf407d2c9172d31eeadd72f7d 100644 (file)
@@ -825,12 +825,27 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
        core::rect<s32> middle;
        if (parts.size() >= 4)
                parseMiddleRect(parts[3], &middle);
-
-       GUIAnimatedImage *e = new GUIAnimatedImage(Environment, data->current_parent,
-               spec.fid, rect);
-
-       e->setTexture(texture);
-       e->setMiddleRect(middle);
+       
+       // Temporary fix for issue #12581 in 5.6.0.
+       // Use legacy image when not rendering 9-slice image because GUIAnimatedImage 
+       // uses NNAA filter which causes visual artifacts when image uses alpha blending.
+
+       gui::IGUIElement *e;
+       if (middle.getArea() > 0) {
+               GUIAnimatedImage *image = new GUIAnimatedImage(Environment, data->current_parent,
+                       spec.fid, rect);
+
+               image->setTexture(texture);
+               image->setMiddleRect(middle);
+               e = image;
+       }
+       else {
+               gui::IGUIImage *image = Environment->addImage(rect, data->current_parent, spec.fid, nullptr, true);
+               image->setImage(texture);
+               image->setScaleImage(true);
+               image->grab(); // compensate for drop in addImage
+               e = image;
+       }
 
        auto style = getDefaultStyleForElement("image", spec.fname);
        e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));