summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-10-28 19:54:36 +0300
committerAndrei Karas <akaras@inbox.ru>2015-10-28 19:54:36 +0300
commit34a04d798ed0b4f4b652082da994c8648e4517e6 (patch)
treeb7d98ca0f2b9e187c7eeec92ab60b7f5f25dface /src/gui
parent887a4d50d0c966af5f19e5ed2fe8b5556a6f818d (diff)
downloadmanaplus-34a04d798ed0b4f4b652082da994c8648e4517e6.tar.gz
manaplus-34a04d798ed0b4f4b652082da994c8648e4517e6.tar.bz2
manaplus-34a04d798ed0b4f4b652082da994c8648e4517e6.tar.xz
manaplus-34a04d798ed0b4f4b652082da994c8648e4517e6.zip
Add support for images in npc skined menu.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/widgets/icon.cpp14
-rw-r--r--src/gui/widgets/icon.h9
-rw-r--r--src/gui/windows/npcdialog.cpp13
3 files changed, 30 insertions, 6 deletions
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<NpcImageInfo*>::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<NpcButtonInfo*>::const_iterator, it, dialog->buttons)
{
const NpcButtonInfo *const info = *it;