sfml/sfgui: Suppression de widget
Bonjour,
Apres avoir fait une petite boite alert (une window, un bouton et un label), j'essaye de la detruire pour liberer la memoire.
J'utilise SFML 2.0 & SFGUI.
Le constructeur, pour voir un peu la bete:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
AlertBox::AlertBox(const std::string& errortitle, const std::string& errortext) :
display(true)
{
// The window
dialog = sfg::Window::Create(sfg::Window::Style::TITLEBAR);
dialog->SetTitle(errortitle);
// The layouter
sfg::Box::Ptr box( sfg::Box::Create( sfg::Box::VERTICAL, 5.0f ) );
// The elements
text = sfg::Label::Create(errortext);
btn = sfg::Button::Create("Ok");
btn->GetSignal(sfg::Widget::OnLeftClick).Connect(&AlertBox::Destroy, this);
box->Pack(text);
box->Pack(btn, false);
dialog->Add(box);
} |
La fonction Destroy ne change que la variable membre "display" à false.
Dans ma boucle graphique, j'ai ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
// Boucle sur les boites alert
for(auto itr = m_window->GetPerennials()->List().begin(); itr != m_window->GetPerennials()->List().end(); ++itr)
{
// Si l'objet n'a jamais été dessiné, on l'ajoute au sfg::Desktop
if(itr->second->Display() && !itr->second->Drawn())
{
// La fonction AlertBox::GetDrawable retourne un sfg::Window::Ptr
desktop.Add(itr->second->GetDrawable());
}
else if(!itr->second->Display())
{ // Ceci est quand on vient d'appuyer sur le bouton, et que la fonction Destroy a ete appellee
// On supprime le sfg::Window de sfg::Desktop
desktop.Remove(itr->second->GetDrawable());
}
}
m_window->Clear(); // sf::RenderWindow::Clear();
desktop.Update( clock.restart().asSeconds() );
m_window->RenderGUI(sfgui); // sfg::Display(m_window);
m_window->Render(); // sf::RenderWindow::Display(); |
Et Quand j'appuie sur le bouton, he bien le sfg::Window ne disparait pas. Il reste sur l'ecran ! Neanmoins je ne peux plus interagir.
Il doit y avoir un probleme au niveau de Clear, ou Update.
Quelqu'un saurais me gider? :)
merci, nico