summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aethyra.cbp2
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/game.cpp4
-rw-r--r--src/gui/itempopup.cpp13
-rw-r--r--src/gui/itempopup.h4
-rw-r--r--src/gui/itemshortcutcontainer.cpp2
-rw-r--r--src/gui/menuwindow.cpp13
-rw-r--r--src/gui/menuwindow.h4
-rw-r--r--src/gui/ministatus.cpp15
-rw-r--r--src/gui/ministatus.h4
-rw-r--r--src/gui/popup.cpp211
-rw-r--r--src/gui/popup.h196
-rw-r--r--src/gui/popupmenu.cpp10
-rw-r--r--src/gui/speechbubble.cpp5
-rw-r--r--src/gui/speechbubble.h4
-rw-r--r--src/gui/window.cpp61
-rw-r--r--src/gui/window.h4
-rw-r--r--src/gui/windowcontainer.cpp2
-rw-r--r--src/gui/windowcontainer.h7
20 files changed, 479 insertions, 86 deletions
diff --git a/aethyra.cbp b/aethyra.cbp
index 6bae4561..aa1737b7 100644
--- a/aethyra.cbp
+++ b/aethyra.cbp
@@ -195,6 +195,8 @@
<Unit filename="src\gui\passwordfield.h" />
<Unit filename="src\gui\playerbox.cpp" />
<Unit filename="src\gui\playerbox.h" />
+ <Unit filename="src\gui\popup.cpp" />
+ <Unit filename="src\gui\popup.h" />
<Unit filename="src\gui\popupmenu.cpp" />
<Unit filename="src\gui\popupmenu.h" />
<Unit filename="src\gui\progressbar.cpp" />
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 171ec7ff..9fdca23a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -144,6 +144,8 @@ SET(SRCS
gui/passwordfield.h
gui/playerbox.cpp
gui/playerbox.h
+ gui/popup.cpp
+ gui/popup.h
gui/popupmenu.cpp
gui/popupmenu.h
gui/progressbar.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 440c020e..c4265dec 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -94,6 +94,8 @@ aethyra_SOURCES = gui/widgets/dropdown.cpp \
gui/passwordfield.h \
gui/playerbox.cpp \
gui/playerbox.h \
+ gui/popup.cpp \
+ gui/popup.h \
gui/popupmenu.cpp \
gui/popupmenu.h \
gui/progressbar.cpp \
diff --git a/src/game.cpp b/src/game.cpp
index 3b621acd..47f4ffd2 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -220,12 +220,12 @@ void createGuiWindows(Network *network)
chatWindow->setVisible((bool) config.getValue(
chatWindow->getWindowName() + "Visible", true));
miniStatusWindow->setVisible((bool) config.getValue(
- miniStatusWindow->getWindowName() + "Visible", true));
+ miniStatusWindow->getPopupName() + "Visible", true));
buyDialog->setVisible(false);
sellDialog->setVisible(false);
tradeWindow->setVisible(false);
menuWindow->setVisible((bool) config.getValue(
- menuWindow->getWindowName() + "Visible", true));
+ menuWindow->getPopupName() + "Visible", true));
itemShortcutWindow->setVisible((bool) config.getValue(
itemShortcutWindow->getWindowName() + "Visible", true));
emoteShortcutWindow->setVisible((bool) config.getValue(
diff --git a/src/gui/itempopup.cpp b/src/gui/itempopup.cpp
index 0f7e2d11..ebbc6af3 100644
--- a/src/gui/itempopup.cpp
+++ b/src/gui/itempopup.cpp
@@ -29,9 +29,8 @@
#include "itempopup.h"
#include "scrollarea.h"
#include "textbox.h"
-#include "windowcontainer.h"
-#include "widgets/layout.h"
+#include "../graphics.h"
#include "../resources/iteminfo.h"
@@ -39,12 +38,8 @@
#include "../utils/stringutils.h"
ItemPopup::ItemPopup():
- Window()
+ Popup()
{
- setResizable(false);
- setShowTitle(false);
- setTitleBarHeight(0);
-
// Item Name
mItemName = new gcn::Label("Label");
mItemName->setFont(boldFont);
@@ -208,8 +203,8 @@ unsigned int ItemPopup::getNumRows()
void ItemPopup::view(int x, int y)
{
- if (windowContainer->getWidth() < (x + getWidth() + 5))
- x = windowContainer->getWidth() - getWidth();
+ if (graphics->getWidth() < (x + getWidth() + 5))
+ x = graphics->getWidth() - getWidth();
if ((y - getHeight() - 10) < 0)
y = 0;
else
diff --git a/src/gui/itempopup.h b/src/gui/itempopup.h
index a91d8c6f..97da4cbb 100644
--- a/src/gui/itempopup.h
+++ b/src/gui/itempopup.h
@@ -24,13 +24,13 @@
#ifndef ITEMPOPUP_H
#define ITEMPOPUP_H
-#include "window.h"
+#include "popup.h"
class ItemInfo;
class ScrollArea;
class TextBox;
-class ItemPopup : public Window
+class ItemPopup : public Popup
{
public:
ItemPopup();
diff --git a/src/gui/itemshortcutcontainer.cpp b/src/gui/itemshortcutcontainer.cpp
index cb709227..c1baca76 100644
--- a/src/gui/itemshortcutcontainer.cpp
+++ b/src/gui/itemshortcutcontainer.cpp
@@ -231,7 +231,7 @@ void ItemShortcutContainer::mouseMoved(gcn::MouseEvent &event)
Item *item = player_node->getInventory()->findItem(itemId);
- if (item && inventoryWindow->isVisible())
+ if (item)
{
mItemPopup->setItem(item->getInfo());
mItemPopup->setOpaque(false);
diff --git a/src/gui/menuwindow.cpp b/src/gui/menuwindow.cpp
index 8a695865..e1be908b 100644
--- a/src/gui/menuwindow.cpp
+++ b/src/gui/menuwindow.cpp
@@ -26,7 +26,9 @@
#include "button.h"
#include "menuwindow.h"
-#include "windowcontainer.h"
+#include "window.h"
+
+#include "../graphics.h"
#include "../utils/gettext.h"
@@ -50,13 +52,8 @@ namespace {
}
MenuWindow::MenuWindow():
- Window("")
+ Popup("Menu")
{
- setResizable(false);
- setWindowName("Menu");
- setMovable(false);
- setTitleBarHeight(0);
-
// Buttons
static const char *buttonNames[] =
{
@@ -81,7 +78,7 @@ MenuWindow::MenuWindow():
h = btn->getHeight();
}
- setPosition(windowContainer->getWidth() - x - 3, 3);
+ setPosition(graphics->getWidth() - x - 3, 3);
setContentSize(x - 3, h);
}
diff --git a/src/gui/menuwindow.h b/src/gui/menuwindow.h
index f70a332e..e8dc0b2e 100644
--- a/src/gui/menuwindow.h
+++ b/src/gui/menuwindow.h
@@ -23,14 +23,14 @@
#ifndef MENU_H
#define MENU_H
-#include "window.h"
+#include "popup.h"
/**
* The Button Menu.
*
* \ingroup Interface
*/
-class MenuWindow : public Window
+class MenuWindow : public Popup
{
public:
/**
diff --git a/src/gui/ministatus.cpp b/src/gui/ministatus.cpp
index 6537b48e..18b9d714 100644
--- a/src/gui/ministatus.cpp
+++ b/src/gui/ministatus.cpp
@@ -31,13 +31,8 @@
#include "../utils/stringutils.h"
MiniStatusWindow::MiniStatusWindow():
- Window("")
+ Popup("MiniStatus")
{
- setWindowName("MiniStatus");
- setResizable(false);
- setMovable(false);
- setTitleBarHeight(0);
-
mHpBar = new ProgressBar(1.0f, 100, 20, 0, 171, 34);
mMpBar = new ProgressBar(1.0f, 100, 20, 26, 102, 230);
mXpBar = new ProgressBar(1.0f, 100, 20, 143, 192, 211);
@@ -52,25 +47,17 @@ MiniStatusWindow::MiniStatusWindow():
setContentSize(mXpBar->getX() + mXpBar->getWidth(),
mXpBar->getY() + mXpBar->getHeight());
- setDefaultSize(0, 0, getWidth(), getHeight());
- loadWindowState();
}
void MiniStatusWindow::update()
{
// HP Bar coloration
if (player_node->mHp < int(player_node->mMaxHp / 3))
- {
mHpBar->setColor(223, 32, 32); // Red
- }
else if (player_node->mHp < int((player_node->mMaxHp / 3) * 2))
- {
mHpBar->setColor(230, 171, 34); // Orange
- }
else
- {
mHpBar->setColor(0, 171, 34); // Green
- }
float xp = (float) player_node->getXp() / player_node->mXpForNextLevel;
diff --git a/src/gui/ministatus.h b/src/gui/ministatus.h
index 33ee548d..b3fc58fc 100644
--- a/src/gui/ministatus.h
+++ b/src/gui/ministatus.h
@@ -23,7 +23,7 @@
#ifndef MINISTATUS_H
#define MINISTATUS_H
-#include "window.h"
+#include "popup.h"
class ProgressBar;
@@ -32,7 +32,7 @@ class ProgressBar;
*
* \ingroup Interface
*/
-class MiniStatusWindow : public Window
+class MiniStatusWindow : public Popup
{
public:
/**
diff --git a/src/gui/popup.cpp b/src/gui/popup.cpp
new file mode 100644
index 00000000..906f7a2e
--- /dev/null
+++ b/src/gui/popup.cpp
@@ -0,0 +1,211 @@
+/*
+ * Aethyra
+ * Copyright (C) 2009 Aethyra Development Team
+ *
+ * This file is part of Aethyra based on original code
+ * from The Mana World.
+ *
+ * This program 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.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <algorithm>
+#include <cassert>
+#include <climits>
+
+#include <guichan/exception.hpp>
+
+#include "gui.h"
+#include "skin.h"
+#include "popup.h"
+#include "window.h"
+#include "windowcontainer.h"
+
+#include "../configlistener.h"
+#include "../configuration.h"
+#include "../log.h"
+
+#include "../resources/image.h"
+
+ConfigListener *Popup::popupConfigListener = 0;
+int Popup::instances = 0;
+bool Popup::mAlphaChanged = false;
+
+class PopupConfigListener : public ConfigListener
+{
+ void optionChanged(const std::string &)
+ {
+ Popup::mAlphaChanged = true;
+ }
+};
+
+Popup::Popup(const std::string& name, Window *parent,
+ const std::string& skin):
+ mParent(parent),
+ mPopupName(name),
+ mMinWidth(100),
+ mMinHeight(40),
+ mMaxWidth(INT_MAX),
+ mMaxHeight(INT_MAX)
+{
+ logger->log("Popup::Popup(\"%s\")", name.c_str());
+
+ if (!windowContainer)
+ throw GCN_EXCEPTION("Popup::Popup(): no windowContainer set");
+
+ if (instances == 0)
+ {
+ popupConfigListener = new PopupConfigListener();
+ // Send GUI alpha changed for initialization
+ popupConfigListener->optionChanged("guialpha");
+ config.addListener("guialpha", popupConfigListener);
+ }
+
+ setPadding(3);
+
+ instances++;
+
+ // Loads the skin
+ mSkin = skinLoader->load(skin);
+
+ setGuiAlpha();
+
+ // Add this window to the window container
+ windowContainer->add(this);
+
+ // Popups are invisible by default
+ setVisible(false);
+
+ addWidgetListener(this);
+}
+
+Popup::~Popup()
+{
+ logger->log("Popup::~Popup(\"%s\")", mPopupName.c_str());
+
+ while (!mWidgets.empty())
+ {
+ gcn::Widget *w = mWidgets.front();
+ remove(w);
+ delete(w);
+ }
+
+ instances--;
+
+ mSkin->instances--;
+
+ if (instances == 0)
+ {
+ config.removeListener("guialpha", popupConfigListener);
+ delete popupConfigListener;
+ popupConfigListener = NULL;
+ }
+}
+
+void Popup::setWindowContainer(WindowContainer *wc)
+{
+ windowContainer = wc;
+}
+
+void Popup::draw(gcn::Graphics *graphics)
+{
+ if (!isVisible())
+ return;
+
+ Graphics *g = static_cast<Graphics*>(graphics);
+
+ g->drawImageRect(0, 0, getWidth(), getHeight(), mSkin->border);
+
+ // Update Popup alpha values
+ if (mAlphaChanged)
+ {
+ for_each(mSkin->border.grid, mSkin->border.grid + 9,
+ std::bind2nd(std::mem_fun(&Image::setAlpha),
+ config.getValue("guialpha", 0.8)));
+ }
+ drawChildren(graphics);
+}
+
+gcn::Rectangle Popup::getChildrenArea()
+{
+ return gcn::Rectangle(getPadding(), 0, getWidth() - getPadding() * 2,
+ getHeight() - getPadding() * 2);
+}
+
+void Popup::setContentSize(int width, int height)
+{
+ width += 2 * getPadding();
+ height += 2 * getPadding();
+
+ if (getMinWidth() > width)
+ width = getMinWidth();
+ else if (getMaxWidth() < width)
+ width = getMaxWidth();
+ if (getMinHeight() > height)
+ height = getMinHeight();
+ else if (getMaxHeight() < height)
+ height = getMaxHeight();
+
+ setSize(width, height);
+}
+
+void Popup::setLocationRelativeTo(gcn::Widget *widget)
+{
+ int wx, wy;
+ int x, y;
+
+ widget->getAbsolutePosition(wx, wy);
+ getAbsolutePosition(x, y);
+
+ setPosition(getX() + (wx + (widget->getWidth() - getWidth()) / 2 - x),
+ getY() + (wy + (widget->getHeight() - getHeight()) / 2 - y));
+}
+
+void Popup::setMinWidth(unsigned int width)
+{
+ mMinWidth = width;
+}
+
+void Popup::setMinHeight(unsigned int height)
+{
+ mMinHeight = height;
+}
+
+void Popup::setMaxWidth(unsigned int width)
+{
+ mMaxWidth = width;
+}
+
+void Popup::setMaxHeight(unsigned int height)
+{
+ mMaxHeight = height;
+}
+
+void Popup::scheduleDelete()
+{
+ windowContainer->scheduleDelete(this);
+}
+
+void Popup::setGuiAlpha()
+{
+ //logger->log("Popup::setGuiAlpha: Alpha Value %f", config.getValue("guialpha", 0.8));
+ for (int i = 0; i < 9; i++)
+ {
+ //logger->log("Popup::setGuiAlpha: Border Image (%i)", i);
+ mSkin->border.grid[i]->setAlpha(config.getValue("guialpha", 0.8));
+ }
+
+ mAlphaChanged = false;
+}
+
diff --git a/src/gui/popup.h b/src/gui/popup.h
new file mode 100644
index 00000000..0f7eebbf
--- /dev/null
+++ b/src/gui/popup.h
@@ -0,0 +1,196 @@
+/*
+ * Aethyra
+ * Copyright (C) 2009 Aethyra Development Team
+ *
+ * This file is part of Aethyra based on original code
+ * from The Mana World.
+ *
+ * This program 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.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef POPUP_H
+#define POPUP_H
+
+#include <guichan/widgetlistener.hpp>
+
+#include <guichan/widgets/container.hpp>
+
+#include "../graphics.h"
+#include "../guichanfwd.h"
+
+class ConfigListener;
+class Skin;
+class SkinLoader;
+class Window;
+class WindowContainer;
+
+/**
+ * A rather reduced down version of the Window class that is particularly suited
+ * for
+ *
+ * \ingroup GUI
+ */
+class Popup : public gcn::Container, gcn::WidgetListener
+{
+ public:
+ friend class PopupConfigListener;
+
+ /**
+ * Constructor. Initializes the title to the given text and hooks
+ * itself into the popup container.
+ *
+ * @param name A human readable name for the popup. Only useful for
+ * debugging purposes.
+ * @param parent The parent Window. This is the Window standing above
+ * this one in the Window hiearchy. When reordering,
+ * a Popup will never go below its parent Window.
+ * @param skin The location where the Popup's skin XML can be found.
+ */
+ Popup(const std::string& name = "", Window *parent = NULL,
+ const std::string &skin = "graphics/gui/gui.xml");
+
+ /**
+ * Destructor. Deletes all the added widgets.
+ */
+ ~Popup();
+
+ /**
+ * Sets the window container to be used by new popups.
+ */
+ static void setWindowContainer(WindowContainer *windowContainer);
+
+ /**
+ * Draws the popup.
+ */
+ void draw(gcn::Graphics *graphics);
+
+ /**
+ * Sets the size of this popup.
+ */
+ void setContentSize(int width, int height);
+
+ /**
+ * Sets the location relative to the given widget.
+ */
+ void setLocationRelativeTo(gcn::Widget *widget);
+
+ /**
+ * Sets the minimum width of the popup.
+ */
+ void setMinWidth(unsigned int width);
+
+ /**
+ * Sets the minimum height of the popup.
+ */
+ void setMinHeight(unsigned int height);
+
+ /**
+ * Sets the maximum width of the popup.
+ */
+ void setMaxWidth(unsigned int width);
+
+ /**
+ * Sets the minimum height of the popup.
+ */
+ void setMaxHeight(unsigned int height);
+
+ /**
+ * Gets the minimum width of the popup.
+ */
+ int getMinWidth() { return mMinWidth; }
+
+ /**
+ * Gets the minimum height of the popup.
+ */
+ int getMinHeight() { return mMinHeight; }
+
+ /**
+ * Gets the maximum width of the popup.
+ */
+ int getMaxWidth() { return mMaxWidth; }
+
+ /**
+ * Gets the minimum height of the popup.
+ */
+ int getMaxHeight() { return mMaxHeight; }
+
+ /**
+ * Gets the padding of the popup. The padding is the distance between
+ * the popup border and the content.
+ *
+ * @return The padding of the popup.
+ * @see setPadding
+ */
+ unsigned int getPadding() const { return mPadding; }
+
+ /**
+ * Sets the padding of the popup. The padding is the distance between the
+ * popup border and the content.
+ *
+ * @param padding The padding of the popup.
+ * @see getPadding
+ */
+ void setPadding(unsigned int padding) { mPadding = padding; }
+
+ /**
+ * Returns the parent Window.
+ *
+ * @return The parent Window or <code>NULL</code> if there is none.
+ */
+ Window* getParentWindow() { return mParent; }
+
+ /**
+ * Sets the name of the popup. This is only useful for debug purposes.
+ */
+ void setPopupName(const std::string &name) { mPopupName = name; }
+
+ /**
+ * Returns the name of the popup. This is only useful for debug purposes.
+ */
+ const std::string& getPopupName() { return mPopupName; }
+
+ /**
+ * Schedule this popup for deletion. It will be deleted at the start
+ * of the next logic update.
+ */
+ void scheduleDelete();
+
+ // Inherited from BasicContainer
+
+ virtual gcn::Rectangle getChildrenArea();
+
+ private:
+ void setGuiAlpha();
+
+ Window *mParent; /**< The parent Window (if there is one) */
+ std::string mPopupName; /**< Name of the Popup */
+ static bool mAlphaChanged; /**< Whether the alpha percent was changed */
+ int mMinWidth; /**< Minimum Popup width */
+ int mMinHeight; /**< Minimum Popup height */
+ int mMaxWidth; /**< Maximum Popup width */
+ int mMaxHeight; /**< Maximum Popup height */
+ unsigned int mPadding; /**< Holds the padding of the window. */
+
+ /**
+ * The config listener that listens to changes relevant to all Popups.
+ */
+ static ConfigListener *popupConfigListener;
+
+ static int instances; /**< Number of Popup instances */
+
+ Skin* mSkin; /**< Skin in use by this Popup */
+};
+
+#endif
diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp
index cead20ed..02be3055 100644
--- a/src/gui/popupmenu.cpp
+++ b/src/gui/popupmenu.cpp
@@ -27,11 +27,11 @@
#include "inventorywindow.h"
#include "item_amount.h"
#include "popupmenu.h"
-#include "windowcontainer.h"
#include "../being.h"
#include "../beingmanager.h"
#include "../floor_item.h"
+#include "../graphics.h"
#include "../item.h"
#include "../localplayer.h"
#include "../npc.h"
@@ -292,10 +292,10 @@ void PopupMenu::showPopup(int x, int y, Item *item)
void PopupMenu::showPopup(int x, int y)
{
setContentSize(mBrowserBox->getWidth() + 8, mBrowserBox->getHeight() + 8);
- if (windowContainer->getWidth() < (x + getWidth() + 5))
- x = windowContainer->getWidth() - getWidth();
- if (windowContainer->getHeight() < (y + getHeight() + 5))
- y = windowContainer->getHeight() - getHeight();
+ if (graphics->getWidth() < (x + getWidth() + 5))
+ x = graphics->getWidth() - getWidth();
+ if (graphics->getHeight() < (y + getHeight() + 5))
+ y = graphics->getHeight() - getHeight();
setPosition(x, y);
setVisible(true);
requestMoveToTop();
diff --git a/src/gui/speechbubble.cpp b/src/gui/speechbubble.cpp
index dcb03dca..0b18209e 100644
--- a/src/gui/speechbubble.cpp
+++ b/src/gui/speechbubble.cpp
@@ -32,13 +32,10 @@
#include "../utils/gettext.h"
SpeechBubble::SpeechBubble():
- Window(_("Speech"), false, NULL, "graphics/gui/speechbubble.xml"),
+ Popup("Speech", NULL, "graphics/gui/speechbubble.xml"),
mText("")
{
setContentSize(140, 46);
- setShowTitle(false);
- setTitleBarHeight(0);
-
setMinWidth(29);
setMinHeight(29);
diff --git a/src/gui/speechbubble.h b/src/gui/speechbubble.h
index 6b03cc85..a1a597c1 100644
--- a/src/gui/speechbubble.h
+++ b/src/gui/speechbubble.h
@@ -23,12 +23,12 @@
#ifndef SPEECHBUBBLE_H
#define SPEECHBUBBLE_H
-#include "window.h"
+#include "popup.h"
class ScrollArea;
class TextBox;
-class SpeechBubble : public Window
+class SpeechBubble : public Popup
{
public:
SpeechBubble();
diff --git a/src/gui/window.cpp b/src/gui/window.cpp
index def81c53..76c19751 100644
--- a/src/gui/window.cpp
+++ b/src/gui/window.cpp
@@ -41,7 +41,6 @@
#include "../resources/image.h"
ConfigListener *Window::windowConfigListener = 0;
-WindowContainer *Window::windowContainer = 0;
int Window::instances = 0;
int Window::mouseResize = 0;
bool Window::mAlphaChanged = false;
@@ -216,39 +215,39 @@ void Window::setLocationRelativeTo(ImageRect::ImagePosition position,
}
else if (position == ImageRect::UPPER_CENTER)
{
- offsetX += (windowContainer->getWidth() - getWidth()) / 2;
+ offsetX += (graphics->getWidth() - getWidth()) / 2;
}
else if (position == ImageRect::UPPER_RIGHT)
{
- offsetX += windowContainer->getWidth() - getWidth();
+ offsetX += graphics->getWidth() - getWidth();
}
else if (position == ImageRect::LEFT)
{
- offsetY += (windowContainer->getHeight() - getHeight()) / 2;
+ offsetY += (graphics->getHeight() - getHeight()) / 2;
}
else if (position == ImageRect::CENTER)
{
- offsetX += (windowContainer->getWidth() - getWidth()) / 2;
- offsetY += (windowContainer->getHeight() - getHeight()) / 2;
+ offsetX += (graphics->getWidth() - getWidth()) / 2;
+ offsetY += (graphics->getHeight() - getHeight()) / 2;
}
else if (position == ImageRect::RIGHT)
{
- offsetX += windowContainer->getWidth() - getWidth();
- offsetY += (windowContainer->getHeight() - getHeight()) / 2;
+ offsetX += graphics->getWidth() - getWidth();
+ offsetY += (graphics->getHeight() - getHeight()) / 2;
}
else if (position == ImageRect::LOWER_LEFT)
{
- offsetY += windowContainer->getHeight() - getHeight();
+ offsetY += graphics->getHeight() - getHeight();
}
else if (position == ImageRect::LOWER_CENTER)
{
- offsetX += (windowContainer->getWidth() - getWidth()) / 2;
- offsetY += windowContainer->getHeight() - getHeight();
+ offsetX += (graphics->getWidth() - getWidth()) / 2;
+ offsetY += graphics->getHeight() - getHeight();
}
else if (position == ImageRect::LOWER_RIGHT)
{
- offsetX += windowContainer->getWidth() - getWidth();
- offsetY += windowContainer->getHeight() - getHeight();
+ offsetX += graphics->getWidth() - getWidth();
+ offsetY += graphics->getHeight() - getHeight();
}
setPosition(offsetX, offsetY);
@@ -429,8 +428,8 @@ void Window::mouseDragged(gcn::MouseEvent &event)
{
int newX = std::max(0, getX());
int newY = std::max(0, getY());
- newX = std::min(windowContainer->getWidth() - getWidth(), newX);
- newY = std::min(windowContainer->getHeight() - getHeight(), newY);
+ newX = std::min(graphics->getWidth() - getWidth(), newX);
+ newY = std::min(graphics->getHeight() - getHeight(), newY);
setPosition(newX, newY);
}
@@ -475,13 +474,13 @@ void Window::mouseDragged(gcn::MouseEvent &event)
newDim.height += newDim.y;
newDim.y = 0;
}
- if (newDim.x + newDim.width > windowContainer->getWidth())
+ if (newDim.x + newDim.width > graphics->getWidth())
{
- newDim.width = windowContainer->getWidth() - newDim.x;
+ newDim.width = graphics->getWidth() - newDim.x;
}
- if (newDim.y + newDim.height > windowContainer->getHeight())
+ if (newDim.y + newDim.height > graphics->getHeight())
{
- newDim.height = windowContainer->getHeight() - newDim.y;
+ newDim.height = graphics->getHeight() - newDim.y;
}
// Update mouse offset when dragging bottom or right border
@@ -585,39 +584,39 @@ void Window::setDefaultSize(int defaultWidth, int defaultHeight,
}
else if (position == ImageRect::UPPER_CENTER)
{
- x = (windowContainer->getWidth() - defaultWidth) / 2;
+ x = (graphics->getWidth() - defaultWidth) / 2;
}
else if (position == ImageRect::UPPER_RIGHT)
{
- x = windowContainer->getWidth() - defaultWidth;
+ x = graphics->getWidth() - defaultWidth;
}
else if (position == ImageRect::LEFT)
{
- y = (windowContainer->getHeight() - defaultHeight) / 2;
+ y = (graphics->getHeight() - defaultHeight) / 2;
}
else if (position == ImageRect::CENTER)
{
- x = (windowContainer->getWidth() - defaultWidth) / 2;
- y = (windowContainer->getHeight() - defaultHeight) / 2;
+ x = (graphics->getWidth() - defaultWidth) / 2;
+ y = (graphics->getHeight() - defaultHeight) / 2;
}
else if (position == ImageRect::RIGHT)
{
- x = windowContainer->getWidth() - defaultWidth;
- y = (windowContainer->getHeight() - defaultHeight) / 2;
+ x = graphics->getWidth() - defaultWidth;
+ y = (graphics->getHeight() - defaultHeight) / 2;
}
else if (position == ImageRect::LOWER_LEFT)
{
- y = windowContainer->getHeight() - defaultHeight;
+ y = graphics->getHeight() - defaultHeight;
}
else if (position == ImageRect::LOWER_CENTER)
{
- x = (windowContainer->getWidth() - defaultWidth) / 2;
- y = windowContainer->getHeight() - defaultHeight;
+ x = (graphics->getWidth() - defaultWidth) / 2;
+ y = graphics->getHeight() - defaultHeight;
}
else if (position == ImageRect::LOWER_RIGHT)
{
- x = windowContainer->getWidth() - defaultWidth;
- y = windowContainer->getHeight() - defaultHeight;
+ x = graphics->getWidth() - defaultWidth;
+ y = graphics->getHeight() - defaultHeight;
}
mDefaultX = x - offsetX;
diff --git a/src/gui/window.h b/src/gui/window.h
index 7ae7ebba..d573d85f 100644
--- a/src/gui/window.h
+++ b/src/gui/window.h
@@ -300,10 +300,6 @@ class Window : public gcn::Window, gcn::WidgetListener
*/
virtual void close();
- protected:
- /** The window container windows add themselves to. */
- static WindowContainer *windowContainer;
-
private:
enum ResizeHandles
{
diff --git a/src/gui/windowcontainer.cpp b/src/gui/windowcontainer.cpp
index 0aa61965..ad86a253 100644
--- a/src/gui/windowcontainer.cpp
+++ b/src/gui/windowcontainer.cpp
@@ -24,6 +24,8 @@
#include "../utils/dtor.h"
+WindowContainer *windowContainer = NULL;
+
void WindowContainer::logic()
{
delete_all(mDeathList);
diff --git a/src/gui/windowcontainer.h b/src/gui/windowcontainer.h
index 09f34cf5..23b221cf 100644
--- a/src/gui/windowcontainer.h
+++ b/src/gui/windowcontainer.h
@@ -46,6 +46,11 @@ class WindowContainer : public gcn::Container
*/
void scheduleDelete(gcn::Widget *widget);
+ /**
+ * Get the number of widget instances
+ */
+ int getNumberOfInstances() { return mDeathList.size(); }
+
private:
/**
* List of widgets that are scheduled to be deleted.
@@ -55,4 +60,6 @@ class WindowContainer : public gcn::Container
Widgets mDeathList;
};
+extern WindowContainer* windowContainer;
+
#endif