fix leaks

This commit is contained in:
Eduardo Bart 2011-04-09 22:13:12 -03:00
parent 9d1ddf34bf
commit 5de660a20e
7 changed files with 42 additions and 16 deletions

View File

@ -29,6 +29,7 @@
UIElement::UIElement(UI::EElementType type) : UIElement::UIElement(UI::EElementType type) :
AnchorLayout(), AnchorLayout(),
m_type(type), m_type(type),
m_skin(NULL),
m_visible(true), m_visible(true),
m_enabled(true) m_enabled(true)
{ {

View File

@ -38,6 +38,7 @@ public:
UIElementSkin(const std::string& name, UI::EElementType elementType) : UIElementSkin(const std::string& name, UI::EElementType elementType) :
m_name(name), m_name(name),
m_elementType(elementType) { } m_elementType(elementType) { }
virtual ~UIElementSkin() { }
virtual void load(const YAML::Node& node); virtual void load(const YAML::Node& node);
virtual void draw(UIElement *element); virtual void draw(UIElement *element);

View File

@ -32,10 +32,18 @@
UISkins g_uiSkins; UISkins g_uiSkins;
UISkins::~UISkins() void UISkins::init()
{
// load default skin
g_uiSkins.load("skins/tibiaskin.yml");
}
void UISkins::terminate()
{ {
for(auto it = m_elementSkins.begin(); it != m_elementSkins.end(); ++it) for(auto it = m_elementSkins.begin(); it != m_elementSkins.end(); ++it)
delete (*it); delete (*it);
m_elementSkins.clear();
} }
bool UISkins::load(const std::string& file) bool UISkins::load(const std::string& file)

View File

@ -35,7 +35,9 @@ class UISkins
{ {
public: public:
UISkins() { } UISkins() { }
~UISkins();
void init();
void terminate();
bool load(const std::string& file); bool load(const std::string& file);

View File

@ -109,8 +109,7 @@ int main(int argc, const char *argv[])
// init engine // init engine
g_engine.init(); g_engine.init();
// load UI skin g_uiSkins.init();
g_uiSkins.load("skins/tibiaskin.yml");
// state scope // state scope
{ {
@ -129,6 +128,8 @@ int main(int argc, const char *argv[])
// terminate stuff // terminate stuff
g_engine.terminate(); g_engine.terminate();
g_uiSkins.terminate();
} }
// save configurations before exiting // save configurations before exiting

View File

@ -127,6 +127,7 @@ void MenuState::createMainMenu()
// login window // login window
UIWindowPtr window(new UIWindow("Enter Game")); UIWindowPtr window(new UIWindow("Enter Game"));
UIElementWeakPtr weakWindow(window);
window->setSize(Size(236, 178)); window->setSize(Size(236, 178));
window->anchorHorizontalCenter(g_ui->horizontalCenter()); window->anchorHorizontalCenter(g_ui->horizontalCenter());
window->anchorVerticalCenter(g_ui->verticalCenter()); window->anchorVerticalCenter(g_ui->verticalCenter());
@ -162,7 +163,11 @@ void MenuState::createMainMenu()
button->anchorRight(window->right()); button->anchorRight(window->right());
button->anchorBottom(window->bottom()); button->anchorBottom(window->bottom());
button->setMargin(0, 0, 10, 66); button->setMargin(0, 0, 10, 66);
button->onClick([window]{ window->setVisible(false); }); button->onClick([weakWindow]{
UIElementPtr window = weakWindow.lock();
if(window)
window->setVisible(false);
});
window->addChild(button); window->addChild(button);
button = UIButtonPtr(new UIButton("Cancel")); button = UIButtonPtr(new UIButton("Cancel"));
@ -170,7 +175,11 @@ void MenuState::createMainMenu()
button->anchorRight(window->right()); button->anchorRight(window->right());
button->anchorBottom(window->bottom()); button->anchorBottom(window->bottom());
button->setMargin(0, 0, 10, 13); button->setMargin(0, 0, 10, 13);
button->onClick([window]{ window->setVisible(false); }); button->onClick([weakWindow]{
UIElementPtr window = weakWindow.lock();
if(window)
window->setVisible(false);
});
window->addChild(button); window->addChild(button);
UITextEditPtr textEdit(new UITextEdit); UITextEditPtr textEdit(new UITextEdit);
@ -185,5 +194,9 @@ void MenuState::createMainMenu()
textEdit->setMargin(61, 0, 0, 18); textEdit->setMargin(61, 0, 0, 18);
window->addChild(textEdit); window->addChild(textEdit);
enterGameButton->onClick([window] { window->setVisible(true); }); enterGameButton->onClick([weakWindow]{
UIElementPtr window = weakWindow.lock();
if(window)
window->setVisible(true);
});
} }