]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/gui/guiButton.cpp
add airjump and remove unused headers
[dragonfireclient.git] / src / gui / guiButton.cpp
index 9dfe36bc4b94d544637b753f711887824d3719a4..d6dbddf54afb0920014af99b0a45bd164d3e2d9c 100644 (file)
@@ -313,11 +313,12 @@ void GUIButton::draw()
 \r
                // PATCH\r
                video::ITexture* texture = ButtonImages[(u32)imageState].Texture;\r
+               video::SColor image_colors[] = { BgColor, BgColor, BgColor, BgColor };\r
                if (BgMiddle.getArea() == 0) {\r
                        driver->draw2DImage(texture,\r
                                        ScaleImage? AbsoluteRect : core::rect<s32>(pos, sourceRect.getSize()),\r
                                        sourceRect, &AbsoluteClippingRect,\r
-                                       0, UseAlphaChannel);\r
+                                       image_colors, UseAlphaChannel);\r
                } else {\r
                        core::rect<s32> middle = BgMiddle;\r
                        // `-x` is interpreted as `w - x`\r
@@ -327,7 +328,7 @@ void GUIButton::draw()
                                middle.LowerRightCorner.Y += texture->getOriginalSize().Height;\r
                        draw2DImage9Slice(driver, texture,\r
                                        ScaleImage ? AbsoluteRect : core::rect<s32>(pos, sourceRect.getSize()),\r
-                                       middle, &AbsoluteClippingRect);\r
+                                       middle, &AbsoluteClippingRect, image_colors);\r
                }\r
                // END PATCH\r
        }\r
@@ -505,6 +506,13 @@ video::SColor GUIButton::getOverrideColor() const
        return OverrideColor;\r
 }\r
 \r
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8\r
+video::SColor GUIButton::getActiveColor() const\r
+{\r
+       return video::SColor(0,0,0,0); // unused?\r
+}\r
+#endif\r
+\r
 void GUIButton::enableOverrideColor(bool enable)\r
 {\r
        OverrideColorEnabled = enable;\r
@@ -592,25 +600,6 @@ void GUIButton::setPressed(bool pressed)
        {\r
                ClickTime = porting::getTimeMs();\r
                Pressed = pressed;\r
-\r
-               GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());\r
-\r
-               for(IGUIElement *child : getChildren())\r
-               {\r
-                       core::rect<s32> originalRect = child->getRelativePosition();\r
-                       if (Pressed) {\r
-                               child->setRelativePosition(originalRect +\r
-                                               core::dimension2d<s32>(\r
-                                                       skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),\r
-                                                       skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y)));\r
-                       } else {\r
-                               child->setRelativePosition(originalRect -\r
-                                               core::dimension2d<s32>(\r
-                                                       skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),\r
-                                                       skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y)));\r
-                       }\r
-               }\r
-\r
                setFromState();\r
        }\r
 }\r
@@ -741,6 +730,8 @@ GUIButton* GUIButton::addButton(IGUIEnvironment *environment,
 \r
 void GUIButton::setColor(video::SColor color)\r
 {\r
+       BgColor = color;\r
+\r
        float d = 0.65f;\r
        for (size_t i = 0; i < 4; i++) {\r
                video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);\r
@@ -769,22 +760,26 @@ void GUIButton::setFromStyle(const StyleSpec& style)
        bool pressed = (style.getState() & StyleSpec::STATE_PRESSED) != 0;\r
 \r
        if (style.isNotDefault(StyleSpec::BGCOLOR)) {\r
-\r
                setColor(style.getColor(StyleSpec::BGCOLOR));\r
 \r
                // If we have a propagated hover/press color, we need to automatically\r
                // lighten/darken it\r
                if (!Styles[style.getState()].isNotDefault(StyleSpec::BGCOLOR)) {\r
-                       for (size_t i = 0; i < 4; i++) {\r
                                if (pressed) {\r
-                                       Colors[i] = multiplyColorValue(Colors[i], COLOR_PRESSED_MOD);\r
+                                       BgColor = multiplyColorValue(BgColor, COLOR_PRESSED_MOD);\r
+\r
+                                       for (size_t i = 0; i < 4; i++)\r
+                                               Colors[i] = multiplyColorValue(Colors[i], COLOR_PRESSED_MOD);\r
                                } else if (hovered) {\r
-                                       Colors[i] = multiplyColorValue(Colors[i], COLOR_HOVERED_MOD);\r
+                                       BgColor = multiplyColorValue(BgColor, COLOR_HOVERED_MOD);\r
+\r
+                                       for (size_t i = 0; i < 4; i++)\r
+                                               Colors[i] = multiplyColorValue(Colors[i], COLOR_HOVERED_MOD);\r
                                }\r
-                       }\r
                }\r
 \r
        } else {\r
+               BgColor = video::SColor(255, 255, 255, 255);\r
                for (size_t i = 0; i < 4; i++) {\r
                        video::SColor base =\r
                                        Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);\r
@@ -807,19 +802,44 @@ void GUIButton::setFromStyle(const StyleSpec& style)
        setNotClipped(style.getBool(StyleSpec::NOCLIP, false));\r
        setDrawBorder(style.getBool(StyleSpec::BORDER, true));\r
        setUseAlphaChannel(style.getBool(StyleSpec::ALPHA, true));\r
+       setOverrideFont(style.getFont());\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,\r
                                getTextureSource());\r
                setImage(guiScalingImageButton(\r
-                               Environment->getVideoDriver(), texture, geom.X, geom.Y));\r
+                               Environment->getVideoDriver(), texture,\r
+                                               AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));\r
                setScaleImage(true);\r
        } else {\r
                setImage(nullptr);\r
        }\r
+\r
        BgMiddle = style.getRect(StyleSpec::BGIMG_MIDDLE, BgMiddle);\r
+\r
+       // Child padding and offset\r
+       Padding = style.getRect(StyleSpec::PADDING, core::rect<s32>());\r
+       Padding = core::rect<s32>(\r
+                       Padding.UpperLeftCorner + BgMiddle.UpperLeftCorner,\r
+                       Padding.LowerRightCorner + BgMiddle.LowerRightCorner);\r
+\r
+       GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());\r
+       core::vector2d<s32> defaultPressOffset(\r
+                       skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),\r
+                       skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));\r
+       ContentOffset = style.getVector2i(StyleSpec::CONTENT_OFFSET, isPressed()\r
+                       ? defaultPressOffset\r
+                       : core::vector2d<s32>(0));\r
+\r
+       core::rect<s32> childBounds(\r
+                               Padding.UpperLeftCorner.X + ContentOffset.X,\r
+                               Padding.UpperLeftCorner.Y + ContentOffset.Y,\r
+                               AbsoluteRect.getWidth() + Padding.LowerRightCorner.X + ContentOffset.X,\r
+                               AbsoluteRect.getHeight() + Padding.LowerRightCorner.Y + ContentOffset.Y);\r
+\r
+       for (IGUIElement *child : getChildren()) {\r
+               child->setRelativePosition(childBounds);\r
+       }\r
 }\r
 \r
 //! Set the styles used for each state\r