From 34a04d798ed0b4f4b652082da994c8648e4517e6 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 28 Oct 2015 19:54:36 +0300 Subject: Add support for images in npc skined menu. --- src/gui/widgets/icon.cpp | 14 ++++++++++---- src/gui/widgets/icon.h | 9 +++++++-- src/gui/windows/npcdialog.cpp | 13 +++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) (limited to 'src/gui') diff --git a/src/gui/widgets/icon.cpp b/src/gui/widgets/icon.cpp index 5876b1201..6c44cdc3a 100644 --- a/src/gui/widgets/icon.cpp +++ b/src/gui/widgets/icon.cpp @@ -30,9 +30,11 @@ #include "debug.h" Icon::Icon(const Widget2 *const widget, - const std::string &file) : + const std::string &file, + const AutoRelease autoRelease) : Widget(widget), - mImage(resourceManager->getImage(file)) + mImage(resourceManager->getImage(file)), + mAutoRelease(autoRelease) { if (mImage) { @@ -43,9 +45,11 @@ Icon::Icon(const Widget2 *const widget, } Icon::Icon(const Widget2 *const widget, - Image *const image) : + Image *const image, + const AutoRelease autoRelease) : Widget(widget), - mImage(image) + mImage(image), + mAutoRelease(autoRelease) { if (mImage) { @@ -59,6 +63,8 @@ Icon::~Icon() { if (gui) gui->removeDragged(this); + if (mImage && mAutoRelease == AutoRelease_true) + mImage->decRef(); } void Icon::setImage(Image *const image) diff --git a/src/gui/widgets/icon.h b/src/gui/widgets/icon.h index e48f71b24..c54c314ba 100644 --- a/src/gui/widgets/icon.h +++ b/src/gui/widgets/icon.h @@ -25,6 +25,8 @@ #include "gui/widgets/widget.h" +#include "enums/simpletypes/autorelease.h" + #include "localconsts.h" class Image; @@ -41,13 +43,15 @@ class Icon final : public Widget * Constructor. */ Icon(const Widget2 *const widget, - const std::string &filename); + const std::string &filename, + const AutoRelease autoRelease = AutoRelease_false); /** * Constructor, uses an existing Image. */ Icon(const Widget2 *const widget, - Image *const image); + Image *const image, + const AutoRelease autoRelease = AutoRelease_false); A_DELETE_COPY(Icon) @@ -73,6 +77,7 @@ class Icon final : public Widget private: Image *mImage; + AutoRelease mAutoRelease; }; #endif // GUI_WIDGETS_ICON_H diff --git a/src/gui/windows/npcdialog.cpp b/src/gui/windows/npcdialog.cpp index 53f64f41c..f375e9509 100644 --- a/src/gui/windows/npcdialog.cpp +++ b/src/gui/windows/npcdialog.cpp @@ -43,6 +43,7 @@ #include "gui/widgets/browserbox.h" #include "gui/widgets/button.h" #include "gui/widgets/createwidget.h" +#include "gui/widgets/icon.h" #include "gui/widgets/inttextfield.h" #include "gui/widgets/itemcontainer.h" #include "gui/widgets/itemlinkhandler.h" @@ -1166,6 +1167,18 @@ void NpcDialog::createSkinControls() } mHideText = dialog->hideText; + FOR_EACH (std::vector::const_iterator, it, dialog->images) + { + const NpcImageInfo *const info = *it; + Image *const image = Theme::getImageFromTheme(info->name); + if (image) + { + Icon *const icon = new Icon(this, image, AutoRelease_true); + icon->setPosition(info->x, info->y); + mSkinContainer->add(icon); + } + } + FOR_EACH (std::vector::const_iterator, it, dialog->buttons) { const NpcButtonInfo *const info = *it; -- cgit v1.2.3-70-g09d2