summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoderic Morris <roderic@ccs.neu.edu>2008-08-18 01:23:58 +0000
committerRoderic Morris <roderic@ccs.neu.edu>2008-08-18 01:23:58 +0000
commitc8b89f9c29e16680f68d9f2ca42048f6f01423a9 (patch)
tree108aea4acaedf19cf795d6ac5cb504a22e5ae4ec
parentd55645648aab1bdf89602bdc05e7a0b356fe191b (diff)
downloadmana-c8b89f9c29e16680f68d9f2ca42048f6f01423a9.tar.gz
mana-c8b89f9c29e16680f68d9f2ca42048f6f01423a9.tar.bz2
mana-c8b89f9c29e16680f68d9f2ca42048f6f01423a9.tar.xz
mana-c8b89f9c29e16680f68d9f2ca42048f6f01423a9.zip
fix bug #209, display skill icons correctly.
-rw-r--r--ChangeLog7
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/gui/icon.cpp60
-rw-r--r--src/gui/icon.h70
-rw-r--r--src/gui/skill.cpp13
-rw-r--r--src/gui/skill.h7
7 files changed, 154 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index a7562cb8..fccb53bb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-08-17 Roderic Morris <roderic@ccs.neu.edu>
+
+ * src/gui/skill.cpp, src/gui/skill.h, src/gui/icon.h,
+ src/gui/icon.cpp, src/CMakeLists.txt, src/Makefile.am:
+ Fix bug #209. Have icons show properly in the skills dialog,
+ and allow easy use of icons in the future.
+
2008-08-13 Bjørn Lindeijer <bjorn@lindeijer.nl>
* src/gui/guildlistbox.cpp: Call the more appropriate method.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 117ca7a9..aee99d2e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -107,6 +107,8 @@ SET(SRCS
gui/hbox.h
gui/help.cpp
gui/help.h
+ gui/icon.cpp
+ gui/icon.h
gui/inttextbox.cpp
gui/inttextbox.h
gui/inventorywindow.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 2fb1f148..e7752477 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -59,6 +59,8 @@ tmw_SOURCES = gui/widgets/dropdown.cpp \
gui/hbox.cpp \
gui/help.cpp \
gui/help.h \
+ gui/icon.h \
+ gui/icon.cpp \
gui/inttextbox.h \
gui/inttextbox.cpp \
gui/inventorywindow.cpp \
diff --git a/src/gui/icon.cpp b/src/gui/icon.cpp
new file mode 100644
index 00000000..58b3ae8a
--- /dev/null
+++ b/src/gui/icon.cpp
@@ -0,0 +1,60 @@
+/*
+ * The Mana World
+ * Copyright 2008 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#include "icon.h"
+
+#include "../graphics.h"
+
+#include "../resources/image.h"
+#include "../resources/resourcemanager.h"
+
+Icon::Icon(const std::string &file)
+ : mImage(0)
+{
+ mImage = ResourceManager::getInstance()->getImage(file);
+ setSize(mImage->getWidth(), mImage->getHeight());
+
+}
+
+Icon::Icon(Image *image)
+ : mImage(image)
+{
+ setSize(mImage->getWidth(), mImage->getHeight());
+}
+
+void Icon::setImage(Image *image)
+{
+ mImage = image;
+ setSize(mImage->getWidth(), mImage->getHeight());
+}
+
+void Icon::draw(gcn::Graphics *g)
+{
+ if(mImage)
+ {
+ Graphics *graphics = static_cast<Graphics*>(g);
+ const int x = (getWidth() - mImage->getWidth()) / 2;
+ const int y = (getHeight() - mImage->getHeight()) / 2;
+ graphics->drawImage(mImage, x, y);
+ }
+}
diff --git a/src/gui/icon.h b/src/gui/icon.h
new file mode 100644
index 00000000..f0d3a70a
--- /dev/null
+++ b/src/gui/icon.h
@@ -0,0 +1,70 @@
+/*
+ * The Mana World
+ * Copyright 2008 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+
+#ifndef _TMW_ICON_H
+#define _TMW_ICON_H
+
+#include <guichan/widget.hpp>
+
+class Image;
+
+
+/**
+ * An icon.
+ *
+ * \ingroup GUI
+ */
+class Icon : public gcn::Widget {
+ public:
+ /**
+ * Constructor.
+ */
+ Icon(const std::string &filename);
+
+ /**
+ * Constructor, uses an existing Image.
+ */
+ Icon(Image *image);
+
+ /**
+ * Gets the current Image.
+ */
+ Image* getImage() { return mImage; }
+
+ /**
+ * Sets the image to display.
+ */
+ void setImage(Image *image);
+
+ /**
+ * Draws the Icon.
+ */
+ void draw(gcn::Graphics *g);
+
+ private:
+
+ Image *mImage;
+};
+
+#endif
diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp
index 8c7d6f29..6cc7a294 100644
--- a/src/gui/skill.cpp
+++ b/src/gui/skill.cpp
@@ -29,6 +29,7 @@
#include "skill.h"
+#include "icon.h"
#include "button.h"
#include "listbox.h"
#include "scrollarea.h"
@@ -100,10 +101,14 @@ void SkillDialog::draw(gcn::Graphics *g)
void SkillDialog::update()
{
- for_each(mTabs.begin(), mTabs.end(), std::mem_fun(&Skill_Tab::update));
+ for(std::list<Skill_Tab*>::const_iterator i = mTabs.begin();
+ i != mTabs.end(); ++i)
+ {
+ (*i)->update();
+ }
}
-Skill_Tab::Skill_Tab(std::string type): type(type)
+Skill_Tab::Skill_Tab(const std::string &type): type(type)
{
setOpaque(false);
setDimension(gcn::Rectangle(0, 0, 270, 420));
@@ -187,11 +192,11 @@ int Skill_Tab::getSkillBegin()
else return skillBegin;
}
-gcn::Icon* Skill_Tab::getIcon(int index)
+Icon* Skill_Tab::getIcon(int index)
{
int skillBegin = getSkillBegin();
std::string icon = LocalPlayer::getSkillInfo(index + skillBegin).icon;
- return new gcn::Icon(icon);
+ return new Icon(icon);
}
void Skill_Tab::updateSkill(int index)
diff --git a/src/gui/skill.h b/src/gui/skill.h
index b3a9e126..12f619bd 100644
--- a/src/gui/skill.h
+++ b/src/gui/skill.h
@@ -36,6 +36,7 @@
#include "../guichanfwd.h"
class ProgressBar;
+class Icon;
class Skill_Tab : public GCContainer, public gcn::ActionListener
{
@@ -48,7 +49,7 @@ class Skill_Tab : public GCContainer, public gcn::ActionListener
/**
* Constructor
*/
- Skill_Tab(std::string type);
+ Skill_Tab(const std::string &type);
/**
* Update this tab
@@ -82,9 +83,9 @@ class Skill_Tab : public GCContainer, public gcn::ActionListener
/**
* Get the icon associated with the given index
*/
- gcn::Icon* getIcon(int index);
+ Icon* getIcon(int index);
- std::vector<gcn::Icon *> mSkillIcons;
+ std::vector<Icon *> mSkillIcons;
std::vector<gcn::Label *> mSkillNameLabels;
std::vector<gcn::Label *> mSkillLevelLabels;
std::vector<gcn::Label *> mSkillExpLabels;