From 60544ac56f13132ef24ce38024627a127f7f15f0 Mon Sep 17 00:00:00 2001 From: Hugues Ross Date: Sun, 26 Jan 2020 14:35:26 -0500 Subject: Add 9-slice background support to button formspec elements (#9290) --- src/gui/guiButton.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/gui/guiButton.cpp') diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp index f7a0af2d9..4c16ee237 100644 --- a/src/gui/guiButton.cpp +++ b/src/gui/guiButton.cpp @@ -307,10 +307,25 @@ void GUIButton::draw() } } - driver->draw2DImage(ButtonImages[(u32)imageState].Texture, - ScaleImage? AbsoluteRect : core::rect(pos, sourceRect.getSize()), - sourceRect, &AbsoluteClippingRect, - 0, UseAlphaChannel); + // PATCH + video::ITexture* texture = ButtonImages[(u32)imageState].Texture; + if (BgMiddle.getArea() == 0) { + driver->draw2DImage(texture, + ScaleImage? AbsoluteRect : core::rect(pos, sourceRect.getSize()), + sourceRect, &AbsoluteClippingRect, + 0, UseAlphaChannel); + } else { + core::rect middle = BgMiddle; + // `-x` is interpreted as `w - x` + if (middle.LowerRightCorner.X < 0) + middle.LowerRightCorner.X += texture->getOriginalSize().Width; + if (middle.LowerRightCorner.Y < 0) + middle.LowerRightCorner.Y += texture->getOriginalSize().Height; + draw2DImage9Slice(driver, texture, + ScaleImage ? AbsoluteRect : core::rect(pos, sourceRect.getSize()), + middle, &AbsoluteClippingRect); + } + // END PATCH } if (SpriteBank) @@ -804,5 +819,6 @@ void GUIButton::setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc) Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y)); setScaleImage(true); } + BgMiddle = style.getRect(StyleSpec::BGIMG_MIDDLE, BgMiddle); } // END PATCH -- cgit v1.2.3