Remove the dependency on FGIMG/BGIMG from the hovered/pressed variants
authorHugues Ross <hugues.ross@gmail.com>
Sat, 14 Dec 2019 23:05:36 +0000 (18:05 -0500)
committersfan5 <sfan5@live.de>
Mon, 16 Dec 2019 18:26:57 +0000 (19:26 +0100)
- Make guiButtonImage support null images properly

src/gui/guiButton.cpp
src/gui/guiButtonImage.cpp

index 6518bbd1f1639e766596a491ea4089e73b58198d..0d69ff143bd946c3e35bd20fa1f524af3a817a46 100644 (file)
@@ -778,18 +778,25 @@ void GUIButton::setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc)
        setDrawBorder(style.getBool(StyleSpec::BORDER, DrawBorder));\r
        setUseAlphaChannel(style.getBool(StyleSpec::ALPHA, true));\r
 \r
+       const core::position2di buttonCenter(AbsoluteRect.getCenter());\r
+       core::position2d<s32> geom(buttonCenter);\r
        if (style.isNotDefault(StyleSpec::BGIMG)) {\r
                video::ITexture *texture = style.getTexture(StyleSpec::BGIMG, tsrc);\r
-               video::ITexture *hovered_texture = style.getTexture(StyleSpec::BGIMG_HOVERED, tsrc, texture);\r
-               video::ITexture *pressed_texture = style.getTexture(StyleSpec::BGIMG_PRESSED, tsrc, texture);\r
-\r
-               const core::position2di buttonCenter(AbsoluteRect.getCenter());\r
-               core::position2d<s32> geom(buttonCenter);\r
 \r
                setImage(guiScalingImageButton(\r
                                        Environment->getVideoDriver(), texture, geom.X, geom.Y));\r
+               setScaleImage(true);\r
+       }\r
+       if (style.isNotDefault(StyleSpec::BGIMG_HOVERED)) {\r
+               video::ITexture *hovered_texture = style.getTexture(StyleSpec::BGIMG_HOVERED, tsrc);\r
+\r
                setHoveredImage(guiScalingImageButton(\r
                                        Environment->getVideoDriver(), hovered_texture, geom.X, geom.Y));\r
+               setScaleImage(true);\r
+       }\r
+       if (style.isNotDefault(StyleSpec::BGIMG_PRESSED)) {\r
+               video::ITexture *pressed_texture = style.getTexture(StyleSpec::BGIMG_PRESSED, tsrc);\r
+\r
                setPressedImage(guiScalingImageButton(\r
                                        Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y));\r
                setScaleImage(true);\r
index 8796b845d13cdf1a02e95a2ce7537b2e8c4721e3..02d920277ca70f6885bfd25d658373679f82166d 100644 (file)
@@ -46,7 +46,11 @@ bool GUIButtonImage::OnEvent(const SEvent& event)
        EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images);
        video::ITexture *texture = m_foreground_images[(u32)imageState].Texture;
        if (texture != nullptr)
+       {
                m_image->setImage(texture);
+       }
+
+       m_image->setVisible(texture != nullptr);
 
        return result;
 }
@@ -110,16 +114,23 @@ void GUIButtonImage::setFromStyle(const StyleSpec &style, ISimpleTextureSource *
 
        video::IVideoDriver *driver = Environment->getVideoDriver();
 
+       const core::position2di buttonCenter(AbsoluteRect.getCenter());
+       core::position2d<s32> geom(buttonCenter);
        if (style.isNotDefault(StyleSpec::FGIMG)) {
                video::ITexture *texture = style.getTexture(StyleSpec::FGIMG, tsrc);
-               video::ITexture *hovered_texture = style.getTexture(StyleSpec::FGIMG_HOVERED, tsrc, texture);
-               video::ITexture *pressed_texture = style.getTexture(StyleSpec::FGIMG_PRESSED, tsrc, texture);
-
-               const core::position2di buttonCenter(AbsoluteRect.getCenter());
-               core::position2d<s32> geom(buttonCenter);
 
                setForegroundImage(guiScalingImageButton(driver, texture, geom.X, geom.Y));
+               setScaleImage(true);
+       }
+       if (style.isNotDefault(StyleSpec::FGIMG_HOVERED)) {
+               video::ITexture *hovered_texture = style.getTexture(StyleSpec::FGIMG_HOVERED, tsrc);
+
                setHoveredForegroundImage(guiScalingImageButton(driver, hovered_texture, geom.X, geom.Y));
+               setScaleImage(true);
+       }
+       if (style.isNotDefault(StyleSpec::FGIMG_PRESSED)) {
+               video::ITexture *pressed_texture = style.getTexture(StyleSpec::FGIMG_PRESSED, tsrc);
+
                setPressedForegroundImage(guiScalingImageButton(driver, pressed_texture, geom.X, geom.Y));
                setScaleImage(true);
        }