Bonjour,
Pas sur que ce soit le bon endroit, je tente ma chance quand meme!
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:
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:
// 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