Remove the dependency on FGIMG/BGIMG from the hovered/pressed variants

- Make guiButtonImage support null images properly
This commit is contained in:
Hugues Ross 2019-12-14 18:05:36 -05:00 committed by sfan5
parent bd4b8d40b3
commit e42faae8d9
2 changed files with 28 additions and 10 deletions

@ -778,18 +778,25 @@ void GUIButton::setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc)
setDrawBorder(style.getBool(StyleSpec::BORDER, DrawBorder)); setDrawBorder(style.getBool(StyleSpec::BORDER, DrawBorder));
setUseAlphaChannel(style.getBool(StyleSpec::ALPHA, true)); setUseAlphaChannel(style.getBool(StyleSpec::ALPHA, true));
if (style.isNotDefault(StyleSpec::BGIMG)) {
video::ITexture *texture = style.getTexture(StyleSpec::BGIMG, tsrc);
video::ITexture *hovered_texture = style.getTexture(StyleSpec::BGIMG_HOVERED, tsrc, texture);
video::ITexture *pressed_texture = style.getTexture(StyleSpec::BGIMG_PRESSED, tsrc, texture);
const core::position2di buttonCenter(AbsoluteRect.getCenter()); const core::position2di buttonCenter(AbsoluteRect.getCenter());
core::position2d<s32> geom(buttonCenter); core::position2d<s32> geom(buttonCenter);
if (style.isNotDefault(StyleSpec::BGIMG)) {
video::ITexture *texture = style.getTexture(StyleSpec::BGIMG, tsrc);
setImage(guiScalingImageButton( setImage(guiScalingImageButton(
Environment->getVideoDriver(), texture, geom.X, geom.Y)); Environment->getVideoDriver(), texture, geom.X, geom.Y));
setScaleImage(true);
}
if (style.isNotDefault(StyleSpec::BGIMG_HOVERED)) {
video::ITexture *hovered_texture = style.getTexture(StyleSpec::BGIMG_HOVERED, tsrc);
setHoveredImage(guiScalingImageButton( setHoveredImage(guiScalingImageButton(
Environment->getVideoDriver(), hovered_texture, geom.X, geom.Y)); Environment->getVideoDriver(), hovered_texture, geom.X, geom.Y));
setScaleImage(true);
}
if (style.isNotDefault(StyleSpec::BGIMG_PRESSED)) {
video::ITexture *pressed_texture = style.getTexture(StyleSpec::BGIMG_PRESSED, tsrc);
setPressedImage(guiScalingImageButton( setPressedImage(guiScalingImageButton(
Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y)); Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y));
setScaleImage(true); setScaleImage(true);

@ -46,7 +46,11 @@ bool GUIButtonImage::OnEvent(const SEvent& event)
EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images); EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images);
video::ITexture *texture = m_foreground_images[(u32)imageState].Texture; video::ITexture *texture = m_foreground_images[(u32)imageState].Texture;
if (texture != nullptr) if (texture != nullptr)
{
m_image->setImage(texture); m_image->setImage(texture);
}
m_image->setVisible(texture != nullptr);
return result; return result;
} }
@ -110,16 +114,23 @@ void GUIButtonImage::setFromStyle(const StyleSpec &style, ISimpleTextureSource *
video::IVideoDriver *driver = Environment->getVideoDriver(); video::IVideoDriver *driver = Environment->getVideoDriver();
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()); const core::position2di buttonCenter(AbsoluteRect.getCenter());
core::position2d<s32> geom(buttonCenter); core::position2d<s32> geom(buttonCenter);
if (style.isNotDefault(StyleSpec::FGIMG)) {
video::ITexture *texture = style.getTexture(StyleSpec::FGIMG, tsrc);
setForegroundImage(guiScalingImageButton(driver, texture, geom.X, geom.Y)); 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)); 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)); setPressedForegroundImage(guiScalingImageButton(driver, pressed_texture, geom.X, geom.Y));
setScaleImage(true); setScaleImage(true);
} }