| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,149 @@ | ||
| /* | ||
| Minetest | ||
| Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> | ||
| This program is free software; you can redistribute it and/or modify | ||
| it under the terms of the GNU Lesser General Public License as published by | ||
| the Free Software Foundation; either version 2.1 of the License, or | ||
| (at your option) any later version. | ||
| This program is distributed in the hope that it will be useful, | ||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| GNU Lesser General Public License for more details. | ||
| You should have received a copy of the GNU Lesser General Public License along | ||
| with this program; if not, write to the Free Software Foundation, Inc., | ||
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
|
|
||
| #include "guiButtonImage.h" | ||
|
|
||
| #include "client/guiscalingfilter.h" | ||
| #include "debug.h" | ||
| #include "IGUIEnvironment.h" | ||
| #include "IGUIImage.h" | ||
| #include "IVideoDriver.h" | ||
| #include "StyleSpec.h" | ||
|
|
||
| using namespace irr; | ||
| using namespace gui; | ||
|
|
||
| GUIButtonImage::GUIButtonImage(gui::IGUIEnvironment *environment, | ||
| gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle, bool noclip) | ||
| : GUIButton (environment, parent, id, rectangle, noclip) | ||
| { | ||
| m_image = Environment->addImage( | ||
| core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), this); | ||
| m_image->setScaleImage(isScalingImage()); | ||
| sendToBack(m_image); | ||
| } | ||
|
|
||
| bool GUIButtonImage::OnEvent(const SEvent& event) | ||
| { | ||
| bool result = GUIButton::OnEvent(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); | ||
|
|
||
| return result; | ||
| } | ||
|
|
||
| void GUIButtonImage::setForegroundImage(EGUI_BUTTON_IMAGE_STATE state, | ||
| video::ITexture *image, const core::rect<s32> &sourceRect) | ||
| { | ||
| if (state >= EGBIS_COUNT) | ||
| return; | ||
|
|
||
| if (image) | ||
| image->grab(); | ||
|
|
||
| u32 stateIdx = (u32)state; | ||
| if (m_foreground_images[stateIdx].Texture) | ||
| m_foreground_images[stateIdx].Texture->drop(); | ||
|
|
||
| m_foreground_images[stateIdx].Texture = image; | ||
| m_foreground_images[stateIdx].SourceRect = sourceRect; | ||
|
|
||
| EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images); | ||
| if (imageState == stateIdx) | ||
| m_image->setImage(image); | ||
| } | ||
|
|
||
| void GUIButtonImage::setForegroundImage(video::ITexture *image) | ||
| { | ||
| setForegroundImage(gui::EGBIS_IMAGE_UP, image); | ||
| } | ||
|
|
||
| void GUIButtonImage::setForegroundImage(video::ITexture *image, const core::rect<s32> &pos) | ||
| { | ||
| setForegroundImage(gui::EGBIS_IMAGE_UP, image, pos); | ||
| } | ||
|
|
||
| void GUIButtonImage::setPressedForegroundImage(video::ITexture *image) | ||
| { | ||
| setForegroundImage(gui::EGBIS_IMAGE_DOWN, image); | ||
| } | ||
|
|
||
| void GUIButtonImage::setPressedForegroundImage(video::ITexture *image, const core::rect<s32> &pos) | ||
| { | ||
| setForegroundImage(gui::EGBIS_IMAGE_DOWN, image, pos); | ||
| } | ||
|
|
||
| void GUIButtonImage::setHoveredForegroundImage(video::ITexture *image) | ||
| { | ||
| setForegroundImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image); | ||
| setForegroundImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image); | ||
| } | ||
|
|
||
| void GUIButtonImage::setHoveredForegroundImage(video::ITexture *image, const core::rect<s32> &pos) | ||
| { | ||
| setForegroundImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image, pos); | ||
| setForegroundImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image, pos); | ||
| } | ||
|
|
||
| void GUIButtonImage::setFromStyle(const StyleSpec &style, ISimpleTextureSource *tsrc) | ||
| { | ||
| GUIButton::setFromStyle(style, tsrc); | ||
|
|
||
| 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()); | ||
| core::position2d<s32> geom(buttonCenter); | ||
|
|
||
| setForegroundImage(guiScalingImageButton(driver, texture, geom.X, geom.Y)); | ||
| setHoveredForegroundImage(guiScalingImageButton(driver, hovered_texture, geom.X, geom.Y)); | ||
| setPressedForegroundImage(guiScalingImageButton(driver, pressed_texture, geom.X, geom.Y)); | ||
| setScaleImage(true); | ||
| } | ||
| } | ||
|
|
||
| void GUIButtonImage::setScaleImage(bool scaleImage) | ||
| { | ||
| GUIButton::setScaleImage(scaleImage); | ||
| m_image->setScaleImage(scaleImage); | ||
| } | ||
|
|
||
| GUIButtonImage *GUIButtonImage::addButton(IGUIEnvironment *environment, | ||
| const core::rect<s32> &rectangle, IGUIElement *parent, s32 id, | ||
| const wchar_t *text, const wchar_t *tooltiptext) | ||
| { | ||
| GUIButtonImage *button = new GUIButtonImage(environment, | ||
| parent ? parent : environment->getRootGUIElement(), id, rectangle); | ||
|
|
||
| if (text) | ||
| button->setText(text); | ||
|
|
||
| if (tooltiptext) | ||
| button->setToolTipText(tooltiptext); | ||
|
|
||
| button->drop(); | ||
| return button; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| /* | ||
| Minetest | ||
| Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> | ||
| This program is free software; you can redistribute it and/or modify | ||
| it under the terms of the GNU Lesser General Public License as published by | ||
| the Free Software Foundation; either version 2.1 of the License, or | ||
| (at your option) any later version. | ||
| This program is distributed in the hope that it will be useful, | ||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| GNU Lesser General Public License for more details. | ||
| You should have received a copy of the GNU Lesser General Public License along | ||
| with this program; if not, write to the Free Software Foundation, Inc., | ||
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
|
|
||
| #include "guiButton.h" | ||
| #include "IGUIButton.h" | ||
|
|
||
| using namespace irr; | ||
|
|
||
| class GUIButtonImage : public GUIButton | ||
| { | ||
| public: | ||
| //! constructor | ||
| GUIButtonImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, | ||
| s32 id, core::rect<s32> rectangle, bool noclip = false); | ||
|
|
||
| virtual bool OnEvent(const SEvent& event) override; | ||
|
|
||
| void setForegroundImage(gui::EGUI_BUTTON_IMAGE_STATE state, | ||
| video::ITexture *image = nullptr, | ||
| const core::rect<s32> &sourceRect = core::rect<s32>(0, 0, 0, 0)); | ||
|
|
||
| void setForegroundImage(video::ITexture *image = nullptr); | ||
| void setForegroundImage(video::ITexture *image, const core::rect<s32> &pos); | ||
|
|
||
| void setPressedForegroundImage(video::ITexture *image = nullptr); | ||
| void setPressedForegroundImage(video::ITexture *image, const core::rect<s32> &pos); | ||
|
|
||
| void setHoveredForegroundImage(video::ITexture *image = nullptr); | ||
| void setHoveredForegroundImage(video::ITexture *image, const core::rect<s32> &pos); | ||
|
|
||
| virtual void setFromStyle(const StyleSpec &style, ISimpleTextureSource *tsrc) override; | ||
|
|
||
| virtual void setScaleImage(bool scaleImage=true) override; | ||
|
|
||
| //! Do not drop returned handle | ||
| static GUIButtonImage *addButton(gui::IGUIEnvironment *environment, | ||
| const core::rect<s32> &rectangle, IGUIElement *parent, s32 id, | ||
| const wchar_t *text, const wchar_t *tooltiptext = L""); | ||
|
|
||
| private: | ||
| ButtonImage m_foreground_images[gui::EGBIS_COUNT]; | ||
| gui::IGUIImage *m_image; | ||
| }; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| /* | ||
| Minetest | ||
| Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> | ||
| This program is free software; you can redistribute it and/or modify | ||
| it under the terms of the GNU Lesser General Public License as published by | ||
| the Free Software Foundation; either version 2.1 of the License, or | ||
| (at your option) any later version. | ||
| This program is distributed in the hope that it will be useful, | ||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| GNU Lesser General Public License for more details. | ||
| You should have received a copy of the GNU Lesser General Public License along | ||
| with this program; if not, write to the Free Software Foundation, Inc., | ||
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
|
|
||
| #include "guiButtonItemImage.h" | ||
|
|
||
| #include "client/client.h" | ||
| #include "client/hud.h" // drawItemStack | ||
| #include "guiItemImage.h" | ||
| #include "IGUIEnvironment.h" | ||
| #include "itemdef.h" | ||
|
|
||
| using namespace irr; | ||
| using namespace gui; | ||
|
|
||
| GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, | ||
| s32 id, core::rect<s32> rectangle, std::string item, Client *client, bool noclip) | ||
| : GUIButton (environment, parent, id, rectangle, noclip) | ||
| { | ||
| m_image = new GUIItemImage(environment, this, id, | ||
| core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), | ||
| item, getActiveFont(), client); | ||
| sendToBack(m_image); | ||
|
|
||
| m_item_name = item; | ||
| m_client = client; | ||
| } | ||
|
|
||
| GUIButtonItemImage *GUIButtonItemImage::addButton(IGUIEnvironment *environment, | ||
| const core::rect<s32> &rectangle, IGUIElement *parent, s32 id, | ||
| const wchar_t *text, std::string item, Client *client) | ||
| { | ||
| GUIButtonItemImage *button = new GUIButtonItemImage(environment, | ||
| parent ? parent : environment->getRootGUIElement(), | ||
| id, rectangle, item, client); | ||
|
|
||
| if (text) | ||
| button->setText(text); | ||
|
|
||
| button->drop(); | ||
| return button; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,45 @@ | ||
| /* | ||
| Minetest | ||
| Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> | ||
| This program is free software; you can redistribute it and/or modify | ||
| it under the terms of the GNU Lesser General Public License as published by | ||
| the Free Software Foundation; either version 2.1 of the License, or | ||
| (at your option) any later version. | ||
| This program is distributed in the hope that it will be useful, | ||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| GNU Lesser General Public License for more details. | ||
| You should have received a copy of the GNU Lesser General Public License along | ||
| with this program; if not, write to the Free Software Foundation, Inc., | ||
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
|
|
||
| #include "guiButton.h" | ||
| #include "IGUIButton.h" | ||
|
|
||
| using namespace irr; | ||
|
|
||
| class Client; | ||
| class GUIItemImage; | ||
|
|
||
| class GUIButtonItemImage : public GUIButton | ||
| { | ||
| public: | ||
| //! constructor | ||
| GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, | ||
| s32 id, core::rect<s32> rectangle, std::string item, | ||
| Client *client, bool noclip = false); | ||
|
|
||
| //! Do not drop returned handle | ||
| static GUIButtonItemImage *addButton(gui::IGUIEnvironment *environment, | ||
| const core::rect<s32> &rectangle, IGUIElement *parent, s32 id, | ||
| const wchar_t *text, std::string item, Client *client); | ||
|
|
||
| private: | ||
| std::string m_item_name; | ||
| Client *m_client; | ||
| GUIItemImage *m_image; | ||
| }; |